Bug 284520 Class org.osgi.framework.Bundle.loadClass(String name) throws ClassNotFoundException for Array Types
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ArrayTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ArrayTest.java
new file mode 100644
index 0000000..e4ce55f
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ArrayTest.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2009 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.tests.bundles;
+
+public class ArrayTest {
+
+}
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
index afbb7b2..acedfe4 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
@@ -1346,6 +1346,30 @@
 		}
 	}
 
+	public void testArrayTypeLoad() {
+		doTestArrayTypeLoad("[B"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[C"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[D"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[F"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[I"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[J"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[S"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[Z"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[Lorg.eclipse.osgi.tests.bundles.ArrayTest;"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[[D"); //$NON-NLS-1$
+		doTestArrayTypeLoad("[[Lorg.eclipse.osgi.tests.bundles.ArrayTest;"); //$NON-NLS-1$
+	}
+
+	private void doTestArrayTypeLoad(String name) {
+		try {
+			Class arrayType = OSGiTestsActivator.getContext().getBundle().loadClass(name);
+			assertNotNull("Null class", arrayType); //$NON-NLS-1$
+			assertTrue("Class is not an array: " + arrayType, arrayType.isArray()); //$NON-NLS-1$
+		} catch (ClassNotFoundException e) {
+			fail("Unexpected exception", e); //$NON-NLS-1$
+		}
+	}
+
 	private String readURL(URL url) {
 		StringBuffer sb = new StringBuffer();
 		try {
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
index c1f63f4..ae867f2 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/loader/BundleLoader.java
@@ -318,7 +318,12 @@
 	 * @exception  java.lang.ClassNotFoundException  if the class definition was not found.
 	 */
 	final public Class loadClass(String name) throws ClassNotFoundException {
-		return createClassLoader().loadClass(name);
+		BundleClassLoader bcl = createClassLoader();
+		// The instanceof check here is just to be safe.  The javadoc contract stated in BundleClassLoader
+		// mandate that BundleClassLoaders be an instance of ClassLoader.
+		if (name.length() > 0 && name.charAt(0) == '[' && bcl instanceof ClassLoader)
+			return Class.forName(name, false, (ClassLoader) bcl);
+		return bcl.loadClass(name);
 	}
 
 	/**