@@ -283,7 +283,7 @@ see javassist.Dump. | |||
<p>-version 3.21 | |||
<ul> | |||
<li>JIRA JASSIST-244, 245, 248, 255, 256, 259. | |||
<li>JIRA JASSIST-244, 245, 248, 250, 255, 256, 259, 262. | |||
</ul> | |||
</p> | |||
@@ -319,11 +319,12 @@ public abstract class TypeData { | |||
} | |||
if (isBasicType) { | |||
is2WordType = kind.is2WordType(); | |||
for (int i = 0; i < size; i++) { | |||
TypeVar cv = (TypeVar)scc.get(i); | |||
cv.lowers.clear(); | |||
cv.lowers.add(kind); | |||
is2WordType = kind.is2WordType(); | |||
cv.is2WordType = kind.is2WordType(); | |||
} | |||
} | |||
else { |
@@ -1,11 +1,50 @@ | |||
import javassist.*; | |||
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; | |||
} | |||
} | |||
} | |||
} |
@@ -195,4 +195,29 @@ public class JvstTest5 extends JvstTestRoot { | |||
Object obj = make(cc.getName()); | |||
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 | |||
} | |||
} |