[179592] Refresh classpath container
diff --git a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
index f474d3f..1d173ca 100644
--- a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jst.server.core; singleton:=true
-Bundle-Version: 1.0.105.qualifier
+Bundle-Version: 1.0.106.qualifier
Bundle-Activator: org.eclipse.jst.server.core.internal.JavaServerPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
index 474db92..95f90c9 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
@@ -19,13 +19,18 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IAccessRule;
import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathContainer;
import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jst.server.core.internal.IMemento;
import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+import org.eclipse.jst.server.core.internal.RuntimeClasspathContainer;
import org.eclipse.jst.server.core.internal.Trace;
import org.eclipse.jst.server.core.internal.XMLMemento;
import org.eclipse.wst.server.core.IRuntime;
@@ -61,6 +66,8 @@
private Map runtimePathMap = new HashMap();
+ private Map previousClasspath = new HashMap();
+
public RuntimeClasspathProviderDelegate() {
// default constructor
}
@@ -150,6 +157,25 @@
}
}
+ String key = project.getName() + "/" + runtime.getId();
+ IClasspathEntry[] previousEntries = (IClasspathEntry[]) previousClasspath.get(key);
+
+ if ((previousEntries == null && entries != null) || (previousEntries != null && entries == null)
+ || (previousEntries != null && entries != null && previousEntries.length != entries.length)) {
+ Trace.trace(Trace.FINEST, "Classpath update: " + key + " " + entries);
+
+ IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER);
+ path = path.append(extensionId).append(runtime.getId());
+ try {
+ IJavaProject javaProject = JavaCore.create(project);
+ JavaCore.setClasspathContainer(path, new IJavaProject[] { javaProject },
+ new IClasspathContainer[] { null }, new NullProgressMonitor());
+ } catch (JavaModelException jme) {
+ Trace.trace(Trace.WARNING, "Error updating classpath", jme);
+ }
+ }
+ previousClasspath.put(key, entries);
+
return entries;
}