]> source.dussan.org Git - javassist.git/commitdiff
fixes JIRA JASSIST-248.
authorchibash <chiba@javassist.org>
Fri, 25 Sep 2015 06:08:57 +0000 (15:08 +0900)
committerchibash <chiba@javassist.org>
Fri, 25 Sep 2015 06:08:57 +0000 (15:08 +0900)
Javassist cannot compile super.m() if m is a default method
declared in an interface.

Readme.html
javassist.jar
src/main/javassist/compiler/MemberCodeGen.java
src/test/javassist/JvstTest5.java
src/test/test5/JIRA248.java

index c646c9a6d90755ce91a5c2cd9d3670eb51fccc8a..c30465028005e44e0e5f5ae8a27317cc54b8af07 100644 (file)
@@ -283,7 +283,7 @@ see javassist.Dump.
 
 <p>-version 3.21
 <ul>
-<li>JIRA JASSIST-244
+<li>JIRA JASSIST-244, 248
 </ul>
 </p>
 
index 7cae24bbb055f35129cafda3f1ab9a0a43f41cf1..971c83ed456b26c314179a0a40e2915e8abd01b3 100644 (file)
Binary files a/javassist.jar and b/javassist.jar differ
index 67031992cfa0e3bc280b9e5d8800c7b39a6f1b1b..b1f932ca7b534760a991ccadad184066e8273cba 100644 (file)
@@ -642,7 +642,7 @@ public class MemberCodeGen extends CodeGen {
             bytecode.addInvokestatic(declClass, mname, desc);
         }
         else if (isSpecial)    // if (isSpecial && notStatic(acc))
-            bytecode.addInvokespecial(declClass, mname, desc);
+            bytecode.addInvokespecial(targetClass, mname, desc);
         else {
             if (!Modifier.isPublic(declClass.getModifiers())
                 || declClass.isInterface() != targetClass.isInterface())
index 249f4fadb892ae21a1e01f35eacdf306427d2657..1767436ee11249fcf7fc92775857d55d658f6542 100644 (file)
@@ -128,11 +128,11 @@ public class JvstTest5 extends JvstTestRoot {
 
     public void testJIRA248() throws Exception {
         CtClass cc = sloader.get("test5.JIRA248");
-        String methodBody = "public int run() { return foo() + super.foo(); }";
+        String methodBody = "public int run() { return foo() + super.foo() + super.bar(); }";
         CtMethod ctMethod = CtMethod.make(methodBody, cc);
         cc.addMethod(ctMethod);
         cc.writeFile();
         Object obj = make(cc.getName());
-        assertEquals(71, invoke(obj, "run"));
+        assertEquals(271, invoke(obj, "run"));
     }
 }
index 0a0abcbe34a886caa7e56352ff059ce418fdfeef..5ea8472f2db69ea5b843c393dd13704c86fd1a5a 100644 (file)
@@ -4,9 +4,14 @@ interface JIRA248Intf {
     default int foo() { return 1; }
 }
 
-class JIRA248Sup implements JIRA248Intf {
+class JIRA248Sup2 {
+    public int bar() { return 200; }
+}
+
+class JIRA248Sup extends JIRA248Sup2 implements JIRA248Intf {
 }
 
 public class JIRA248 extends JIRA248Sup {
     public int foo() { return 70; }
+    public int bar() { return 3000; }
 }