Browse Source

fixes a bug JIRA JASSIST-262

tags/rel_3_21_0-java9-ea
chibash 8 years ago
parent
commit
89c91facc0

+ 1
- 1
Readme.html View File

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


+ 2
- 1
src/main/javassist/bytecode/stackmap/TypeData.java View File

@@ -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 {

+ 45
- 6
src/test/Test.java View File

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

+ 25
- 0
src/test/javassist/JvstTest5.java View File

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

Loading…
Cancel
Save