### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.launching Index: launching/org/eclipse/jdt/launching/JavaRuntime.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java,v retrieving revision 1.218 diff -u -r1.218 JavaRuntime.java --- launching/org/eclipse/jdt/launching/JavaRuntime.java 27 Jul 2010 18:32:16 -0000 1.218 +++ launching/org/eclipse/jdt/launching/JavaRuntime.java 5 Nov 2010 10:39:54 -0000 @@ -18,9 +18,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; +import java.lang.ref.Reference; +import java.lang.ref.SoftReference; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; @@ -31,18 +34,10 @@ import javax.xml.parsers.DocumentBuilder; -import com.ibm.icu.text.MessageFormat; - -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import org.eclipse.core.variables.IStringVariableManager; -import org.eclipse.core.variables.VariablesPlugin; - +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; @@ -56,22 +51,16 @@ import org.eclipse.core.runtime.Preferences; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.BundleDefaultsScope; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; - +import org.eclipse.core.variables.IStringVariableManager; +import org.eclipse.core.variables.VariablesPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.sourcelookup.ISourceContainer; - import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaModel; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; - import org.eclipse.jdt.internal.launching.CompositeId; import org.eclipse.jdt.internal.launching.DefaultEntryResolver; import org.eclipse.jdt.internal.launching.DefaultProjectClasspathEntry; @@ -90,10 +79,16 @@ import org.eclipse.jdt.internal.launching.VMListener; import org.eclipse.jdt.internal.launching.VariableClasspathEntry; import org.eclipse.jdt.internal.launching.environments.EnvironmentsManager; - import org.eclipse.jdt.launching.environments.ExecutionEnvironmentDescription; import org.eclipse.jdt.launching.environments.IExecutionEnvironment; import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import com.ibm.icu.text.MessageFormat; /** * The central access point for launching support. This class manages @@ -329,6 +324,11 @@ */ private static Set fgContributedVMs = new HashSet(); + /** + * Cache of VM install location to prevent needless I/O. + */ + private static Map/**/ fLibraryLocationCache = Collections.synchronizedMap(new HashMap()); + /** * This class contains only static methods, and is not intended * to be instantiated. @@ -1632,6 +1632,12 @@ * @since 2.0 */ public static LibraryLocation[] getLibraryLocations(IVMInstall vm) { + Reference/**/ ref = (Reference)fLibraryLocationCache.get(vm); + if (ref != null) { + LibraryLocation[] locations = (LibraryLocation[])ref.get(); + if (locations != null) + return locations; + } IPath[] libraryPaths; IPath[] sourcePaths; IPath[] sourceRootPaths; @@ -1683,9 +1689,10 @@ for (int i = 0; i < sourcePaths.length; i++) { locations[i] = new LibraryLocation(libraryPaths[i], sourcePaths[i], sourceRootPaths[i], javadocLocations[i]); } + fLibraryLocationCache.put(vm, new SoftReference(locations)); return locations; } - + /** * Detect the VM that Eclipse is running on. *