X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/BatchImageBuilder.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/BatchImageBuilder.java index d29be84..6669d85 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/BatchImageBuilder.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/builder/BatchImageBuilder.java @@ -25,224 +25,260 @@ import org.eclipse.core.runtime.IPath; public class BatchImageBuilder extends AbstractImageBuilder { -protected BatchImageBuilder(PHPBuilder javaBuilder) { - super(javaBuilder); - this.nameEnvironment.isIncrementalBuild = false; -} + protected BatchImageBuilder(PHPBuilder javaBuilder) { + super(javaBuilder); + this.nameEnvironment.isIncrementalBuild = false; + } -public void build() { - if (PHPBuilder.DEBUG) - System.out.println("FULL build"); //$NON-NLS-1$ + public void build() { + if (PHPBuilder.DEBUG) + System.out.println("FULL build"); //$NON-NLS-1$ - try { - notifier.subTask(Util.bind("build.cleaningOutput")); //$NON-NLS-1$ - PHPBuilder.removeProblemsAndTasksFor(javaBuilder.currentProject); -// cleanOutputFolders(true); - notifier.updateProgressDelta(0.1f); + try { + notifier.subTask(Util.bind("build.cleaningOutput")); //$NON-NLS-1$ + PHPBuilder.removeProblemsAndTasksFor(javaBuilder.currentProject); + // cleanOutputFolders(true); + notifier.updateProgressDelta(0.1f); - notifier.subTask(Util.bind("build.analyzingSources")); //$NON-NLS-1$ - ArrayList sourceFiles = new ArrayList(33); - addAllSourceFiles(sourceFiles); - notifier.updateProgressDelta(0.15f); + notifier.subTask(Util.bind("build.analyzingSources")); //$NON-NLS-1$ + ArrayList sourceFiles = new ArrayList(33); + addAllSourceFiles(sourceFiles); + notifier.updateProgressDelta(0.15f); - if (sourceFiles.size() > 0) { - SourceFile[] allSourceFiles = new SourceFile[sourceFiles.size()]; - sourceFiles.toArray(allSourceFiles); + if (sourceFiles.size() > 0) { + SourceFile[] allSourceFiles = new SourceFile[sourceFiles.size()]; + sourceFiles.toArray(allSourceFiles); - notifier.setProgressPerCompilationUnit(0.75f / allSourceFiles.length); - workQueue.addAll(allSourceFiles); - compile(allSourceFiles); - } + notifier + .setProgressPerCompilationUnit(0.75f / allSourceFiles.length); + workQueue.addAll(allSourceFiles); + compile(allSourceFiles); + } + + if (javaBuilder.javaProject.hasCycleMarker()) + javaBuilder.mustPropagateStructuralChanges(); - if (javaBuilder.javaProject.hasCycleMarker()) - javaBuilder.mustPropagateStructuralChanges(); - - } catch (CoreException e) { - throw internalException(e); - } finally { - cleanUp(); + } catch (CoreException e) { + throw internalException(e); + } finally { + cleanUp(); + } } -} -protected void addAllSourceFiles(final ArrayList sourceFiles) throws CoreException { - - for (int i = 0, l = sourceLocations.length; i < l; i++) { - final ClasspathMultiDirectory sourceLocation = sourceLocations[i]; - final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; - final boolean isAlsoProject = sourceLocation.sourceFolder.equals(javaBuilder.currentProject); - sourceLocation.sourceFolder.accept( - new IResourceProxyVisitor() { + protected void addAllSourceFiles(final ArrayList sourceFiles) + throws CoreException { + + for (int i = 0, l = sourceLocations.length; i < l; i++) { + final ClasspathMultiDirectory sourceLocation = sourceLocations[i]; + final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; + final boolean isAlsoProject = sourceLocation.sourceFolder + .equals(javaBuilder.currentProject); + sourceLocation.sourceFolder.accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { IResource resource = null; if (exclusionPatterns != null) { resource = proxy.requestResource(); - if (Util.isExcluded(resource, exclusionPatterns)) return false; + if (Util.isExcluded(resource, exclusionPatterns)) + return false; } - switch(proxy.getType()) { - case IResource.FILE : - if (net.sourceforge.phpdt.internal.compiler.util.Util.isJavaFileName(proxy.getName())) { - if (resource == null) - resource = proxy.requestResource(); - sourceFiles.add(new SourceFile((IFile) resource, sourceLocation, encoding)); - } + switch (proxy.getType()) { + case IResource.FILE: + if (net.sourceforge.phpdt.internal.compiler.util.Util + .isJavaFileName(proxy.getName())) { + if (resource == null) + resource = proxy.requestResource(); + sourceFiles.add(new SourceFile((IFile) resource, + sourceLocation, encoding)); + } + return false; + case IResource.FOLDER: + if (isAlsoProject + && isExcludedFromProject(proxy + .requestFullPath())) return false; - case IResource.FOLDER : - if (isAlsoProject && isExcludedFromProject(proxy.requestFullPath())) return false; } return true; } - }, - IResource.NONE - ); - notifier.checkCancel(); + }, IResource.NONE); + notifier.checkCancel(); + } } -} -protected void cleanOutputFolders() throws CoreException { - boolean deleteAll = JavaCore.CLEAN.equals( - javaBuilder.javaProject.getOption(JavaCore.CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER, true)); - if (deleteAll) { - ArrayList visited = new ArrayList(sourceLocations.length); - for (int i = 0, l = sourceLocations.length; i < l; i++) { - notifier.subTask(Util.bind("build.cleaningOutput")); //$NON-NLS-1$ - ClasspathMultiDirectory sourceLocation = sourceLocations[i]; - if (sourceLocation.hasIndependentOutputFolder) { - IContainer outputFolder = sourceLocation.binaryFolder; - if (!visited.contains(outputFolder)) { - visited.add(outputFolder); - IResource[] members = outputFolder.members(); - for (int j = 0, m = members.length; j < m; j++) - members[j].delete(IResource.FORCE, null); - } - notifier.checkCancel(); - copyExtraResourcesBack(sourceLocation, deleteAll); - } else { - boolean isOutputFolder = sourceLocation.sourceFolder.equals(sourceLocation.binaryFolder); - final char[][] exclusionPatterns = - isOutputFolder - ? sourceLocation.exclusionPatterns - : null; // ignore exclusionPatterns if output folder == another source folder... not this one - sourceLocation.binaryFolder.accept( - new IResourceProxyVisitor() { - public boolean visit(IResourceProxy proxy) throws CoreException { - IResource resource = null; - if (exclusionPatterns != null) { - resource = proxy.requestResource(); - if (Util.isExcluded(resource, exclusionPatterns)) return false; - } - if (proxy.getType() == IResource.FILE) { -// if (ProjectPrefUtil.isClassFileName(proxy.getName())) { -// if (resource == null) -// resource = proxy.requestResource(); -// resource.delete(IResource.FORCE, null); -// } - return false; - } - notifier.checkCancel(); - return true; - } - }, - IResource.NONE - ); - if (!isOutputFolder) { + protected void cleanOutputFolders() throws CoreException { + boolean deleteAll = JavaCore.CLEAN.equals(javaBuilder.javaProject + .getOption(JavaCore.CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER, true)); + if (deleteAll) { + ArrayList visited = new ArrayList(sourceLocations.length); + for (int i = 0, l = sourceLocations.length; i < l; i++) { + notifier.subTask(Util.bind("build.cleaningOutput")); //$NON-NLS-1$ + ClasspathMultiDirectory sourceLocation = sourceLocations[i]; + if (sourceLocation.hasIndependentOutputFolder) { + IContainer outputFolder = sourceLocation.binaryFolder; + if (!visited.contains(outputFolder)) { + visited.add(outputFolder); + IResource[] members = outputFolder.members(); + for (int j = 0, m = members.length; j < m; j++) + members[j].delete(IResource.FORCE, null); + } notifier.checkCancel(); - copyPackages(sourceLocation); + copyExtraResourcesBack(sourceLocation, deleteAll); + } else { + boolean isOutputFolder = sourceLocation.sourceFolder + .equals(sourceLocation.binaryFolder); + final char[][] exclusionPatterns = isOutputFolder ? sourceLocation.exclusionPatterns + : null; // ignore exclusionPatterns if output folder + // == another source folder... not this one + sourceLocation.binaryFolder.accept( + new IResourceProxyVisitor() { + public boolean visit(IResourceProxy proxy) + throws CoreException { + IResource resource = null; + if (exclusionPatterns != null) { + resource = proxy.requestResource(); + if (Util.isExcluded(resource, + exclusionPatterns)) + return false; + } + if (proxy.getType() == IResource.FILE) { + // if + // (ProjectPrefUtil.isClassFileName(proxy.getName())) + // { + // if (resource == null) + // resource = proxy.requestResource(); + // resource.delete(IResource.FORCE, + // null); + // } + return false; + } + notifier.checkCancel(); + return true; + } + }, IResource.NONE); + if (!isOutputFolder) { + notifier.checkCancel(); + copyPackages(sourceLocation); + } } + notifier.checkCancel(); + } + } else { + for (int i = 0, l = sourceLocations.length; i < l; i++) { + ClasspathMultiDirectory sourceLocation = sourceLocations[i]; + if (sourceLocation.hasIndependentOutputFolder) + copyExtraResourcesBack(sourceLocation, deleteAll); + else if (!sourceLocation.sourceFolder + .equals(sourceLocation.binaryFolder)) + copyPackages(sourceLocation); // output folder is + // different from source + // folder + notifier.checkCancel(); } - notifier.checkCancel(); - } - } else { - for (int i = 0, l = sourceLocations.length; i < l; i++) { - ClasspathMultiDirectory sourceLocation = sourceLocations[i]; - if (sourceLocation.hasIndependentOutputFolder) - copyExtraResourcesBack(sourceLocation, deleteAll); - else if (!sourceLocation.sourceFolder.equals(sourceLocation.binaryFolder)) - copyPackages(sourceLocation); // output folder is different from source folder - notifier.checkCancel(); } } -} -protected void copyExtraResourcesBack(ClasspathMultiDirectory sourceLocation, final boolean deletedAll) throws CoreException { - // When, if ever, does a builder need to copy resources files (not .java or .class) into the output folder? - // If we wipe the output folder at the beginning of the build then all 'extra' resources must be copied to the output folder. - - notifier.subTask(Util.bind("build.copyingResources")); //$NON-NLS-1$ - final int segmentCount = sourceLocation.sourceFolder.getFullPath().segmentCount(); - final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; - final IContainer outputFolder = sourceLocation.binaryFolder; - final boolean isAlsoProject = sourceLocation.sourceFolder.equals(javaBuilder.currentProject); - sourceLocation.sourceFolder.accept( - new IResourceProxyVisitor() { + protected void copyExtraResourcesBack( + ClasspathMultiDirectory sourceLocation, final boolean deletedAll) + throws CoreException { + // When, if ever, does a builder need to copy resources files (not .java + // or .class) into the output folder? + // If we wipe the output folder at the beginning of the build then all + // 'extra' resources must be copied to the output folder. + + notifier.subTask(Util.bind("build.copyingResources")); //$NON-NLS-1$ + final int segmentCount = sourceLocation.sourceFolder.getFullPath() + .segmentCount(); + final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; + final IContainer outputFolder = sourceLocation.binaryFolder; + final boolean isAlsoProject = sourceLocation.sourceFolder + .equals(javaBuilder.currentProject); + sourceLocation.sourceFolder.accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { IResource resource = null; - switch(proxy.getType()) { - case IResource.FILE : - if (net.sourceforge.phpdt.internal.compiler.util.Util.isJavaFileName(proxy.getName())) return false;// || ProjectPrefUtil.isClassFileName(proxy.getName())) return false; + switch (proxy.getType()) { + case IResource.FILE: + if (net.sourceforge.phpdt.internal.compiler.util.Util + .isJavaFileName(proxy.getName())) + return false;// || + // ProjectPrefUtil.isClassFileName(proxy.getName())) + // return false; - resource = proxy.requestResource(); - if (javaBuilder.filterExtraResource(resource)) return false; - if (exclusionPatterns != null && Util.isExcluded(resource, exclusionPatterns)) - return false; + resource = proxy.requestResource(); + if (javaBuilder.filterExtraResource(resource)) + return false; + if (exclusionPatterns != null + && Util.isExcluded(resource, exclusionPatterns)) + return false; - IPath partialPath = resource.getFullPath().removeFirstSegments(segmentCount); - IResource copiedResource = outputFolder.getFile(partialPath); - if (copiedResource.exists()) { - if (deletedAll) { - createErrorFor(resource, Util.bind("build.duplicateResource")); //$NON-NLS-1$ - return false; - } - copiedResource.delete(IResource.FORCE, null); // last one wins + IPath partialPath = resource.getFullPath() + .removeFirstSegments(segmentCount); + IResource copiedResource = outputFolder + .getFile(partialPath); + if (copiedResource.exists()) { + if (deletedAll) { + createErrorFor(resource, Util + .bind("build.duplicateResource")); //$NON-NLS-1$ + return false; } - resource.copy(copiedResource.getFullPath(), IResource.FORCE, null); - copiedResource.setDerived(true); + copiedResource.delete(IResource.FORCE, null); // last + // one + // wins + } + resource.copy(copiedResource.getFullPath(), + IResource.FORCE, null); + copiedResource.setDerived(true); + return false; + case IResource.FOLDER: + resource = proxy.requestResource(); + if (javaBuilder.filterExtraResource(resource)) + return false; + if (exclusionPatterns != null + && Util.isExcluded(resource, exclusionPatterns)) return false; - case IResource.FOLDER : - resource = proxy.requestResource(); - if (javaBuilder.filterExtraResource(resource)) return false; - if (exclusionPatterns != null && Util.isExcluded(resource, exclusionPatterns)) - return false; - IPath folderPath = resource.getFullPath(); - if (isAlsoProject && isExcludedFromProject(folderPath)) return false; // the sourceFolder == project -// createFolder(folderPath.removeFirstSegments(segmentCount), outputFolder); + IPath folderPath = resource.getFullPath(); + if (isAlsoProject && isExcludedFromProject(folderPath)) + return false; // the sourceFolder == project + // createFolder(folderPath.removeFirstSegments(segmentCount), + // outputFolder); } return true; } - }, - IResource.NONE - ); -} + }, IResource.NONE); + } -protected void copyPackages(ClasspathMultiDirectory sourceLocation) throws CoreException { - final int segmentCount = sourceLocation.sourceFolder.getFullPath().segmentCount(); - final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; - final IContainer outputFolder = sourceLocation.binaryFolder; - final boolean isAlsoProject = sourceLocation.sourceFolder.equals(javaBuilder.currentProject); - sourceLocation.sourceFolder.accept( - new IResourceProxyVisitor() { + protected void copyPackages(ClasspathMultiDirectory sourceLocation) + throws CoreException { + final int segmentCount = sourceLocation.sourceFolder.getFullPath() + .segmentCount(); + final char[][] exclusionPatterns = sourceLocation.exclusionPatterns; + final IContainer outputFolder = sourceLocation.binaryFolder; + final boolean isAlsoProject = sourceLocation.sourceFolder + .equals(javaBuilder.currentProject); + sourceLocation.sourceFolder.accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { - switch(proxy.getType()) { - case IResource.FILE : + switch (proxy.getType()) { + case IResource.FILE: + return false; + case IResource.FOLDER: + IResource resource = proxy.requestResource(); + if (javaBuilder.filterExtraResource(resource)) + return false; + if (exclusionPatterns != null + && Util.isExcluded(resource, exclusionPatterns)) return false; - case IResource.FOLDER : - IResource resource = proxy.requestResource(); - if (javaBuilder.filterExtraResource(resource)) return false; - if (exclusionPatterns != null && Util.isExcluded(resource, exclusionPatterns)) - return false; - IPath folderPath = resource.getFullPath(); - if (isAlsoProject && isExcludedFromProject(folderPath)) return false; // the sourceFolder == project -// createFolder(folderPath.removeFirstSegments(segmentCount), outputFolder); + IPath folderPath = resource.getFullPath(); + if (isAlsoProject && isExcludedFromProject(folderPath)) + return false; // the sourceFolder == project + // createFolder(folderPath.removeFirstSegments(segmentCount), + // outputFolder); } return true; } - }, - IResource.NONE - ); -} + }, IResource.NONE); + } -public String toString() { - return "batch image builder for:\n\tnew state: " + newState; //$NON-NLS-1$ -} + public String toString() { + return "batch image builder for:\n\tnew state: " + newState; //$NON-NLS-1$ + } }