Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2009 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and implementation /
 
 package org.eclipse.jdt.internal.core.builder;
 
 import  org.eclipse.core.resources.*;
 import  org.eclipse.core.runtime.*;
 
 
 import java.util.*;
 
 public class BatchImageBuilder extends AbstractImageBuilder {
 
 	IncrementalImageBuilder incrementalBuilder// if annotations or secondary types have to be processed after the compile loop
 	ArrayList secondaryTypes// qualified names for all secondary types found during batch compile
 	StringSet typeLocatorsWithUndefinedTypes// type locators for all source files with errors that may be caused by 'not found' secondary types
 
 protected BatchImageBuilder(JavaBuilder javaBuilderboolean buildStarting) {
 	super(javaBuilderbuildStartingnull);
 	this. = null;
 	this. = null;
 }
 
 public void build() {
 		..println("FULL build"); //$NON-NLS-1$
 
 	try {
 
 		ArrayList sourceFiles = new ArrayList(33);
 		addAllSourceFiles(sourceFiles);
 
 		if (sourceFiles.size() > 0) {
 			SourceFile[] allSourceFiles = new SourceFile[sourceFiles.size()];
 			sourceFiles.toArray(allSourceFiles);
 
 			this..setProgressPerCompilationUnit(0.75f / allSourceFiles.length);
 			this..addAll(allSourceFiles);
 			compile(allSourceFiles);
 
 			if (this. != null)
 				if (this. != null && !this..isEmpty())
 			if (this. != null)
 		}
 
 	} catch (CoreException e) {
 		throw internalException(e);
 	} finally {
 		cleanUp();
 	}
 }
 
 protected void acceptSecondaryType(ClassFile classFile) {
 	if (this. != null)
 		this..add(classFile.fileName());
 }
 
 protected void cleanOutputFolders(boolean copyBackthrows CoreException {
 	boolean deleteAll = ..equals(
 	if (deleteAll) {
 		if (this.. != null)
 			for (int i = 0, l = this...lengthi < li++)
 
 		ArrayList visited = new ArrayList(this..length);
 		for (int i = 0, l = this..lengthi < li++) {
 			ClasspathMultiDirectory sourceLocation = this.[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 < mj++) {
						IResource member = members[j];
						if (!member.isDerived()) {
							member.accept(
								new IResourceVisitor() {
									public boolean visit(IResource resourcethrows CoreException {
										resource.setDerived(truenull);
										return resource.getType() != IResource.FILE;
									}
								}
							);
						}
						member.delete(IResource.FORCE, null);
					}
				}
				if (copyBack)
					copyExtraResourcesBack(sourceLocationtrue);
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
				final char[][] inclusionPatterns =
					isOutputFolder
sourceLocation.inclusionPatterns
null// ignore inclusionPatterns if output folder == another source folder... not this one
				sourceLocation.binaryFolder.accept(
					new IResourceProxyVisitor() {
						public boolean visit(IResourceProxy proxythrows CoreException {
							if (proxy.getType() == IResource.FILE) {
								if (org.eclipse.jdt.internal.compiler.util.Util.isClassFileName(proxy.getName())) {
									IResource resource = proxy.requestResource();
									if (exclusionPatterns != null || inclusionPatterns != null)
										if (Util.isExcluded(resource.getFullPath(), inclusionPatternsexclusionPatternsfalse))
											return false;
									if (!resource.isDerived())
										resource.setDerived(truenull);
									resource.delete(IResource.FORCE, null);
								}
								return false;
							}
							if (exclusionPatterns != null && inclusionPatterns == null// must walk children if inclusionPatterns != null
								if (Util.isExcluded(proxy.requestFullPath(), nullexclusionPatternstrue))
									return false;
							return true;
						}
					},
					IResource.NONE
				);
			}
		}
else if (copyBack) {
		for (int i = 0, l = this..lengthi < li++) {
			ClasspathMultiDirectory sourceLocation = this.[i];
			if (sourceLocation.hasIndependentOutputFolder)
				copyExtraResourcesBack(sourceLocationfalse);
		}
	}
protected void cleanUp() {
	this. = null;
	this. = null;
	super.cleanUp();
protected void compile(SourceFile[] unitsSourceFile[] additionalUnitsboolean compilingFirstGroup) {
	if (additionalUnits != null && this. == null)
		this. = new ArrayList(7);
	super.compile(unitsadditionalUnitscompilingFirstGroup);
protected void copyExtraResourcesBack(ClasspathMultiDirectory sourceLocationfinal boolean deletedAllthrows 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.
	final int segmentCount = sourceLocation.sourceFolder.getFullPath().segmentCount();
	final char[][] exclusionPatterns = sourceLocation.exclusionPatterns;
	final char[][] inclusionPatterns = sourceLocation.inclusionPatterns;
	final IContainer outputFolder = sourceLocation.binaryFolder;
	final boolean isAlsoProject = sourceLocation.sourceFolder.equals(this..);
	sourceLocation.sourceFolder.accept(
		new IResourceProxyVisitor() {
			public boolean visit(IResourceProxy proxythrows CoreException {
				IResource resource = null;
				switch(proxy.getType()) {
					case IResource.FILE :
						if (org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(proxy.getName()) ||
							org.eclipse.jdt.internal.compiler.util.Util.isClassFileName(proxy.getName())) return false;
						resource = proxy.requestResource();
						if (BatchImageBuilder.this..filterExtraResource(resource)) return false;
						if (exclusionPatterns != null || inclusionPatterns != null)
							if (Util.isExcluded(resource.getFullPath(), inclusionPatternsexclusionPatternsfalse))
								return false;
						IPath partialPath = resource.getFullPath().removeFirstSegments(segmentCount);
						IResource copiedResource = outputFolder.getFile(partialPath);
						if (copiedResource.exists()) {
							if (deletedAll) {
								IResource originalResource = findOriginalResource(partialPath);
								String id = originalResource.getFullPath().removeFirstSegments(1).toString();
									resource,
									null,
								return false;
							}
							copiedResource.delete(IResource.FORCE, null); // last one wins
						}
						createFolder(partialPath.removeLastSegments(1), outputFolder); // ensure package folder exists
						copyResource(resourcecopiedResource);
						return false;
					case IResource.FOLDER :
						resource = proxy.requestResource();
						if (BatchImageBuilder.this..filterExtraResource(resource)) return false;
						if (isAlsoProject && isExcludedFromProject(resource.getFullPath())) return false// the sourceFolder == project
						if (exclusionPatterns != null && inclusionPatterns == null// must walk children if inclusionPatterns != null
							if (Util.isExcluded(resource.getFullPath(), nullexclusionPatternstrue))
								return false;
				}
				return true;
			}
		},
		IResource.NONE
	);
protected IResource findOriginalResource(IPath partialPath) {
	for (int i = 0, l = this..lengthi < li++) {
		ClasspathMultiDirectory sourceLocation = this.[i];
		if (sourceLocation.hasIndependentOutputFolder) {
			IResource originalResource = sourceLocation.sourceFolder.getFile(partialPath);
			if (originalResource.exists()) return originalResource;
		}
	}
	return null;
private void printStats() {
	if (this. == nullreturn;
	CompilerStats compilerStats = this..;
	long time = compilerStats.elapsedTime();
	long lineCount = compilerStats.lineCount;
	double speed = ((int) (lineCount * 10000.0 / time)) / 10.0;
	..println(">FULL BUILD STATS for: "+this...getElementName()); //$NON-NLS-1$
	..println(">   compiled " + lineCount + " lines in " + time + "ms:" + speed + "lines/s"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
	..print(">   parse: " + compilerStats.parseTime + " ms (" + ((int) (compilerStats.parseTime * 1000.0 / time)) / 10.0 + "%)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	..print(", resolve: " + compilerStats.resolveTime + " ms (" + ((int) (compilerStats.resolveTime * 1000.0 / time)) / 10.0 + "%)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	..print(", analyze: " + compilerStats.analyzeTime + " ms (" + ((int) (compilerStats.analyzeTime * 1000.0 / time)) / 10.0 + "%)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	..println(", generate: " + compilerStats.generateTime + " ms (" + ((int) (compilerStats.generateTime * 1000.0 / time)) / 10.0 + "%)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	// to compile the compilation participant results, we need to incrementally recompile all affected types
	// whenever the generated types are initially added or structurally changed
	if (this. == null)
	// to compile types that could not find 'missing' secondary types because of multiple
	// compile groups, we need to incrementally recompile all affected types as if the missing
	// secondary types have just been added, see bug 146324
	if (this. == null)
	int count = this..size();
	StringSet qualifiedNames = new StringSet(count * 2);
	StringSet simpleNames = new StringSet(count);
	StringSet rootNames = new StringSet(3);
	while (--count >=0) {
		char[] secondaryTypeName = (char[]) this..get(count);
		IPath path = new Path(nullnew String(secondaryTypeName));
		this..addDependentsOf(pathfalsequalifiedNamessimpleNamesrootNames);
	}
		qualifiedNames,
		simpleNames,
		rootNames,
protected void storeProblemsFor(SourceFile sourceFileCategorizedProblem[] problemsthrows CoreException {
	if (sourceFile == null || problems == null || problems.length == 0) return;
	for (int i = problems.length; --i >= 0;) {
		CategorizedProblem problem = problems[i];
		if (problem != null && problem.getID() == .) {
			if (this. == null)
			break;
		}
	}
	super.storeProblemsFor(sourceFileproblems);
public String toString() {
	return "batch image builder for:\n\tnew state: " + this.//$NON-NLS-1$
New to GrepCode? Check out our FAQ X