Author: rob.stryker(a)jboss.com
Date: 2009-07-08 05:56:51 -0400 (Wed, 08 Jul 2009)
New Revision: 16499
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/model/other/internal/WorkspaceVFS.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/ant/AntVFS.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/DirectoryScannerFactory.java
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchivesVFS.java
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/ArchivesTestSuite.java
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelUtilTest.java
Log:
JBIDE-4249 - vaguely-referenced dependency jars will now rebuild those that depend on them
in the builder
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/model/other/internal/WorkspaceVFS.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/model/other/internal/WorkspaceVFS.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/eclipse/org/jboss/ide/eclipse/archives/core/model/other/internal/WorkspaceVFS.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -11,6 +11,7 @@
package org.jboss.ide.eclipse.archives.core.model.other.internal;
import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -93,4 +94,13 @@
}
return null;
}
+
+ public IPath[] absolutePathToWorkspacePath(IPath path) {
+ IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(path);
+ IPath[] paths = new IPath[files.length];
+ for( int i = 0; i < files.length; i++ ) {
+ paths[i] = files[i].getFullPath();
+ }
+ return paths;
+ }
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/ant/AntVFS.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/ant/AntVFS.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/ant/AntVFS.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -83,5 +83,11 @@
}
return null;
}
-
+
+ // TODO unsupported in ant for now as ant does not use this feature
+ // Ant does not make use of incremental builds and that is the only
+ // place this method is called
+ public IPath[] absolutePathToWorkspacePath(IPath path) {
+ return new IPath[]{};
+ }
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/build/ArchiveBuildDelegate.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -12,8 +12,10 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
+import java.util.TreeSet;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -31,6 +33,7 @@
import org.jboss.ide.eclipse.archives.core.model.IArchiveFolder;
import org.jboss.ide.eclipse.archives.core.model.IArchiveModelRootNode;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
+import org.jboss.ide.eclipse.archives.core.model.IArchiveNodeVisitor;
import
org.jboss.ide.eclipse.archives.core.model.DirectoryScannerFactory.DirectoryScannerExtension.FileWrapper;
import org.jboss.ide.eclipse.archives.core.util.ModelUtil;
import org.jboss.ide.eclipse.archives.core.util.PathUtils;
@@ -81,7 +84,7 @@
monitor.beginTask( ArchivesCore.bind(ArchivesCoreMessages.BuildingProject,
ArchivesCore.getInstance().getVFS().getProjectName(project)), nodes.length * 1000);
-
+
for( int i = 0; i < nodes.length; i++ ) {
errors.addAll(Arrays.asList(
fullArchiveBuild(
@@ -103,6 +106,23 @@
}
}
+ protected IArchive[] findReferences(IArchive node2) {
+ final Set<IArchive> s = new TreeSet<IArchive>();
+ final IPath dest = node2.getArchiveFilePath();
+ ArchivesModel.instance().accept(new IArchiveNodeVisitor(){
+ public boolean visit(IArchiveNode node) {
+ if( node.getNodeType() == IArchiveNode.TYPE_ARCHIVE_FILESET) {
+ IArchiveFileSet fs = (IArchiveFileSet)node;
+ FileWrapper[] wrapper = fs.getMatches(dest);
+ if( wrapper != null && wrapper.length > 0 )
+ s.add(fs.getRootArchive());
+ }
+ return true;
+ }
+ });
+ return (IArchive[]) s.toArray(new IArchive[s.size()]);
+ }
+
/**
* Builds an archive entirely, overwriting whatever was in the output destination.
* @param pkg The archive to build
@@ -183,7 +203,7 @@
// build the filesets
IArchiveFileSet[] filesets = ModelUtil.findAllDescendentFilesets(pkg);
- IProgressMonitor filesetMonitor = new SubProgressMonitor(monitor, 7000);
+ IProgressMonitor filesetMonitor = new SubProgressMonitor(monitor, 6000);
filesetMonitor.beginTask(ArchivesCoreMessages.BuildingFilesets, filesets.length *
1000);
for( int i = 0; i < filesets.length; i++ ) {
IStatus[] errors2 = fullFilesetBuild(filesets[i], new
SubProgressMonitor(filesetMonitor, 1000), pkg);
@@ -197,7 +217,21 @@
// actions[i].execute();
// }
// }
+
+
+ ArrayList<IArchive> referencingArchives = new ArrayList<IArchive>();
+ referencingArchives.addAll(Arrays.asList(findReferences(pkg)));
+ IProgressMonitor referenceMon = new SubProgressMonitor(monitor, 1000);
+ referenceMon.beginTask(ArchivesCoreMessages.BuildingArchive,
+ referencingArchives.size() * 1000);
+ for( Iterator<IArchive> i = referencingArchives.iterator(); i.hasNext();) {
+ IArchive toBuild = i.next();
+ errors.add(fullArchiveBuild(
+ toBuild, new SubProgressMonitor(referenceMon, 1000), log));
+ }
+
+
EventManager.finishedBuildingArchive(pkg);
IStatus[] errors2 = errors.toArray(new IStatus[errors.size()]);
if( log )
@@ -243,8 +277,11 @@
Set<IPath> removed, boolean workspaceRelative, IProgressMonitor monitor) {
ArrayList<IStatus> errors = new ArrayList<IStatus>();
+ if( addedChanged.size() == 0 && removed.size() == 0 )
+ return;
+
// removed get more work because all filesets are being rescanned before handling the
removed
- int totalWork = (addedChanged.size()*100) + (removed.size()*200) + 50;
+ int totalWork = (addedChanged.size()*100) + (removed.size()*200) + 50 + 500;
monitor.beginTask(ArchivesCoreMessages.ProjectArchivesIncrementalBuild, totalWork);
// find any and all filesets that match each file
@@ -305,10 +342,26 @@
TrueZipUtil.sync();
+ Comparator c = new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return 0;
+ }
+ };
+ Set<IPath> changedPaths = new TreeSet<IPath>(c);
Iterator<IArchive> i2 = topPackagesChanged.iterator();
+ SubProgressMonitor consumedMon = new SubProgressMonitor(monitor, 500);
while(i2.hasNext()) {
- EventManager.finishedBuildingArchive(i2.next());
+ try {
+ IArchive changed = i2.next();
+ changedPaths.add(changed.getArchiveFilePath());
+ EventManager.finishedBuildingArchive(changed);
+ } catch( ClassCastException cce ) {
+ cce.printStackTrace();
+ }
}
+ incrementalBuild(null, changedPaths, new TreeSet(), false,
+ new SubProgressMonitor(consumedMon, 500));
+
if( errors.size() > 0 )
EventManager.error(null, errors.toArray(new IStatus[errors.size()]));
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/DirectoryScannerFactory.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/DirectoryScannerFactory.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/DirectoryScannerFactory.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -236,7 +236,30 @@
}
public boolean couldBeIncluded(String name, boolean inWorkspace) {
- return super.isIncluded(name) && !super.isExcluded(name);
+ IPath targetBase = ((FileWrapper)getBasedir()).getWrapperPath();
+ IPath[] questionFiles = new IPath[] { new Path(name) };
+ if( workspaceRelative && !inWorkspace) {
+ questionFiles =
ArchivesCore.getInstance().getVFS().absolutePathToWorkspacePath(questionFiles[0]);
+ } else if( !workspaceRelative && inWorkspace) {
+ questionFiles[0] = ArchivesCore.getInstance().
+ getVFS().workspacePathToAbsolutePath(questionFiles[0]);
+ }
+ ArrayList<IPath> acceptablePaths = new ArrayList<IPath>();
+ for( int i = 0; i < questionFiles.length; i++ ) {
+ if( targetBase.isPrefixOf(questionFiles[i]))
+
acceptablePaths.add(questionFiles[i].removeFirstSegments(targetBase.segmentCount()));
+ }
+
+ if( acceptablePaths.size() == 0 )
+ return false;
+
+ IPath p;
+ for( int i = 0; i < acceptablePaths.size(); i++ ) {
+ p = acceptablePaths.get(i);
+ if( super.isIncluded(p.toString()) && !super.isExcluded(p.toString()))
+ return true;
+ }
+ return false;
}
}
}
Modified:
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchivesVFS.java
===================================================================
---
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchivesVFS.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/model/IArchivesVFS.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -36,6 +36,12 @@
public IPath workspacePathToAbsolutePath(IPath path);
/**
+ * Translates a global path to any and all workspace path
+ * that match it, if it can
+ */
+ public IPath[] absolutePathToWorkspacePath(IPath path);
+
+ /**
* Get the project name that matches this path
* @param absolutePath
* @return
Modified:
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/ArchivesTestSuite.java
===================================================================
---
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/ArchivesTestSuite.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/ArchivesTestSuite.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -16,6 +16,7 @@
import org.jboss.ide.eclipse.archives.test.core.ArchivesCoreTest;
import org.jboss.ide.eclipse.archives.test.core.ant.SimpleAntTest;
import org.jboss.ide.eclipse.archives.test.model.DirectoryScannerTest;
+import org.jboss.ide.eclipse.archives.test.model.FilesetMatchesPathTest;
import org.jboss.ide.eclipse.archives.test.model.ModelCreationTest;
import org.jboss.ide.eclipse.archives.test.model.ModelTruezipBridgeTest;
import org.jboss.ide.eclipse.archives.test.model.ModelUtilTest;
@@ -42,6 +43,7 @@
suite.addTestSuite(ModelCreationTest.class);
suite.addTestSuite(ModelTruezipBridgeTest.class);
suite.addTestSuite(SimpleAntTest.class);
+ suite.addTestSuite(FilesetMatchesPathTest.class);
// jiras
suite.addTestSuite(JBIDE1406Test.class);
Modified:
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelUtilTest.java
===================================================================
---
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelUtilTest.java 2009-07-08
09:40:08 UTC (rev 16498)
+++
trunk/archives/tests/org.jboss.ide.eclipse.archives.test/src/org/jboss/ide/eclipse/archives/test/model/ModelUtilTest.java 2009-07-08
09:56:51 UTC (rev 16499)
@@ -168,7 +168,6 @@
private boolean testMatches(IArchiveFileSet fs, IPath absoluteFile, IArchiveNode node)
{
FileWrapper[] wrappers = fs.getMatches(absoluteFile);
return ModelUtil.otherFilesetMatchesPathAndOutputLocation(fs, absoluteFile,
wrappers[0].getFilesetRelative(), wrappers[0].getRootArchiveRelative().toString(), node);
-
}
}