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