[248015] Synch fixes
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
index d728798..a471575 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
@@ -17,6 +17,7 @@
package org.eclipse.wst.common.internal.emfworkbench.integration;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -39,6 +40,8 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.jobs.ILock;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.WrappedException;
import org.eclipse.emf.ecore.resource.Resource;
@@ -133,6 +136,37 @@
*/
public ResourceSetWorkbenchEditSynchronizer(ResourceSet aResourceSet, IProject aProject) {
super(aResourceSet, aProject);
+ aResourceSet.eAdapters().add(new AdapterImpl() {
+
+ public void notifyChanged(Notification notification) {
+ Collection removedResources = null;
+
+ switch (notification.getEventType()) {
+ case Notification.REMOVE:
+ Object newObj = notification.getOldValue();
+ if (!(newObj instanceof Resource)){
+ break;
+ }
+ removedResources = new ArrayList();
+ removedResources.add((Resource)newObj);
+ break;
+ case Notification.REMOVE_MANY:
+ removedResources = (Collection) notification.getOldValue();
+ break;
+ default:
+ break;
+ }
+
+ if (removedResources != null && !removedResources.isEmpty()) {
+ for (Iterator iter = recentlySavedFiles.iterator(); iter.hasNext();) {
+ SavedFileKey key = (SavedFileKey) iter.next();
+ if (key.res != null && removedResources.contains(key.res)) {
+ iter.remove();
+ }
+ }
+ }
+ }
+ });
}
/*
@@ -324,7 +358,7 @@
for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
Resource resource = (Resource) iterator.next();
- if ((resource != null) || (recentlySavedFilesContains(resource))) {
+ if ((resource != null) && (recentlySavedFilesContains(resource))) {
/*
* The IFile was just added to the workspace but we have a
* resource in memory. Need to decide if it should be unloaded.
@@ -366,7 +400,7 @@
private synchronized boolean recentlySavedFilesContains(Resource resource) {
for (Iterator iterator = recentlySavedFiles.iterator(); iterator.hasNext();) {
SavedFileKey key = (SavedFileKey) iterator.next();
- if (key.res.equals(resource))
+ if (key.res != null && key.res.equals(resource))
return true;
}
return false;
@@ -376,7 +410,7 @@
List resources = getResources(aFile);
for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
Resource resource = (Resource) iterator.next();
- if ((resource != null) || (recentlySavedFilesContains(resource))) {
+ if ((resource != null) && (recentlySavedFilesContains(resource))) {
if (resource.isModified()) {
if (WorkbenchResourceHelper.isReferencedResource(resource)) {
ReferencedResource refRes = (ReferencedResource) resource;
@@ -427,18 +461,21 @@
}
protected List getResources(IFile aFile) {
-
+
List resources = new ArrayList();
List allResources = resourceSet.getResources();
for (Iterator iterator = allResources.iterator(); iterator.hasNext();) {
Resource res = (Resource) iterator.next();
URI resURI = res.getURI();
- IPath resURIPath;
- if (WorkbenchResourceHelper.isPlatformResourceURI(resURI))
- resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(2);
- else
- resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(1);
- String resURIString = resURIPath.toString();
+ String resURIString = "";
+ if (resURI.path() != null) {
+ IPath resURIPath;
+ if (WorkbenchResourceHelper.isPlatformResourceURI(resURI))
+ resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(2);
+ else
+ resURIPath = new Path(URI.decode(resURI.path())).removeFirstSegments(1);
+ resURIString = resURIPath.toString();
+ }
if (!resURIString.equals("") && aFile.getFullPath().toString().indexOf(resURIString) != -1)
resources.add(res);
}