|
|
@@ -1,50 +1,31 @@ |
|
|
|
import javassist.*; |
|
|
|
import javassist.bytecode.*; |
|
|
|
import javassist.bytecode.annotation.*; |
|
|
|
|
|
|
|
public class Test { |
|
|
|
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(); |
|
|
|
} |
|
|
|
} |
|
|
|
@interface Entity {} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
@interface Table {} |
|
|
|
|
|
|
|
public class Test { |
|
|
|
public static void main(String[] args) throws Exception { |
|
|
|
ClassPool classPool = ClassPool.getDefault(); |
|
|
|
ClassFile cf = classPool.makeClass("TestSub").getClassFile(); |
|
|
|
ConstPool constPool = cf.getConstPool(); |
|
|
|
Annotation[] annotations = new Annotation[2]; |
|
|
|
AnnotationsAttribute attrib = |
|
|
|
new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag); |
|
|
|
Annotation annotation = new Annotation(constPool, classPool.get("Entity")); |
|
|
|
annotations[0] = annotation; |
|
|
|
// Add @Table(name="",schema="") to class |
|
|
|
annotation = new Annotation(constPool, classPool.get("Table")); |
|
|
|
annotation.addMemberValue("name", new StringMemberValue("name", constPool)); |
|
|
|
annotation.addMemberValue("schema", new StringMemberValue("schema", constPool)); |
|
|
|
ArrayMemberValue blankMemberValueArray = new ArrayMemberValue(new AnnotationMemberValue(constPool), constPool); |
|
|
|
blankMemberValueArray.setValue(new MemberValue[0]); |
|
|
|
annotation.addMemberValue("uniqueConstraints", blankMemberValueArray); |
|
|
|
annotation.addMemberValue("indexes", blankMemberValueArray); |
|
|
|
annotations[1] = annotation; |
|
|
|
attrib.setAnnotations(annotations); |
|
|
|
cf.addAttribute(attrib); |
|
|
|
} |
|
|
|
} |