<p>-version 3.21 | <p>-version 3.21 | ||||
<ul> | <ul> | ||||
<li>JIRA JASSIST-244, 245, 248, 255, 256, 259. | |||||
<li>JIRA JASSIST-244, 245, 248, 250, 255, 256, 259, 262. | |||||
</ul> | </ul> | ||||
</p> | </p> | ||||
} | } | ||||
if (isBasicType) { | if (isBasicType) { | ||||
is2WordType = kind.is2WordType(); | |||||
for (int i = 0; i < size; i++) { | for (int i = 0; i < size; i++) { | ||||
TypeVar cv = (TypeVar)scc.get(i); | TypeVar cv = (TypeVar)scc.get(i); | ||||
cv.lowers.clear(); | cv.lowers.clear(); | ||||
cv.lowers.add(kind); | cv.lowers.add(kind); | ||||
is2WordType = kind.is2WordType(); | |||||
cv.is2WordType = kind.is2WordType(); | |||||
} | } | ||||
} | } | ||||
else { | else { |
import javassist.*; | import javassist.*; | ||||
public class Test { | public class Test { | ||||
public static void main(String[] args) throws Exception { | |||||
ClassPool cp = ClassPool.getDefault(); | |||||
CtClass cc = cp.get("test5.DefaultMethod"); | |||||
CtMethod m = CtNewMethod.make("public int run(){ return test5.DefaultMethodIntf.super.foo(); }", cc); | |||||
cc.addMethod(m); | |||||
cc.writeFile(); | |||||
public static void main(String[] args) { | |||||
CtClass badClass = ClassPool.getDefault().makeClass("badClass"); | |||||
String src = String.join(System.getProperty("line.separator"), | |||||
"public void eval () {", | |||||
" if (true) {", | |||||
" double t=0;", | |||||
" } else {", | |||||
" double t=0;", | |||||
" }", | |||||
" for (int i=0; i < 2; i++) {", | |||||
" int a=0;", | |||||
" int b=0;", | |||||
" int c=0;", | |||||
" int d=0;", | |||||
" if (true) {", | |||||
" int e = 0;", | |||||
" }", | |||||
" }", | |||||
"}"); | |||||
System.out.println(src); | |||||
try { | |||||
badClass.addMethod(CtMethod.make(src, badClass)); | |||||
badClass.debugWriteFile("./bin"); | |||||
Class clazzz = badClass.toClass(); | |||||
Object obj = clazzz.newInstance(); // <-- falls here | |||||
} catch (Exception e) { | |||||
e.printStackTrace(); | |||||
} | |||||
} | |||||
public void eval () { | |||||
if (true) { | |||||
double t=0; | |||||
} else { | |||||
double t=0; | |||||
} | |||||
for (int i=0; i < 2; i++) { | |||||
int a=0; | |||||
int b=0; | |||||
int c=0; | |||||
int d=0; | |||||
if (true) { | |||||
int e = 0; | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
Object obj = make(cc.getName()); | Object obj = make(cc.getName()); | ||||
assertEquals(21713, invoke(obj, "run")); | assertEquals(21713, invoke(obj, "run")); | ||||
} | } | ||||
public void testBadClass() throws Exception { | |||||
CtClass badClass = ClassPool.getDefault().makeClass("badClass"); | |||||
String src = String.join(System.getProperty("line.separator"), | |||||
"public void eval () {", | |||||
" if (true) {", | |||||
" double t=0;", | |||||
" } else {", | |||||
" double t=0;", | |||||
" }", | |||||
" for (int i=0; i < 2; i++) {", | |||||
" int a=0;", | |||||
" int b=0;", | |||||
" int c=0;", | |||||
" int d=0;", | |||||
" if (true) {", | |||||
" int e = 0;", | |||||
" }", | |||||
" }", | |||||
"}"); | |||||
System.out.println(src); | |||||
badClass.addMethod(CtMethod.make(src, badClass)); | |||||
Class clazzz = badClass.toClass(); | |||||
Object obj = clazzz.newInstance(); // <-- falls here | |||||
} | |||||
} | } |