Bug 399099
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
index a4d3277..16ff147 100644
--- a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
+++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
@@ -64,6 +64,7 @@
import org.eclipse.wst.common.componentcore.internal.builder.IDependencyGraphUpdateEvent;
import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeRootAdapter;
import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResourceFactory;
+import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
@@ -347,6 +348,9 @@
if (JavaEEProjectUtilities.isEARProject(earProject))
{
IVirtualComponent earComponent = ComponentCore.createComponent(earProject);
+ if (earComponent instanceof VirtualComponent) {
+ ((VirtualComponent)earComponent).flushCache();
+ }
IVirtualReference[] refs = J2EEProjectUtilities.getComponentReferences(earComponent);
IVirtualComponent comp = null;
for (int j = 0; j < refs.length; j++) {
diff --git a/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/EAR5ModelProviderFactory.java b/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/EAR5ModelProviderFactory.java
index c364830..3aa970e 100644
--- a/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/EAR5ModelProviderFactory.java
+++ b/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/EAR5ModelProviderFactory.java
@@ -10,19 +10,46 @@
*******************************************************************************/
package org.eclipse.jst.jee.model.internal;
+import java.util.HashMap;
+import java.util.Map;
+
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.IModelProviderFactory;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
public class EAR5ModelProviderFactory implements IModelProviderFactory {
- public IModelProvider create(IProject project) {
- return new EAR5ModelProvider(project);
+ private static Map<IProject, IModelProvider> providersMap = new HashMap<IProject, IModelProvider>();
+
+ private static IResourceChangeListener listener = new IResourceChangeListener() {
+
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResource project = event.getResource();
+ if (project instanceof IProject) {
+ providersMap.remove(project);
+ }
+
+ }
+ };
+ static {
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE);
+ }
+ public synchronized IModelProvider create(IProject project) {
+ IModelProvider provider = providersMap.get(project);
+ if (provider == null) {
+ provider = new EAR5ModelProvider(project);
+ providersMap.put(project, provider);
+ }
+ return provider;
}
public IModelProvider create(IVirtualComponent component) {
- return new EAR5ModelProvider(component.getProject());
+ return create(component.getProject());
}
}
diff --git a/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/JEE5ModelProvider.java b/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/JEE5ModelProvider.java
index c417e0b..574d0ae 100644
--- a/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/JEE5ModelProvider.java
+++ b/plugins/org.eclipse.jst.jee/jeecreation/org/eclipse/jst/jee/model/internal/JEE5ModelProvider.java
@@ -14,6 +14,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
@@ -126,6 +127,21 @@
}
}
private void addManagedResource(XMLResourceImpl res) {
+ if (res == null || modelResources.contains(res)) {
+ return;
+ }
+ URI uri = res.getURI();
+ for (Iterator iterator = modelResources.iterator(); iterator.hasNext();) {
+ XMLResourceImpl resource = (XMLResourceImpl) iterator.next();
+ if (resource == null) {
+ iterator.remove();
+ continue;
+ }
+ if (resource.getURI() != null && resource.getURI().equals(uri)) {
+ resource.eAdapters().remove(resourceAdapter);
+ iterator.remove();
+ }
+ }
modelResources.add(res);
if (!res.eAdapters().contains(resourceAdapter))
res.eAdapters().add(resourceAdapter);