[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