updateIndex(element, delta);
contentChanged(element);
} else if (elementType == IJavaElement.JAVA_PROJECT) {
if ((flags & IResourceDelta.OPEN) != 0) {
// project has been opened or closed
IProject res = (IProject)delta.getResource();
element = createElement(res, elementType, rootInfo);
if (element == null) {
// resource might be containing shared roots (see bug 19058)
this.state.updateRoots(res.getFullPath(), delta, this);
return false;
}
if (res.isOpen()) {
if (JavaProject.hasJavaNature(res)) {
addToParentInfo(element);
currentDelta().opened(element);
this.state.updateRoots(element.getPath(), delta, this);
// refresh pkg fragment roots and caches of the project (and its dependents)
this.rootsToRefresh.add(element);
this.projectCachesToReset.add(element);
this.manager.indexManager.indexAll(res);
}
} else {
boolean wasJavaProject = this.state.findJavaProject(res.getName()) != null;
if (wasJavaProject) {
close(element);
removeFromParentInfo(element);
currentDelta().closed(element);
this.manager.indexManager.discardJobs(element.getElementName());
this.manager.indexManager.removeIndexFamily(res.getFullPath());
}
}
return false; // when a project is open/closed don't process children
}
if ((flags & IResourceDelta.DESCRIPTION) != 0) {
IProject res = (IProject)delta.getResource();
boolean wasJavaProject = this.state.findJavaProject(res.getName()) != null;
boolean isJavaProject = JavaProject.hasJavaNature(res);
if (wasJavaProject != isJavaProject) {
// project's nature has been added or removed
element = this.createElement(res, elementType, rootInfo);
if (element == null) return false; // note its resources are still visible as roots to other projects
if (isJavaProject) {
elementAdded(element, delta, rootInfo);
this.manager.indexManager.indexAll(res);
} else {
elementRemoved(element, delta, rootInfo);
this.manager.indexManager.discardJobs(element.getElementName());
this.manager.indexManager.removeIndexFamily(res.getFullPath());
// reset the corresponding project built state, since cannot reuse if added back
if (JavaBuilder.DEBUG)
System.out.println("Clearing last state for project loosing Java nature: " + res); //$NON-NLS-1$
this.manager.setLastBuiltState(res, null /*no state*/);
}