diff options
author | chibash <chiba@javassist.org> | 2018-12-06 11:01:55 +0900 |
---|---|---|
committer | chibash <chiba@javassist.org> | 2018-12-06 11:01:55 +0900 |
commit | 9cfa81cce09bda5c7fccf4710e8c357977bfdaf2 (patch) | |
tree | e8c45480fb705a2f185099d3a3809732187718a9 | |
parent | a82e2d71bd3da248dab836f4e150ff08cc0e6915 (diff) | |
download | javassist-9cfa81cce09bda5c7fccf4710e8c357977bfdaf2.tar.gz javassist-9cfa81cce09bda5c7fccf4710e8c357977bfdaf2.zip |
fixes another bug (supporting jdk.*) reported in #228
-rw-r--r-- | Readme.html | 8 | ||||
-rw-r--r-- | javassist.jar | bin | 766400 -> 766448 bytes | |||
-rw-r--r-- | src/main/javassist/util/proxy/ProxyFactory.java | 11 | ||||
-rw-r--r-- | src/test/javassist/proxyfactory/ProxyFactoryTest.java | 12 |
4 files changed, 27 insertions, 4 deletions
diff --git a/Readme.html b/Readme.html index b89b5b95..2321c42f 100644 --- a/Readme.html +++ b/Readme.html @@ -281,9 +281,15 @@ see javassist.Dump. <h2>Changes</h2> +<p>-version 3.25 +<ul> + <li>GitHub Issue #228</li> +<ul> +</p> + <p>-version 3.24 on November 1, 2018 <ul> - <li>Java 11 supports.</li> + <li>Java 11 supports.</li> <li>JIRA JASSIST-267.</li> <li>Github PR #218.</li> </ul> diff --git a/javassist.jar b/javassist.jar Binary files differindex 3099d18a..359b9fe5 100644 --- a/javassist.jar +++ b/javassist.jar diff --git a/src/main/javassist/util/proxy/ProxyFactory.java b/src/main/javassist/util/proxy/ProxyFactory.java index 55f13059..ae368b2a 100644 --- a/src/main/javassist/util/proxy/ProxyFactory.java +++ b/src/main/javassist/util/proxy/ProxyFactory.java @@ -622,7 +622,7 @@ public class ProxyFactory { * {@code java.lang.invoke.MethodHandles.Lookup}. */ private Class<?> getClassInTheSamePackage() { - if (basename.startsWith("javassist.util.proxy.")) // maybe the super class is java.* + if (basename.startsWith(packageForJavaBase)) // maybe the super class is java.* return this.getClass(); else if (superClass != null && superClass != OBJECT_TYPE) return superClass; @@ -921,10 +921,15 @@ public class ProxyFactory { if (Modifier.isFinal(superClass.getModifiers())) throw new RuntimeException(superName + " is final"); - if (basename.startsWith("java.") || onlyPublicMethods) - basename = "javassist.util.proxy." + basename.replace('.', '_'); + // Since java.base module is not opened, its proxy class should be + // in a different (open) module. Otherwise, it could not be created + // by reflection. + if (basename.startsWith("java.") || basename.startsWith("jdk.") || onlyPublicMethods) + basename = packageForJavaBase + basename.replace('.', '_'); } + private static final String packageForJavaBase = "javassist.util.proxy."; + private void allocateClassName() { classname = makeProxyName(basename); } diff --git a/src/test/javassist/proxyfactory/ProxyFactoryTest.java b/src/test/javassist/proxyfactory/ProxyFactoryTest.java index 43a96bb6..c69acc9d 100644 --- a/src/test/javassist/proxyfactory/ProxyFactoryTest.java +++ b/src/test/javassist/proxyfactory/ProxyFactoryTest.java @@ -140,4 +140,16 @@ public class ProxyFactoryTest extends TestCase { } }); } + + public void testJava11jdk() throws Exception { + ProxyFactory factory = new ProxyFactory(); + factory.setSuperclass(jdk.javadoc.doclet.StandardDoclet.class); + jdk.javadoc.doclet.StandardDoclet e = (jdk.javadoc.doclet.StandardDoclet)factory.create(null, null, new MethodHandler() { + @Override + public Object invoke(Object self, Method thisMethod, + Method proceed, Object[] args) throws Throwable { + return proceed.invoke(self, args); + } + }); + } } |