import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.Platform;
+//import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
/**
* Keep the global states used during Java element delta processing.
*/
public class DeltaProcessingState implements IResourceChangeListener {
-
+
/*
* Collection of listeners for Java element deltas
*/
public IElementChangedListener[] elementChangedListeners = new IElementChangedListener[5];
+
public int[] elementChangedListenerMasks = new int[5];
+
public int elementChangedListenerCount = 0;
-
+
/*
* Collection of pre Java resource change listeners
*/
public IResourceChangeListener[] preResourceChangeListeners = new IResourceChangeListener[1];
+
public int preResourceChangeListenerCount = 0;
/*
* The delta processor for the current thread.
*/
private ThreadLocal deltaProcessors = new ThreadLocal();
-
+
/* A table from IPath (from a classpath entry) to RootInfo */
public HashMap roots = new HashMap();
-
- /* A table from IPath (from a classpath entry) to ArrayList of RootInfo
- * Used when an IPath corresponds to more than one root */
+
+ /*
+ * A table from IPath (from a classpath entry) to ArrayList of RootInfo Used
+ * when an IPath corresponds to more than one root
+ */
public HashMap otherRoots = new HashMap();
-
- /* A table from IPath (from a classpath entry) to RootInfo
- * from the last time the delta processor was invoked. */
+
+ /*
+ * A table from IPath (from a classpath entry) to RootInfo from the last
+ * time the delta processor was invoked.
+ */
public HashMap oldRoots = new HashMap();
-
- /* A table from IPath (from a classpath entry) to ArrayList of RootInfo
- * from the last time the delta processor was invoked.
- * Used when an IPath corresponds to more than one root */
+
+ /*
+ * A table from IPath (from a classpath entry) to ArrayList of RootInfo from
+ * the last time the delta processor was invoked. Used when an IPath
+ * corresponds to more than one root
+ */
public HashMap oldOtherRoots = new HashMap();
-
- /* A table from IPath (a source attachment path from a classpath entry) to IPath (a root path) */
+
+ /*
+ * A table from IPath (a source attachment path from a classpath entry) to
+ * IPath (a root path)
+ */
public HashMap sourceAttachments = new HashMap();
/* Whether the roots tables should be recomputed */
public boolean rootsAreStale = true;
-
+
/* Threads that are currently running initializeRoots() */
- private Set initializingThreads = Collections.synchronizedSet(new HashSet());
-
+ private Set initializingThreads = Collections
+ .synchronizedSet(new HashSet());
+
public Hashtable externalTimeStamps = new Hashtable();
-
+
public HashMap projectUpdates = new HashMap();
public static class ProjectUpdateInfo {
JavaProject project;
+
IClasspathEntry[] oldResolvedPath;
+
IClasspathEntry[] newResolvedPath;
+
IClasspathEntry[] newRawPath;
-
+
/**
- * Update projects references so that the build order is consistent with the classpath
+ * Update projects references so that the build order is consistent with
+ * the classpath
*/
- public void updateProjectReferencesIfNecessary() throws JavaModelException {
-
- String[] oldRequired = this.project.projectPrerequisites(this.oldResolvedPath);
-
+ public void updateProjectReferencesIfNecessary()
+ throws JavaModelException {
+
+ String[] oldRequired = this.project
+ .projectPrerequisites(this.oldResolvedPath);
+
if (this.newResolvedPath == null) {
- this.newResolvedPath = this.project.getResolvedClasspath(this.newRawPath, null, true, true, null/*no reverse map*/);
+ this.newResolvedPath = this.project
+ .getResolvedClasspath(this.newRawPath, null, true,
+ true, null/* no reverse map */);
}
- String[] newRequired = this.project.projectPrerequisites(this.newResolvedPath);
+ String[] newRequired = this.project
+ .projectPrerequisites(this.newResolvedPath);
try {
IProject projectResource = this.project.getProject();
- IProjectDescription description = projectResource.getDescription();
-
- IProject[] projectReferences = description.getDynamicReferences();
-
+ IProjectDescription description = projectResource
+ .getDescription();
+
+ IProject[] projectReferences = description
+ .getDynamicReferences();
+
HashSet oldReferences = new HashSet(projectReferences.length);
- for (int i = 0; i < projectReferences.length; i++){
+ for (int i = 0; i < projectReferences.length; i++) {
String projectName = projectReferences[i].getName();
oldReferences.add(projectName);
}
- HashSet newReferences = (HashSet)oldReferences.clone();
-
- for (int i = 0; i < oldRequired.length; i++){
+ HashSet newReferences = (HashSet) oldReferences.clone();
+
+ for (int i = 0; i < oldRequired.length; i++) {
String projectName = oldRequired[i];
newReferences.remove(projectName);
}
- for (int i = 0; i < newRequired.length; i++){
+ for (int i = 0; i < newRequired.length; i++) {
String projectName = newRequired[i];
newReferences.add(projectName);
}
-
+
Iterator iter;
int newSize = newReferences.size();
-
+
checkIdentity: {
- if (oldReferences.size() == newSize){
+ if (oldReferences.size() == newSize) {
iter = newReferences.iterator();
- while (iter.hasNext()){
- if (!oldReferences.contains(iter.next())){
+ while (iter.hasNext()) {
+ if (!oldReferences.contains(iter.next())) {
break checkIdentity;
}
}
String[] requiredProjectNames = new String[newSize];
int index = 0;
iter = newReferences.iterator();
- while (iter.hasNext()){
- requiredProjectNames[index++] = (String)iter.next();
+ while (iter.hasNext()) {
+ requiredProjectNames[index++] = (String) iter.next();
}
- Util.sort(requiredProjectNames); // ensure that if changed, the order is consistent
-
+ Util.sort(requiredProjectNames); // ensure that if changed,
+ // the order is consistent
+
IProject[] requiredProjectArray = new IProject[newSize];
- IWorkspaceRoot wksRoot = projectResource.getWorkspace().getRoot();
- for (int i = 0; i < newSize; i++){
- requiredProjectArray[i] = wksRoot.getProject(requiredProjectNames[i]);
+ IWorkspaceRoot wksRoot = projectResource.getWorkspace()
+ .getRoot();
+ for (int i = 0; i < newSize; i++) {
+ requiredProjectArray[i] = wksRoot
+ .getProject(requiredProjectNames[i]);
}
description.setDynamicReferences(requiredProjectArray);
projectResource.setDescription(description, null);
-
- } catch(CoreException e){
+
+ } catch (CoreException e) {
throw new JavaModelException(e);
}
}
}
-
-
+
/**
- * Workaround for bug 15168 circular errors not reported
- * This is a cache of the projects before any project addition/deletion has started.
+ * Workaround for bug 15168 circular errors not reported This is a cache of
+ * the projects before any project addition/deletion has started.
*/
public IJavaProject[] modelProjectsCache;
-
+
/*
- * Need to clone defensively the listener information, in case some listener is reacting to some notification iteration by adding/changing/removing
+ * Need to clone defensively the listener information, in case some listener
+ * is reacting to some notification iteration by adding/changing/removing
* any of the other (for example, if it deregisters itself).
*/
- public void addElementChangedListener(IElementChangedListener listener, int eventMask) {
- for (int i = 0; i < this.elementChangedListenerCount; i++){
- if (this.elementChangedListeners[i].equals(listener)){
-
- // only clone the masks, since we could be in the middle of notifications and one listener decide to change
+ public void addElementChangedListener(IElementChangedListener listener,
+ int eventMask) {
+ for (int i = 0; i < this.elementChangedListenerCount; i++) {
+ if (this.elementChangedListeners[i].equals(listener)) {
+
+ // only clone the masks, since we could be in the middle of
+ // notifications and one listener decide to change
// any event mask of another listeners (yet not notified).
int cloneLength = this.elementChangedListenerMasks.length;
- System.arraycopy(this.elementChangedListenerMasks, 0, this.elementChangedListenerMasks = new int[cloneLength], 0, cloneLength);
- this.elementChangedListenerMasks[i] = eventMask; // could be different
+ System
+ .arraycopy(
+ this.elementChangedListenerMasks,
+ 0,
+ this.elementChangedListenerMasks = new int[cloneLength],
+ 0, cloneLength);
+ this.elementChangedListenerMasks[i] = eventMask; // could be
+ // different
return;
}
}
- // may need to grow, no need to clone, since iterators will have cached original arrays and max boundary and we only add to the end.
+ // may need to grow, no need to clone, since iterators will have cached
+ // original arrays and max boundary and we only add to the end.
int length;
- if ((length = this.elementChangedListeners.length) == this.elementChangedListenerCount){
- System.arraycopy(this.elementChangedListeners, 0, this.elementChangedListeners = new IElementChangedListener[length*2], 0, length);
- System.arraycopy(this.elementChangedListenerMasks, 0, this.elementChangedListenerMasks = new int[length*2], 0, length);
+ if ((length = this.elementChangedListeners.length) == this.elementChangedListenerCount) {
+ System
+ .arraycopy(
+ this.elementChangedListeners,
+ 0,
+ this.elementChangedListeners = new IElementChangedListener[length * 2],
+ 0, length);
+ System.arraycopy(this.elementChangedListenerMasks, 0,
+ this.elementChangedListenerMasks = new int[length * 2], 0,
+ length);
}
this.elementChangedListeners[this.elementChangedListenerCount] = listener;
this.elementChangedListenerMasks[this.elementChangedListenerCount] = eventMask;
}
public void addPreResourceChangedListener(IResourceChangeListener listener) {
- for (int i = 0; i < this.preResourceChangeListenerCount; i++){
+ for (int i = 0; i < this.preResourceChangeListenerCount; i++) {
if (this.preResourceChangeListeners[i].equals(listener)) {
return;
}
}
- // may need to grow, no need to clone, since iterators will have cached original arrays and max boundary and we only add to the end.
+ // may need to grow, no need to clone, since iterators will have cached
+ // original arrays and max boundary and we only add to the end.
int length;
- if ((length = this.preResourceChangeListeners.length) == this.preResourceChangeListenerCount){
- System.arraycopy(this.preResourceChangeListeners, 0, this.preResourceChangeListeners = new IResourceChangeListener[length*2], 0, length);
+ if ((length = this.preResourceChangeListeners.length) == this.preResourceChangeListenerCount) {
+ System
+ .arraycopy(
+ this.preResourceChangeListeners,
+ 0,
+ this.preResourceChangeListeners = new IResourceChangeListener[length * 2],
+ 0, length);
}
this.preResourceChangeListeners[this.preResourceChangeListenerCount] = listener;
this.preResourceChangeListenerCount++;
}
public DeltaProcessor getDeltaProcessor() {
- DeltaProcessor deltaProcessor = (DeltaProcessor)this.deltaProcessors.get();
- if (deltaProcessor != null) return deltaProcessor;
- deltaProcessor = new DeltaProcessor(this, JavaModelManager.getJavaModelManager());
+ DeltaProcessor deltaProcessor = (DeltaProcessor) this.deltaProcessors
+ .get();
+ if (deltaProcessor != null)
+ return deltaProcessor;
+ deltaProcessor = new DeltaProcessor(this, JavaModelManager
+ .getJavaModelManager());
this.deltaProcessors.set(deltaProcessor);
return deltaProcessor;
}
- public void performClasspathResourceChange(JavaProject project, IClasspathEntry[] oldResolvedPath, IClasspathEntry[] newResolvedPath, IClasspathEntry[] newRawPath, boolean canChangeResources) throws JavaModelException {
- ProjectUpdateInfo info = new ProjectUpdateInfo();
- info.project = project;
- info.oldResolvedPath = oldResolvedPath;
- info.newResolvedPath = newResolvedPath;
- info.newRawPath = newRawPath;
- if (canChangeResources) {
- this.projectUpdates.remove(project); // remove possibly awaiting one
- info.updateProjectReferencesIfNecessary();
- return;
- }
- this.recordProjectUpdate(info);
+ public void performClasspathResourceChange(JavaProject project,
+ IClasspathEntry[] oldResolvedPath,
+ IClasspathEntry[] newResolvedPath, IClasspathEntry[] newRawPath,
+ boolean canChangeResources) throws JavaModelException {
+ ProjectUpdateInfo info = new ProjectUpdateInfo();
+ info.project = project;
+ info.oldResolvedPath = oldResolvedPath;
+ info.newResolvedPath = newResolvedPath;
+ info.newRawPath = newRawPath;
+ if (canChangeResources) {
+ this.projectUpdates.remove(project); // remove possibly awaiting
+ // one
+ info.updateProjectReferencesIfNecessary();
+ return;
+ }
+ this.recordProjectUpdate(info);
}
-
+
public void initializeRoots() {
-
+
// recompute root infos only if necessary
HashMap newRoots = null;
HashMap newOtherRoots = null;
HashMap newSourceAttachments = null;
if (this.rootsAreStale) {
Thread currentThread = Thread.currentThread();
- boolean addedCurrentThread = false;
+ boolean addedCurrentThread = false;
try {
- // if reentering initialization (through a container initializer for example) no need to compute roots again
+ // if reentering initialization (through a container initializer
+ // for example) no need to compute roots again
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=47213
- if (!this.initializingThreads.add(currentThread)) return;
+ if (!this.initializingThreads.add(currentThread))
+ return;
addedCurrentThread = true;
newRoots = new HashMap();
newOtherRoots = new HashMap();
newSourceAttachments = new HashMap();
-
- IJavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
+
+ IJavaModel model = JavaModelManager.getJavaModelManager()
+ .getJavaModel();
IJavaProject[] projects;
try {
projects = model.getJavaProjects();
return;
}
for (int i = 0, length = projects.length; i < length; i++) {
- JavaProject project = (JavaProject) projects[i];
-// IClasspathEntry[] classpath;
-// try {
-// classpath = project.getResolvedClasspath(true/*ignoreUnresolvedEntry*/, false/*don't generateMarkerOnError*/, false/*don't returnResolutionInProgress*/);
-// } catch (JavaModelException e) {
-// // continue with next project
-// continue;
-// }
-// for (int j= 0, classpathLength = classpath.length; j < classpathLength; j++) {
-// IClasspathEntry entry = classpath[j];
-// if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) continue;
-//
-// // root path
-// IPath path = entry.getPath();
-// if (newRoots.get(path) == null) {
-// newRoots.put(path, new DeltaProcessor.RootInfo(project, path, ((ClasspathEntry)entry).fullInclusionPatternChars(), ((ClasspathEntry)entry).fullExclusionPatternChars(), entry.getEntryKind()));
-// } else {
-// ArrayList rootList = (ArrayList)newOtherRoots.get(path);
-// if (rootList == null) {
-// rootList = new ArrayList();
-// newOtherRoots.put(path, rootList);
-// }
-// rootList.add(new DeltaProcessor.RootInfo(project, path, ((ClasspathEntry)entry).fullInclusionPatternChars(), ((ClasspathEntry)entry).fullExclusionPatternChars(), entry.getEntryKind()));
-// }
-//
-// // source attachment path
-// if (entry.getEntryKind() != IClasspathEntry.CPE_LIBRARY) continue;
-// QualifiedName qName = new QualifiedName(JavaCore.PLUGIN_ID, "sourceattachment: " + path.toOSString()); //$NON-NLS-1$;
-// String propertyString = null;
-// try {
-// propertyString = ResourcesPlugin.getWorkspace().getRoot().getPersistentProperty(qName);
-// } catch (CoreException e) {
-// continue;
-// }
-// IPath sourceAttachmentPath;
-// if (propertyString != null) {
-// int index= propertyString.lastIndexOf(PackageFragmentRoot.ATTACHMENT_PROPERTY_DELIMITER);
-// sourceAttachmentPath = (index < 0) ? new Path(propertyString) : new Path(propertyString.substring(0, index));
-// } else {
-// sourceAttachmentPath = entry.getSourceAttachmentPath();
-// }
-// if (sourceAttachmentPath != null) {
-// newSourceAttachments.put(sourceAttachmentPath, path);
-// }
-// }
+ //JavaProject project = (JavaProject) projects[i];
+ // IClasspathEntry[] classpath;
+ // try {
+ // classpath =
+ // project.getResolvedClasspath(true/*ignoreUnresolvedEntry*/,
+ // false/*don't generateMarkerOnError*/, false/*don't
+ // returnResolutionInProgress*/);
+ // } catch (JavaModelException e) {
+ // // continue with next project
+ // continue;
+ // }
+ // for (int j= 0, classpathLength = classpath.length; j <
+ // classpathLength; j++) {
+ // IClasspathEntry entry = classpath[j];
+ // if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT)
+ // continue;
+ //
+ // // root path
+ // IPath path = entry.getPath();
+ // if (newRoots.get(path) == null) {
+ // newRoots.put(path, new DeltaProcessor.RootInfo(project,
+ // path,
+ // ((ClasspathEntry)entry).fullInclusionPatternChars(),
+ // ((ClasspathEntry)entry).fullExclusionPatternChars(),
+ // entry.getEntryKind()));
+ // } else {
+ // ArrayList rootList = (ArrayList)newOtherRoots.get(path);
+ // if (rootList == null) {
+ // rootList = new ArrayList();
+ // newOtherRoots.put(path, rootList);
+ // }
+ // rootList.add(new DeltaProcessor.RootInfo(project, path,
+ // ((ClasspathEntry)entry).fullInclusionPatternChars(),
+ // ((ClasspathEntry)entry).fullExclusionPatternChars(),
+ // entry.getEntryKind()));
+ // }
+ //
+ // // source attachment path
+ // if (entry.getEntryKind() != IClasspathEntry.CPE_LIBRARY)
+ // continue;
+ // QualifiedName qName = new
+ // QualifiedName(JavaCore.PLUGIN_ID, "sourceattachment: " +
+ // path.toOSString()); //$NON-NLS-1$;
+ // String propertyString = null;
+ // try {
+ // propertyString =
+ // ResourcesPlugin.getWorkspace().getRoot().getPersistentProperty(qName);
+ // } catch (CoreException e) {
+ // continue;
+ // }
+ // IPath sourceAttachmentPath;
+ // if (propertyString != null) {
+ // int index=
+ // propertyString.lastIndexOf(PackageFragmentRoot.ATTACHMENT_PROPERTY_DELIMITER);
+ // sourceAttachmentPath = (index < 0) ? new
+ // Path(propertyString) : new
+ // Path(propertyString.substring(0, index));
+ // } else {
+ // sourceAttachmentPath = entry.getSourceAttachmentPath();
+ // }
+ // if (sourceAttachmentPath != null) {
+ // newSourceAttachments.put(sourceAttachmentPath, path);
+ // }
+ // }
}
} finally {
if (addedCurrentThread) {
}
}
}
- synchronized(this) {
+ synchronized (this) {
this.oldRoots = this.roots;
- this.oldOtherRoots = this.otherRoots;
- if (this.rootsAreStale && newRoots != null) { // double check again
+ this.oldOtherRoots = this.otherRoots;
+ if (this.rootsAreStale && newRoots != null) { // double check
+ // again
this.roots = newRoots;
this.otherRoots = newOtherRoots;
this.sourceAttachments = newSourceAttachments;
}
public synchronized void recordProjectUpdate(ProjectUpdateInfo newInfo) {
-
- JavaProject project = newInfo.project;
- ProjectUpdateInfo oldInfo = (ProjectUpdateInfo) this.projectUpdates.get(project);
- if (oldInfo != null) { // refresh new classpath information
- oldInfo.newRawPath = newInfo.newRawPath;
- oldInfo.newResolvedPath = newInfo.newResolvedPath;
- } else {
- this.projectUpdates.put(project, newInfo);
- }
+
+ JavaProject project = newInfo.project;
+ ProjectUpdateInfo oldInfo = (ProjectUpdateInfo) this.projectUpdates
+ .get(project);
+ if (oldInfo != null) { // refresh new classpath information
+ oldInfo.newRawPath = newInfo.newRawPath;
+ oldInfo.newResolvedPath = newInfo.newResolvedPath;
+ } else {
+ this.projectUpdates.put(project, newInfo);
+ }
}
+
public synchronized ProjectUpdateInfo[] removeAllProjectUpdates() {
- int length = this.projectUpdates.size();
- if (length == 0) return null;
- ProjectUpdateInfo[] updates = new ProjectUpdateInfo[length];
- this.projectUpdates.values().toArray(updates);
- this.projectUpdates.clear();
- return updates;
+ int length = this.projectUpdates.size();
+ if (length == 0)
+ return null;
+ ProjectUpdateInfo[] updates = new ProjectUpdateInfo[length];
+ this.projectUpdates.values().toArray(updates);
+ this.projectUpdates.clear();
+ return updates;
}
-
+
public void removeElementChangedListener(IElementChangedListener listener) {
-
- for (int i = 0; i < this.elementChangedListenerCount; i++){
-
- if (this.elementChangedListeners[i].equals(listener)){
-
- // need to clone defensively since we might be in the middle of listener notifications (#fire)
+
+ for (int i = 0; i < this.elementChangedListenerCount; i++) {
+
+ if (this.elementChangedListeners[i].equals(listener)) {
+
+ // need to clone defensively since we might be in the middle of
+ // listener notifications (#fire)
int length = this.elementChangedListeners.length;
IElementChangedListener[] newListeners = new IElementChangedListener[length];
- System.arraycopy(this.elementChangedListeners, 0, newListeners, 0, i);
+ System.arraycopy(this.elementChangedListeners, 0, newListeners,
+ 0, i);
int[] newMasks = new int[length];
- System.arraycopy(this.elementChangedListenerMasks, 0, newMasks, 0, i);
-
+ System.arraycopy(this.elementChangedListenerMasks, 0, newMasks,
+ 0, i);
+
// copy trailing listeners
int trailingLength = this.elementChangedListenerCount - i - 1;
- if (trailingLength > 0){
- System.arraycopy(this.elementChangedListeners, i+1, newListeners, i, trailingLength);
- System.arraycopy(this.elementChangedListenerMasks, i+1, newMasks, i, trailingLength);
+ if (trailingLength > 0) {
+ System.arraycopy(this.elementChangedListeners, i + 1,
+ newListeners, i, trailingLength);
+ System.arraycopy(this.elementChangedListenerMasks, i + 1,
+ newMasks, i, trailingLength);
}
-
- // update manager listener state (#fire need to iterate over original listeners through a local variable to hold onto
+
+ // update manager listener state (#fire need to iterate over
+ // original listeners through a local variable to hold onto
// the original ones)
this.elementChangedListeners = newListeners;
this.elementChangedListenerMasks = newMasks;
}
}
- public void removePreResourceChangedListener(IResourceChangeListener listener) {
-
- for (int i = 0; i < this.preResourceChangeListenerCount; i++){
-
- if (this.preResourceChangeListeners[i].equals(listener)){
-
- // need to clone defensively since we might be in the middle of listener notifications (#fire)
+ public void removePreResourceChangedListener(
+ IResourceChangeListener listener) {
+
+ for (int i = 0; i < this.preResourceChangeListenerCount; i++) {
+
+ if (this.preResourceChangeListeners[i].equals(listener)) {
+
+ // need to clone defensively since we might be in the middle of
+ // listener notifications (#fire)
int length = this.preResourceChangeListeners.length;
IResourceChangeListener[] newListeners = new IResourceChangeListener[length];
- System.arraycopy(this.preResourceChangeListeners, 0, newListeners, 0, i);
-
+ System.arraycopy(this.preResourceChangeListeners, 0,
+ newListeners, 0, i);
+
// copy trailing listeners
- int trailingLength = this.preResourceChangeListenerCount - i - 1;
- if (trailingLength > 0){
- System.arraycopy(this.preResourceChangeListeners, i+1, newListeners, i, trailingLength);
+ int trailingLength = this.preResourceChangeListenerCount - i
+ - 1;
+ if (trailingLength > 0) {
+ System.arraycopy(this.preResourceChangeListeners, i + 1,
+ newListeners, i, trailingLength);
}
-
- // update manager listener state (#fire need to iterate over original listeners through a local variable to hold onto
+
+ // update manager listener state (#fire need to iterate over
+ // original listeners through a local variable to hold onto
// the original ones)
this.preResourceChangeListeners = newListeners;
this.preResourceChangeListenerCount--;
boolean isPostChange = event.getType() == IResourceChangeEvent.POST_CHANGE;
if (isPostChange) {
for (int i = 0; i < this.preResourceChangeListenerCount; i++) {
- // wrap callbacks with Safe runnable for subsequent listeners to be called when some are causing grief
+ // wrap callbacks with Safe runnable for subsequent listeners to
+ // be called when some are causing grief
final IResourceChangeListener listener = this.preResourceChangeListeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
- Util.log(exception, "Exception occurred in listener of pre Java resource change notification"); //$NON-NLS-1$
+ Util
+ .log(exception,
+ "Exception occurred in listener of pre Java resource change notification"); //$NON-NLS-1$
}
+
public void run() throws Exception {
listener.resourceChanged(event);
}
try {
getDeltaProcessor().resourceChanged(event);
} finally {
- // TODO (jerome) see 47631, may want to get rid of following so as to reuse delta processor ?
+ // TODO (jerome) see 47631, may want to get rid of following so as
+ // to reuse delta processor ?
if (isPostChange) {
this.deltaProcessors.set(null);
}
}
}
-
+
/*
- * Update the roots that are affected by the addition or the removal of the given container resource.
+ * Update the roots that are affected by the addition or the removal of the
+ * given container resource.
*/
-// public synchronized void updateRoots(IPath containerPath, IResourceDelta containerDelta, DeltaProcessor deltaProcessor) {
-// Map updatedRoots;
-// Map otherUpdatedRoots;
-// if (containerDelta.getKind() == IResourceDelta.REMOVED) {
-// updatedRoots = this.oldRoots;
-// otherUpdatedRoots = this.oldOtherRoots;
-// } else {
-// updatedRoots = this.roots;
-// otherUpdatedRoots = this.otherRoots;
-// }
-// Iterator iterator = updatedRoots.keySet().iterator();
-// while (iterator.hasNext()) {
-// IPath path = (IPath)iterator.next();
-// if (containerPath.isPrefixOf(path) && !containerPath.equals(path)) {
-// IResourceDelta rootDelta = containerDelta.findMember(path.removeFirstSegments(1));
-// if (rootDelta == null) continue;
-// DeltaProcessor.RootInfo rootInfo = (DeltaProcessor.RootInfo)updatedRoots.get(path);
-//
-// if (!rootInfo.project.getPath().isPrefixOf(path)) { // only consider roots that are not included in the container
-// deltaProcessor.updateCurrentDeltaAndIndex(rootDelta, IJavaElement.PACKAGE_FRAGMENT_ROOT, rootInfo);
-// }
-//
-// ArrayList rootList = (ArrayList)otherUpdatedRoots.get(path);
-// if (rootList != null) {
-// Iterator otherProjects = rootList.iterator();
-// while (otherProjects.hasNext()) {
-// rootInfo = (DeltaProcessor.RootInfo)otherProjects.next();
-// if (!rootInfo.project.getPath().isPrefixOf(path)) { // only consider roots that are not included in the container
-// deltaProcessor.updateCurrentDeltaAndIndex(rootDelta, IJavaElement.PACKAGE_FRAGMENT_ROOT, rootInfo);
-// }
-// }
-// }
-// }
-// }
-// }
-
+ // public synchronized void updateRoots(IPath containerPath, IResourceDelta
+ // containerDelta, DeltaProcessor deltaProcessor) {
+ // Map updatedRoots;
+ // Map otherUpdatedRoots;
+ // if (containerDelta.getKind() == IResourceDelta.REMOVED) {
+ // updatedRoots = this.oldRoots;
+ // otherUpdatedRoots = this.oldOtherRoots;
+ // } else {
+ // updatedRoots = this.roots;
+ // otherUpdatedRoots = this.otherRoots;
+ // }
+ // Iterator iterator = updatedRoots.keySet().iterator();
+ // while (iterator.hasNext()) {
+ // IPath path = (IPath)iterator.next();
+ // if (containerPath.isPrefixOf(path) && !containerPath.equals(path)) {
+ // IResourceDelta rootDelta =
+ // containerDelta.findMember(path.removeFirstSegments(1));
+ // if (rootDelta == null) continue;
+ // DeltaProcessor.RootInfo rootInfo =
+ // (DeltaProcessor.RootInfo)updatedRoots.get(path);
+ //
+ // if (!rootInfo.project.getPath().isPrefixOf(path)) { // only consider
+ // roots that are not included in the container
+ // deltaProcessor.updateCurrentDeltaAndIndex(rootDelta,
+ // IJavaElement.PACKAGE_FRAGMENT_ROOT, rootInfo);
+ // }
+ //
+ // ArrayList rootList = (ArrayList)otherUpdatedRoots.get(path);
+ // if (rootList != null) {
+ // Iterator otherProjects = rootList.iterator();
+ // while (otherProjects.hasNext()) {
+ // rootInfo = (DeltaProcessor.RootInfo)otherProjects.next();
+ // if (!rootInfo.project.getPath().isPrefixOf(path)) { // only consider
+ // roots that are not included in the container
+ // deltaProcessor.updateCurrentDeltaAndIndex(rootDelta,
+ // IJavaElement.PACKAGE_FRAGMENT_ROOT, rootInfo);
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
}