[416088] Dep graph deadlock
diff --git a/plugins/org.eclipse.jst.j2ee/refactor/org/eclipse/jst/j2ee/refactor/listeners/J2EEElementChangedListener.java b/plugins/org.eclipse.jst.j2ee/refactor/org/eclipse/jst/j2ee/refactor/listeners/J2EEElementChangedListener.java
index 49796b2..d650697 100644
--- a/plugins/org.eclipse.jst.j2ee/refactor/org/eclipse/jst/j2ee/refactor/listeners/J2EEElementChangedListener.java
+++ b/plugins/org.eclipse.jst.j2ee/refactor/org/eclipse/jst/j2ee/refactor/listeners/J2EEElementChangedListener.java
@@ -89,37 +89,64 @@
}
}
- private void processJavaProject(final IJavaProject jproject, final int flags, final int kind, final IJavaElementDelta delta) {
+ private void processJavaProject(final IJavaProject jproject,
+ final int flags, final int kind, final IJavaElementDelta delta) {
final IProject project = jproject.getProject();
final List pathsToAdd = new ArrayList();
final List pathsToRemove = new ArrayList();
final List changedJavaPaths = new ArrayList();
-
+
// make certain this is a J2EE project
if (ModuleCoreNature.isFlexibleProject(project)) {
- IVirtualComponent c = ComponentCore.createComponent(project);
- if(c == null)
- return;
- try {
- // Did the classpath change?
- if ((flags & IJavaElementDelta.F_CHILDREN) == IJavaElementDelta.F_CHILDREN) {
- final boolean cpChanged = (flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0;
- getJavaSrcMappings(c, delta.getAffectedChildren(), cpChanged, jproject, pathsToAdd, pathsToRemove, changedJavaPaths);
+
+ WorkspaceJob job = new WorkspaceJob(
+ RefactorMessages.J2EEElementChangedListener_J2EE_Component_Mapping_Update_) {
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor)
+ throws CoreException {// Did the classpath change?
+ if ((flags & IJavaElementDelta.F_CHILDREN) == IJavaElementDelta.F_CHILDREN) {
+ final boolean cpChanged = (flags & IJavaElementDelta.F_CLASSPATH_CHANGED) != 0;
+ getJavaSrcMappings(delta.getAffectedChildren(),
+ cpChanged, jproject, pathsToAdd, pathsToRemove,
+ changedJavaPaths);
+ }
+
+ // Did a non-Java folder change name?
+ final IResourceDelta[] deltas = delta.getResourceDeltas();
+ if (deltas != null && deltas.length > 0) {
+ getNonJavaFolderMappings(deltas, project, pathsToAdd,
+ pathsToRemove, changedJavaPaths);
+ }
+
+ for(int i=0;i<pathsToAdd.size(); i++){
+ Object[] toAdd = (Object[]) pathsToAdd.get(i);
+ final IVirtualFolder destFolder = (IVirtualFolder) toAdd[1];
+ final IPath pathToAdd = (IPath) toAdd[0];
+ destFolder.createLink(pathToAdd, 0, monitor);
+ }
+ for(int i=0;i<pathsToRemove.size(); i++){
+ Object[] toRemove = (Object[]) pathsToRemove.get(i);
+ final IVirtualFolder destFolder = (IVirtualFolder) toRemove[1];
+ final IPath pathToRemove = (IPath) toRemove[0];
+ destFolder.removeLink(pathToRemove, 0, monitor);
+ }
+ return Status.OK_STATUS;
+
+
}
- // Did a non-Java folder change name?
- final IResourceDelta[] deltas = delta.getResourceDeltas();
- if (deltas != null && deltas.length > 0) {
- getNonJavaFolderMappings(deltas, c, pathsToAdd, pathsToRemove, changedJavaPaths);
+ @Override
+ public boolean belongsTo(final Object family) {
+ return PROJECT_COMPONENT_UPDATE_JOB_FAMILY.equals(family);
}
-
- } catch (CoreException ce) {
- J2EEPlugin.logError(ce);
- return;
- }
- updateMappingsInJob(pathsToAdd, pathsToRemove);
- }
+ };
+ job.setRule(ResourcesPlugin.getWorkspace().getRoot());
+ job.setSystem(true);
+ job.schedule();
+
+
+ }
}
private void processResourceDeltas(final int flags, final int kind, final IJavaElementDelta delta) {
@@ -140,48 +167,17 @@
}
/*
- * Adds and removes the specified component resource mappings in a WorkspaceJob
- */
- private void updateMappingsInJob(final List pathsToAdd, final List pathsToRemove) {
- // If there are corrections to the virtual path mappings, execute them in a Job
- if (!pathsToAdd.isEmpty() || !pathsToRemove.isEmpty()) {
- WorkspaceJob job = new WorkspaceJob(RefactorMessages.J2EEElementChangedListener_J2EE_Component_Mapping_Update_) {
- @Override
- public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
- for(int i=0;i<pathsToAdd.size(); i++){
- Object[] toAdd = (Object[]) pathsToAdd.get(i);
- final IVirtualFolder destFolder = (IVirtualFolder) toAdd[1];
- final IPath pathToAdd = (IPath) toAdd[0];
- destFolder.createLink(pathToAdd, 0, monitor);
- }
- for(int i=0;i<pathsToRemove.size(); i++){
- Object[] toRemove = (Object[]) pathsToRemove.get(i);
- final IVirtualFolder destFolder = (IVirtualFolder) toRemove[1];
- final IPath pathToRemove = (IPath) toRemove[0];
- destFolder.removeLink(pathToRemove, 0, monitor);
- }
- return Status.OK_STATUS;
- }
- @Override
- public boolean belongsTo(final Object family) {
- return PROJECT_COMPONENT_UPDATE_JOB_FAMILY.equals(family);
- }
- };
- job.setRule(ResourcesPlugin.getWorkspace().getRoot());
- job.setSystem(true);
- job.schedule();
- }
- }
-
- /*
* Computes the virtual component path mapping changes the need to be made due to
* Java src path changes.
*/
- private void getJavaSrcMappings(final IVirtualComponent virtualComp, final IJavaElementDelta[] children, final boolean cpChanged, final IJavaProject jproject, final List pathsToAdd, final List pathsToRemove, final List changedPaths)
+ private void getJavaSrcMappings(final IJavaElementDelta[] children, final boolean cpChanged, final IJavaProject jproject, final List pathsToAdd, final List pathsToRemove, final List changedPaths)
throws CoreException {
+ IVirtualComponent c = ComponentCore.createComponent(jproject.getProject());
+ if(c == null)
+ return;
// get the default destination folder
- final IVirtualFolder defaultDestFolder = getDestinationFolder(virtualComp);
+ final IVirtualFolder defaultDestFolder = getDestinationFolder(c);
for (int i = 0; i < children.length; i++) {
final IJavaElementDelta delta = children[i];
@@ -242,14 +238,17 @@
* Computes the virtual component path mapping changes the need to be made due to changes to
* non-Java folders.
*/
- private void getNonJavaFolderMappings(final IResourceDelta[] deltas, final IVirtualComponent virtualComp, final List pathsToAdd, final List pathsToRemove, final List changedJavaPaths) throws CoreException {
+ private void getNonJavaFolderMappings(final IResourceDelta[] deltas, final IProject project, final List pathsToAdd, final List pathsToRemove, final List changedJavaPaths) throws CoreException {
IVirtualFolder rootFolder = null;
- if (virtualComp != null) {
- rootFolder = virtualComp.getRootFolder();
+ IVirtualComponent c = ComponentCore.createComponent(project);
+ if(c == null)
+ return;
+ if (project != null) {
+ rootFolder = c.getRootFolder();
}
Map sourceToRuntime = null;
- if (virtualComp != null) {
- sourceToRuntime = getResourceMappings(virtualComp.getProject());
+ if (project != null) {
+ sourceToRuntime = getResourceMappings(project);
}
for (int i = 0; i < deltas.length; i++) {
final IResourceDelta delta = deltas[i];
@@ -357,6 +356,37 @@
return root;
}
+ private void updateMappingsInJob(final List pathsToAdd, final List pathsToRemove) {
+ // If there are corrections to the virtual path mappings, execute them in a Job
+ if (!pathsToAdd.isEmpty() || !pathsToRemove.isEmpty()) {
+ WorkspaceJob job = new WorkspaceJob(RefactorMessages.J2EEElementChangedListener_J2EE_Component_Mapping_Update_) {
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+ for(int i=0;i<pathsToAdd.size(); i++){
+ Object[] toAdd = (Object[]) pathsToAdd.get(i);
+ final IVirtualFolder destFolder = (IVirtualFolder) toAdd[1];
+ final IPath pathToAdd = (IPath) toAdd[0];
+ destFolder.createLink(pathToAdd, 0, monitor);
+ }
+ for(int i=0;i<pathsToRemove.size(); i++){
+ Object[] toRemove = (Object[]) pathsToRemove.get(i);
+ final IVirtualFolder destFolder = (IVirtualFolder) toRemove[1];
+ final IPath pathToRemove = (IPath) toRemove[0];
+ destFolder.removeLink(pathToRemove, 0, monitor);
+ }
+ return Status.OK_STATUS;
+ }
+ @Override
+ public boolean belongsTo(final Object family) {
+ return PROJECT_COMPONENT_UPDATE_JOB_FAMILY.equals(family);
+ }
+ };
+ job.setRule(ResourcesPlugin.getWorkspace().getRoot());
+ job.setSystem(true);
+ job.schedule();
+ }
+ }
+
protected static List<IPath> getSourceFolders(IProject project) {
IJavaProject javaProj = JavaCore.create(project);