You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/03/19 15:21:44 UTC
svn commit: r519953 - in /harmony/enhanced/classlib/trunk/modules/swing/src:
main/java/common/javax/swing/UIDefaults.java
test/api/java/common/javax/swing/UIDefaultsTest.java
Author: apetrenko
Date: Mon Mar 19 07:21:43 2007
New Revision: 519953
URL: http://svn.apache.org/viewvc?view=rev&rev=519953
Log:
Patch for HARMONY-3420 "[classlib][swing] UIDefaults.ProxyLazyValue.createValue() uses wrong classloader"
Modified:
harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/UIDefaults.java
harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java/common/javax/swing/UIDefaultsTest.java
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/UIDefaults.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/UIDefaults.java?view=diff&rev=519953&r1=519952&r2=519953
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/UIDefaults.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/UIDefaults.java Mon Mar 19 07:21:43 2007
@@ -105,7 +105,8 @@
public Object run() {
value = null;
try {
- Class classObj = Class.forName(className);
+ Class classObj = Class.forName(className, true,
+ Thread.currentThread().getContextClassLoader());
if (params == null) {
value = (methodName == null)
? classObj.newInstance()
Modified: harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java/common/javax/swing/UIDefaultsTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java/common/javax/swing/UIDefaultsTest.java?view=diff&rev=519953&r1=519952&r2=519953
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java/common/javax/swing/UIDefaultsTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java/common/javax/swing/UIDefaultsTest.java Mon Mar 19 07:21:43 2007
@@ -177,6 +177,84 @@
assertNull(uiDefaults.get("4"));
}
+ public void testProxyLazyValueWithThreadClassLoader() throws Exception {
+ // Regression test for HARMONY-3420
+
+ class ArrayClassLoader extends ClassLoader {
+ byte[] bytesMyLabelUI= new byte[] {
+ /*
+ * public class MyLabelUI extends LabelUI {
+ * public static ComponentUI createUI(JComponent c) {
+ * return new MyLabelUI();
+ * }
+ * }
+ */
+ -54, -2, -70, -66, 0, 0, 0, 49, 0, 16, 10, 0, 4, 0, 13, 7,
+ 0, 14, 10, 0, 2, 0, 13, 7, 0, 15, 1, 0, 6, 60, 105, 110,
+ 105, 116, 62, 1, 0, 3, 40, 41, 86, 1, 0, 4, 67, 111, 100,
+ 101, 1, 0, 15, 76, 105, 110, 101, 78, 117, 109, 98, 101,
+ 114, 84, 97, 98, 108, 101, 1, 0, 8, 99, 114, 101, 97, 116,
+ 101, 85, 73, 1, 0, 56, 40, 76, 106, 97, 118, 97, 120, 47,
+ 115, 119, 105, 110, 103, 47, 74, 67, 111, 109, 112, 111,
+ 110, 101, 110, 116, 59, 41, 76, 106, 97, 118, 97, 120, 47,
+ 115, 119, 105, 110, 103, 47, 112, 108, 97, 102, 47, 67,
+ 111, 109, 112, 111, 110, 101, 110, 116, 85, 73, 59, 1, 0,
+ 10, 83, 111, 117, 114, 99, 101, 70, 105, 108, 101, 1, 0,
+ 14, 77, 121, 76, 97, 98, 101, 108, 85, 73, 46, 106, 97,
+ 118, 97, 12, 0, 5, 0, 6, 1, 0, 9, 77, 121, 76, 97, 98, 101,
+ 108, 85, 73, 1, 0, 24, 106, 97, 118, 97, 120, 47, 115, 119,
+ 105, 110, 103, 47, 112, 108, 97, 102, 47, 76, 97, 98, 101,
+ 108, 85, 73, 0, 33, 0, 2, 0, 4, 0, 0, 0, 0, 0, 2, 0, 1, 0,
+ 5, 0, 6, 0, 1, 0, 7, 0, 0, 0, 29, 0, 1, 0, 1, 0, 0, 0, 5,
+ 42, -73, 0, 1, -79, 0, 0, 0, 1, 0, 8, 0, 0, 0, 6, 0, 1, 0,
+ 0, 0, 5, 0, 9, 0, 9, 0, 10, 0, 1, 0, 7, 0, 0, 0, 32, 0, 2,
+ 0, 1, 0, 0, 0, 8, -69, 0, 2, 89, -73, 0, 3, -80, 0, 0, 0,
+ 1, 0, 8, 0, 0, 0, 6, 0, 1, 0, 0, 0, 7, 0, 1, 0, 11, 0, 0,
+ 0, 2, 0, 12
+ };
+
+ protected Class findClass(String name) throws ClassNotFoundException {
+ if ("MyLabelUI".equals(name)) {
+ return defineClass(name, bytesMyLabelUI, 0, bytesMyLabelUI.length);
+ }
+ throw new ClassNotFoundException(name);
+ }
+ };
+
+ final ClassLoader classLoader = new ArrayClassLoader();
+
+ class ThreadGetUIClass extends Thread {
+ private UIDefaults.ProxyLazyValue plv =
+ new UIDefaults.ProxyLazyValue("MyLabelUI");
+ private Object result;
+
+ public ThreadGetUIClass() {
+ setContextClassLoader(classLoader);
+ }
+
+ public void run() {
+ result = plv.createValue(null);
+ }
+
+ public Object getResult() {
+ while (true) {
+ try {
+ join();
+ return result;
+ } catch (InterruptedException e) {
+ // Ignored.
+ }
+ }
+ }
+ };
+
+ ThreadGetUIClass thread = new ThreadGetUIClass();
+ thread.start();
+ Object result = thread.getResult();
+ assertNotNull(result);
+ assertEquals(result.getClass(), classLoader.loadClass("MyLabelUI"));
+ }
+
public void testGetUI() {
setBasicLF();
final String uiClassName = "javax.swing.plaf.basic.BasicButtonUI";