]> source.dussan.org Git - javassist.git/commitdiff
adds a comment for the fix to JIRA JASSIST-267
authorchibash <chiba@javassist.org>
Sun, 2 Sep 2018 10:25:12 +0000 (19:25 +0900)
committerchibash <chiba@javassist.org>
Sun, 2 Sep 2018 10:25:12 +0000 (19:25 +0900)
Readme.html
javassist.jar
src/main/javassist/util/proxy/ProxyFactory.java
src/test/test/javassist/proxy/ProxySimpleTest.java

index c8649848fafffaca08d3cd8a0df3bdb8a19eb7e1..5ffb7165ca30d7c3c1fea8c0c8e8828c8bd65244 100644 (file)
@@ -281,6 +281,12 @@ see javassist.Dump.
 
 <h2>Changes</h2>
 
+<p>-version 3.24
+<ul>
+    <li>JIRA JASSIST-267.
+</ul>
+</p>
+
 <p>-version 3.23.1 on July 2, 2018
 <ul>
     <li>Github pull issue #171.</li>
index edf45a973959c1986cdd6014993cf96364146a7d..7a5d820067fcbbd003d3f9705be6310e58ece554 100644 (file)
Binary files a/javassist.jar and b/javassist.jar differ
index 646bbcc44295b9eb2f539089cd5abd831dc76a2a..d3fcddbdddc9a1473a464fdf6966ed6c8c237a58 100644 (file)
@@ -1186,8 +1186,8 @@ public class ProxyFactory {
                 // put the method to the cache, retrieve previous definition (if any)
                 Method oldMethod = hash.put(key, m);
 
-                // JIRA JASSIST-244
-                // ignore a bridge method with the same signature that the overridden one has.
+                // JIRA JASSIST-244, 267
+                // ignore a bridge method to a method declared in a non-public class.
                 if (null != oldMethod && isBridge(m)
                     && !Modifier.isPublic(oldMethod.getDeclaringClass().getModifiers())
                     && !Modifier.isAbstract(oldMethod.getModifiers()) && !isDuplicated(i, methods))
index 76178a7efba7e14c02e5fbe92fde6e181843f3bb..632985017633cd648e87ae5fbe907756425c8f78 100644 (file)
@@ -330,5 +330,36 @@ public class ProxySimpleTest extends TestCase {
     public static class Extended267 extends Base267 {          
         public String base(Integer i) { return "extended" + i + i; }
     }
+
+    String value267b;
     
+    public void testJIRA267b() throws Exception {
+        Extended267b extended267 = new Extended267b();
+        ProxyFactory factory = new ProxyFactory();
+        factory.setSuperclass(Extended267b.class);
+        Extended267b e = (Extended267b)factory.create(null, null, new MethodHandler() {
+            @Override
+            public Object invoke(Object self, Method thisMethod,
+                    Method proceed, Object[] args) throws Throwable {
+                value267b += thisMethod.getDeclaringClass().getName();
+                value267b += ";" + thisMethod.getReturnType().getName();
+                return proceed.invoke(self, args);
+            }
+        });
+
+        value267b = "";
+        assertEquals("extended", e.base());
+        System.out.println(value267b);
+        assertEquals(Extended267b.class.getName() + ";" + String.class.getName(), value267b);
+    }
+
+    public static class Base267b {
+        public Object base() { return "base"; }
+    }
+
+    // Extended267b has a bridge method for base():Object,
+    // since Extended267b#base() is covariant.
+    public static class Extended267b extends Base267b {
+        public String base() { return "extended"; }
+    }
 }