protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
IProject project = this.getProject();
ProjectAdapter projectAdapter = (ProjectAdapter) project.getAdapter(ProjectAdapter.class);
IBuildAdapter buildAdapter = null;
if (projectAdapter != null) {
buildAdapter = projectAdapter.getBuildAdapter();
}
if (kind == IncrementalProjectBuilder.FULL_BUILD) {
this.clean(monitor);
}
// System.out.println("Running builder: " + this);
Map buildCache = new HashMap();
FullBuildDeltaVisitor fullBuildDeltaVisitor = null;
IncrementalBuildDeltaVisitor deltaVisitor = null;
if (kind == IncrementalProjectBuilder.FULL_BUILD) {
fullBuildDeltaVisitor = new FullBuildDeltaVisitor(builderWrappers, monitor, buildCache);
} else {
deltaVisitor = new IncrementalBuildDeltaVisitor(builderWrappers, monitor, buildCache);
}
IResourceDelta projectDelta = getDelta(project);
try {
this.invokeOldBuilder(kind, args, monitor, projectDelta);
} catch (CoreException e) {
throw e;
} catch (Exception e) {
throw new CoreException(new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, e.getMessage(), e));
}
boolean fullBuild = this.notifyBuilderBuildStarted(kind, args, monitor, buildCache);
if (fullBuild && kind != IncrementalProjectBuilder.FULL_BUILD && kind != IncrementalProjectBuilder.CLEAN_BUILD) {
System.out.println("Builder.build: this should trigger a full build at some point");
project.build(IncrementalProjectBuilder.FULL_BUILD, null);
// hmmm
}
try {
if (fullBuildDeltaVisitor != null) {
fullBuildDeltaVisitor.buildStarted(project);
project.accept(fullBuildDeltaVisitor);
}
if (deltaVisitor != null && projectDelta != null) {
deltaVisitor.buildStarted(project);
projectDelta.accept(deltaVisitor);
}
} finally {
this.notifyBuildPreparationDone(kind, args, monitor, buildCache);
if (fullBuildDeltaVisitor != null) {
fullBuildDeltaVisitor.visitingDone();
}
if (deltaVisitor != null) {
deltaVisitor.visitingDone();
}
}
if (buildAdapter != null) {
buildAdapter.markAsDerivated(monitor);
} else if (projectAdapter != null) {
IProductAdapter productAdapter = projectAdapter.getProductAdapter();
if (productAdapter != null) {
productAdapter.markAsDerivated(monitor);
}