From 9cfa81cce09bda5c7fccf4710e8c357977bfdaf2 Mon Sep 17 00:00:00 2001
From: chibash
Date: Thu, 6 Dec 2018 11:01:55 +0900
Subject: fixes another bug (supporting jdk.*) reported in #228
---
Readme.html | 8 +++++++-
javassist.jar | Bin 766400 -> 766448 bytes
src/main/javassist/util/proxy/ProxyFactory.java | 11 ++++++++---
.../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.
Changes
+-version 3.25
+
+
-version 3.24 on November 1, 2018
- - Java 11 supports.
+ - Java 11 supports.
- JIRA JASSIST-267.
- Github PR #218.
diff --git a/javassist.jar b/javassist.jar
index 3099d18a..359b9fe5 100644
Binary files a/javassist.jar and b/javassist.jar differ
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);
+ }
+ });
+ }
}
--
cgit v1.2.3