Fix for bug 24667: [boot] Classloader enhancements
diff --git a/bundles/org.eclipse.core.boot/classloader.properties b/bundles/org.eclipse.core.boot/classloader.properties
new file mode 100644
index 0000000..422c0f4
--- /dev/null
+++ b/bundles/org.eclipse.core.boot/classloader.properties
@@ -0,0 +1,34 @@
+org.apache.ant = org.apache.tools
+org.apache.lucene = org.apache.lucene
+org.apache.xerces = org.apache, org.w3c.dom, org.xml.sax, javax.xml
+org.eclipse.ant.core = org.eclipse.ant
+org.eclipse.compare = org.eclipse.compare
+org.eclipse.core.resources = org.eclipse.core
+org.eclipse.core.runtime = org.eclipse.core
+org.eclipse.debug.core = org.eclipse.debug.core, org.eclipse.debug.internal.core
+org.eclipse.debug.ui = org.eclipse.debug.ui, org.eclipse.debug.internal.ui
+org.eclipse.help = org.eclipse.help
+org.eclipse.help.ui = org.eclipse.help.ui
+org.eclipse.jdt.core = org.eclipse.jdt.core, org.eclipse.jdt.internal
+org.eclipse.jdt.debug = com.sun.jdi, org.eclipse.jdi, org.eclipse.jdt
+org.eclipse.jdt.debug.ui = org.eclipse.jdt.debug.ui, org.eclipse.jdt.internal.debug.ui
+org.eclipse.jdt.junit = org.eclipse.jdt.internal.junit
+org.eclipse.jdt.launching = org.eclipse.jdt.launching, org.eclipse.jdt.internal.launching
+org.eclipse.jdt.ui = org.eclipse.jdt.internal, org.eclipse.jdt.ui
+org.eclipse.pde.build = org.eclipse.pde.internal.build
+org.eclipse.pde.core = org.eclipse.pde.core, org.eclipse.pde.internal.core
+org.eclipse.pde.runtime = org.eclipse.pde.internal.runtime
+org.eclipse.pde.ui = org.eclipse.pde.ui, org.eclipse.pde.internal.ui
+org.eclipse.search = org.eclipse.search
+org.eclipse.swt = org.eclipse.swt
+org.eclipse.team.core = org.eclipse.team.core, org.eclipse.team.internal.core
+org.eclipse.team.cvs.core = org.eclipse.team.internal.ccvs.core
+org.eclipse.team.cvs.ssh = org.eclipse.team.internal.ccvs.ssh
+org.eclipse.team.cvs.ui = org.eclipse.team.internal.ccvs.ui
+org.eclipse.team.ui = org.eclipse.team.ui, org.eclipse.team.internal.ui
+org.eclipse.ui = org.eclipse.ui, org.eclipse.jface
+org.eclipse.ui.externaltools = org.eclipse.ui.externaltools
+org.eclipse.update.core = org.eclipse.update
+org.eclipse.update.ui = org.eclipse.update.internal.ui
+org.eclipse.update.forms = org.eclipse.update.ui.forms
+org.junit = junit
\ No newline at end of file
diff --git a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
index 5277b1c..d8e170d 100644
--- a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
+++ b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/DelegatingURLClassLoader.java
Binary files differ
diff --git a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/InternalBootLoader.java b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/InternalBootLoader.java
index b7a98ff..6f33cb0 100644
--- a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/InternalBootLoader.java
+++ b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/InternalBootLoader.java
Binary files differ
diff --git a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformClassLoader.java b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformClassLoader.java
index 59d9731..0a6777f 100644
--- a/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformClassLoader.java
+++ b/bundles/org.eclipse.core.boot/src/org/eclipse/core/internal/boot/PlatformClassLoader.java
@@ -27,11 +27,19 @@
 	this.base = base;
 	if (singleton == null)
 		singleton = this;
+	prefixs = getArrayFromList((String)prefixTable.get(getPrefixId()));
 	debugConstruction(); // must have initialized loader
 }
 protected String debugId() {
 	return "PLATFORM"; //$NON-NLS-1$
 }
+
+/**
+ * Returns the id to use to lookup class prefixs for this loader
+ */
+protected String getPrefixId() {
+	return InternalBootLoader.RUNTIMENAME;
+}
 /**
  * Finds and loads the class with the specified name from the URL search
  * path. Any URLs referring to JAR files are loaded and opened as needed
@@ -46,7 +54,7 @@
  * @param checkParents whether to check the parent loader
  * @return the resulting class
  */
-protected Class findClassParentsSelf(final String name, boolean resolve, DelegatingURLClassLoader requestor, boolean checkParents) {
+protected Class internalFindClassParentsSelf(final String name, boolean resolve, DelegatingURLClassLoader requestor, boolean checkParents) {
 	Class result = null;
 	synchronized (this) {
 		// check the cache.  If we find something, check to see if its visible.
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/plugins/PluginClassLoader.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/plugins/PluginClassLoader.java
index 3d23be9..d870299 100644
--- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/plugins/PluginClassLoader.java
+++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/plugins/PluginClassLoader.java
@@ -11,14 +11,13 @@
 
 package org.eclipse.core.internal.plugins;
 
-import java.net.URL;
-import java.util.ArrayList;
-
-import org.eclipse.core.boot.BootLoader;
-import org.eclipse.core.internal.boot.DelegatingURLClassLoader;
-import org.eclipse.core.internal.boot.URLContentFilter;
-import org.eclipse.core.internal.runtime.Policy;
 import org.eclipse.core.runtime.*;
+import org.eclipse.core.boot.BootLoader;
+import org.eclipse.core.internal.boot.*;
+import org.eclipse.core.internal.runtime.Policy;
+import java.io.File;
+import java.util.*;
+import java.net.URL;
 
 /**
  * Plugin class loader.
@@ -42,6 +41,8 @@
 	super(codePath, codeFilters, resourcePath, resourceFilters, parent);
 	this.descriptor = descriptor;
 	base = descriptor.getInstallURL();
+	// prime the prefix list.  XXX eventually this will change to read an extension for this plugin
+	prefixs = getArrayFromList((String)prefixTable.get(getPrefixId()));
 	debugConstruction(); // must have initialized loader
 
 	//	Note: initializeImportedLoaders() is called by PluginDescriptor.getPluginClassLoader().
@@ -83,7 +84,7 @@
  * @param checkParents whether the parent of this loader should be consulted
  * @return the resulting class
  */
-protected Class findClassParentsSelf(final String name, boolean resolve, DelegatingURLClassLoader requestor, boolean checkParents) {
+protected Class internalFindClassParentsSelf(final String name, boolean resolve, DelegatingURLClassLoader requestor, boolean checkParents) {
 	Class result = null;
 	synchronized (this) {
 		// check the cache.  If we find something, check to see if its visible.
@@ -161,6 +162,12 @@
 public PluginDescriptor getPluginDescriptor() {
 	return descriptor;
 }
+/**
+ * Returns the id to use to lookup class prefixs for this loader
+ */
+protected String getPrefixId() {
+	return descriptor.getUniqueIdentifier();
+ }
 public void initializeImportedLoaders() {
 	PluginDescriptor desc = getPluginDescriptor();
 	IPluginPrerequisite[] prereqs = desc.getPluginPrerequisites();