[jboss-cvs] javassist SVN: r610 - in trunk: src/main/javassist and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Feb 5 04:49:25 EST 2012


Author: chiba
Date: 2012-02-05 04:49:25 -0500 (Sun, 05 Feb 2012)
New Revision: 610

Modified:
   trunk/Readme.html
   trunk/src/main/javassist/ClassPool.java
   trunk/src/main/javassist/Loader.java
   trunk/src/test/javassist/JvstTest4.java
Log:
fixed JASSIST-147

Modified: trunk/Readme.html
===================================================================
--- trunk/Readme.html	2012-02-05 09:44:56 UTC (rev 609)
+++ trunk/Readme.html	2012-02-05 09:49:25 UTC (rev 610)
@@ -283,7 +283,7 @@
 
 <p>-version 3.16
 <ul>
-	<li>JIRA JASSIST-126, 127, 144, 145, 146
+	<li>JIRA JASSIST-126, 127, 144, 145, 146, 147, 149.
 	<li><code>javassist.bytecode.analysis.ControlFlow</code> was added.
 </ul>
 

Modified: trunk/src/main/javassist/ClassPool.java
===================================================================
--- trunk/src/main/javassist/ClassPool.java	2012-02-05 09:44:56 UTC (rev 609)
+++ trunk/src/main/javassist/ClassPool.java	2012-02-05 09:49:25 UTC (rev 610)
@@ -70,6 +70,7 @@
 public class ClassPool {
     // used by toClass().
     private static java.lang.reflect.Method defineClass1, defineClass2;
+    private static java.lang.reflect.Method definePackage;
 
     static {
         try {
@@ -83,6 +84,11 @@
                     defineClass2 = cl.getDeclaredMethod("defineClass",
                            new Class[] { String.class, byte[].class,
                                  int.class, int.class, ProtectionDomain.class });
+
+                    definePackage = cl.getDeclaredMethod("definePackage",
+                            new Class[] { String.class, String.class, String.class,
+                                          String.class, String.class, String.class,
+                                          String.class, java.net.URL.class });
                     return null;
                 }
             });
@@ -1080,7 +1086,7 @@
                     new Integer(b.length), domain};
             }
 
-            return toClass2(method, loader, args);
+            return (Class)toClass2(method, loader, args);
         }
         catch (RuntimeException e) {
             throw e;
@@ -1093,16 +1099,60 @@
         }
     }
 
-    private static synchronized Class toClass2(Method method,
+    private static synchronized Object toClass2(Method method,
             ClassLoader loader, Object[] args)
         throws Exception
     {
         method.setAccessible(true);
         try {
-            return (Class)method.invoke(loader, args);
+            return method.invoke(loader, args);
         }
         finally {
             method.setAccessible(false);
         }
     }
+
+    /**
+     * Defines a new package.  If the package is already defined, this method
+     * performs nothing.
+     *
+     * <p>You do not necessarily need to
+     * call this method.  If this method is called, then  
+     * <code>getPackage()</code> on the <code>Class</code> object returned 
+     * by <code>toClass()</code> will return a non-null object.
+     *
+     * @param loader        the class loader passed to <code>toClass()</code> or
+     *                      the default one obtained by <code>getClassLoader()</code>.
+     * @param name          the package name.
+     * @see #getClassLoader()
+     * @see #toClass(CtClass)
+     * @see CtClass#toClass()
+     * @since 3.16
+     */
+    public void makePackage(ClassLoader loader, String name)
+        throws CannotCompileException
+    {
+        Object[] args = new Object[] {
+                name, null, null, null, null, null, null, null };
+        Throwable t;
+        try {
+            toClass2(definePackage, loader, args);
+            return;
+        }
+        catch (java.lang.reflect.InvocationTargetException e) {
+            t = e.getTargetException();
+            if (t == null)
+                t = e;
+            else if (t instanceof IllegalArgumentException) {
+                // if the package is already defined, an IllegalArgumentException
+                // is thrown.
+                return;
+            }
+        }
+        catch (Exception e) {
+            t = e;
+        }
+
+        throw new CannotCompileException(t);
+    }
 }

Modified: trunk/src/main/javassist/Loader.java
===================================================================
--- trunk/src/main/javassist/Loader.java	2012-02-05 09:44:56 UTC (rev 609)
+++ trunk/src/main/javassist/Loader.java	2012-02-05 09:49:25 UTC (rev 610)
@@ -430,18 +430,4 @@
         else
             return findSystemClass(classname);
     }
-
-    protected Package getPackage(String name) {
-        return super.getPackage(name);
-    }
-    /*
-        // Package p = super.getPackage(name);
-        Package p = null;
-        if (p == null)
-            return definePackage(name, null, null, null,
-                                 null, null, null, null);
-        else
-            return p;
-    }
-    */
 }

Modified: trunk/src/test/javassist/JvstTest4.java
===================================================================
--- trunk/src/test/javassist/JvstTest4.java	2012-02-05 09:44:56 UTC (rev 609)
+++ trunk/src/test/javassist/JvstTest4.java	2012-02-05 09:49:25 UTC (rev 610)
@@ -587,4 +587,15 @@
             }
         });
     }
+
+    public void testPackage() throws Throwable {    // JASSIST-147
+        String packageName = "test4.pack";
+        ClassPool pool = ClassPool.getDefault();
+        pool.makePackage(pool.getClassLoader(), packageName);
+        pool.makePackage(pool.getClassLoader(), packageName);
+        CtClass ctcl = pool.makeClass("test4.pack.Clazz");
+        Class cl = ctcl.toClass();
+        Object obj = cl.newInstance();
+        assertEquals(packageName, obj.getClass().getPackage().getName());
+    }
 }



More information about the jboss-cvs-commits mailing list