소스 검색

fixes JIRA JASSIST-248.

Javassist cannot compile super.m() if m is a default method
declared in an interface.
tags/rel_3_21_0-java9-ea
chibash 8 년 전
부모
커밋
e44bf416bf
5개의 변경된 파일10개의 추가작업 그리고 5개의 파일을 삭제
  1. 1
    1
      Readme.html
  2. BIN
      javassist.jar
  3. 1
    1
      src/main/javassist/compiler/MemberCodeGen.java
  4. 2
    2
      src/test/javassist/JvstTest5.java
  5. 6
    1
      src/test/test5/JIRA248.java

+ 1
- 1
Readme.html 파일 보기

@@ -283,7 +283,7 @@ see javassist.Dump.

<p>-version 3.21
<ul>
<li>JIRA JASSIST-244
<li>JIRA JASSIST-244, 248
</ul>
</p>


BIN
javassist.jar 파일 보기


+ 1
- 1
src/main/javassist/compiler/MemberCodeGen.java 파일 보기

@@ -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())

+ 2
- 2
src/test/javassist/JvstTest5.java 파일 보기

@@ -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"));
}
}

+ 6
- 1
src/test/test5/JIRA248.java 파일 보기

@@ -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; }
}

Loading…
취소
저장