diff options
-rw-r--r-- | src/main/javassist/bytecode/ConstPool.java | 3 | ||||
-rw-r--r-- | src/test/Test.java | 71 |
2 files changed, 29 insertions, 45 deletions
diff --git a/src/main/javassist/bytecode/ConstPool.java b/src/main/javassist/bytecode/ConstPool.java index 78935160..06df1327 100644 --- a/src/main/javassist/bytecode/ConstPool.java +++ b/src/main/javassist/bytecode/ConstPool.java @@ -222,6 +222,9 @@ public final class ConstPool { /** * Returns the <code>tag</code> field of the constant pool table * entry at the given index. + * + * @return either <code>CONST_Class</code>, <code>CONST_Fieldref</code>, + * <code>CONST_Methodref</code>, or ... */ public int getTag(int index) { return getItem(index).getTag(); diff --git a/src/test/Test.java b/src/test/Test.java index 441879db..3eb9a601 100644 --- a/src/test/Test.java +++ b/src/test/Test.java @@ -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); } } |