Java Code Examples for org.objectweb.asm.AnnotationVisitor#visitEnum()
The following examples show how to use
org.objectweb.asm.AnnotationVisitor#visitEnum() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AnnotationNode.java From Cafebabe with GNU General Public License v3.0 | 6 votes |
/** * Makes the given visitor visit a given annotation value. * * @param annotationVisitor * an annotation visitor. Maybe {@literal null}. * @param name * the value name. * @param value * the actual value. */ static void accept(final AnnotationVisitor annotationVisitor, final String name, final Object value) { if (annotationVisitor != null) { if (value instanceof String[]) { String[] typeValue = (String[]) value; annotationVisitor.visitEnum(name, typeValue[0], typeValue[1]); } else if (value instanceof AnnotationNode) { AnnotationNode annotationValue = (AnnotationNode) value; annotationValue.accept(annotationVisitor.visitAnnotation(name, annotationValue.desc)); } else if (value instanceof List) { AnnotationVisitor arrayAnnotationVisitor = annotationVisitor.visitArray(name); if (arrayAnnotationVisitor != null) { List<?> arrayValue = (List<?>) value; for (int i = 0, n = arrayValue.size(); i < n; ++i) { accept(arrayAnnotationVisitor, null, arrayValue.get(i)); } arrayAnnotationVisitor.visitEnd(); } } else { annotationVisitor.visit(name, value); } } }
Example 2
Source File: MethodFlow.java From Concurnas with MIT License | 6 votes |
public static void acceptAnnotation(final AnnotationVisitor av, final String name, final Object value) { if (value instanceof String[]) { String[] typeconst = (String[]) value; av.visitEnum(name, typeconst[0], typeconst[1]); } else if (value instanceof AnnotationNode) { AnnotationNode an = (AnnotationNode) value; an.accept(av.visitAnnotation(name, an.desc)); } else if (value instanceof List<?>) { AnnotationVisitor v = av.visitArray(name); List<?> array = (List<?>) value; for (int j = 0; j < array.size(); ++j) { acceptAnnotation(v, null, array.get(j)); } v.visitEnd(); } else { av.visit(name, value); } }
Example 3
Source File: AnnotationNode.java From Concurnas with MIT License | 6 votes |
/** * Makes the given visitor visit a given annotation value. * * @param annotationVisitor an annotation visitor. Maybe {@literal null}. * @param name the value name. * @param value the actual value. */ static void accept( final AnnotationVisitor annotationVisitor, final String name, final Object value) { if (annotationVisitor != null) { if (value instanceof String[]) { String[] typeValue = (String[]) value; annotationVisitor.visitEnum(name, typeValue[0], typeValue[1]); } else if (value instanceof AnnotationNode) { AnnotationNode annotationValue = (AnnotationNode) value; annotationValue.accept(annotationVisitor.visitAnnotation(name, annotationValue.desc)); } else if (value instanceof List) { AnnotationVisitor arrayAnnotationVisitor = annotationVisitor.visitArray(name); if (arrayAnnotationVisitor != null) { List<?> arrayValue = (List<?>) value; for (int i = 0, n = arrayValue.size(); i < n; ++i) { accept(arrayAnnotationVisitor, null, arrayValue.get(i)); } arrayAnnotationVisitor.visitEnd(); } } else { annotationVisitor.visit(name, value); } } }
Example 4
Source File: AnnotationNode.java From JByteMod-Beta with GNU General Public License v2.0 | 6 votes |
/** * Makes the given visitor visit a given annotation value. * * @param av * an annotation visitor. Maybe <tt>null</tt>. * @param name * the value name. * @param value * the actual value. */ static void accept(final AnnotationVisitor av, final String name, final Object value) { if (av != null) { if (value instanceof String[]) { String[] typeconst = (String[]) value; av.visitEnum(name, typeconst[0], typeconst[1]); } else if (value instanceof AnnotationNode) { AnnotationNode an = (AnnotationNode) value; an.accept(av.visitAnnotation(name, an.desc)); } else if (value instanceof List) { AnnotationVisitor v = av.visitArray(name); if (v != null) { List<?> array = (List<?>) value; for (int j = 0; j < array.size(); ++j) { accept(v, null, array.get(j)); } v.visitEnd(); } } else { av.visit(name, value); } } }
Example 5
Source File: AsmClassGenerator.java From groovy with Apache License 2.0 | 6 votes |
private void visitAnnotationArrayElement(final Expression expr, final int arrayElementType, final AnnotationVisitor av) { switch (arrayElementType) { case 1: AnnotationNode atAttr = (AnnotationNode) ((AnnotationConstantExpression) expr).getValue(); AnnotationVisitor av2 = av.visitAnnotation(null, BytecodeHelper.getTypeDescription(atAttr.getClassNode())); visitAnnotationAttributes(atAttr, av2); av2.visitEnd(); break; case 2: av.visit(null, ((ConstantExpression) expr).getValue()); break; case 3: av.visit(null, Type.getType(BytecodeHelper.getTypeDescription(expr.getType()))); break; case 4: PropertyExpression propExpr = (PropertyExpression) expr; av.visitEnum(null, BytecodeHelper.getTypeDescription(propExpr.getObjectExpression().getType()), String.valueOf(((ConstantExpression) propExpr.getProperty()).getValue())); break; } }
Example 6
Source File: AnnotationNode.java From JReFrameworker with MIT License | 6 votes |
/** * Makes the given visitor visit a given annotation value. * * @param annotationVisitor an annotation visitor. Maybe {@literal null}. * @param name the value name. * @param value the actual value. */ static void accept( final AnnotationVisitor annotationVisitor, final String name, final Object value) { if (annotationVisitor != null) { if (value instanceof String[]) { String[] typeValue = (String[]) value; annotationVisitor.visitEnum(name, typeValue[0], typeValue[1]); } else if (value instanceof AnnotationNode) { AnnotationNode annotationValue = (AnnotationNode) value; annotationValue.accept(annotationVisitor.visitAnnotation(name, annotationValue.desc)); } else if (value instanceof List) { AnnotationVisitor arrayAnnotationVisitor = annotationVisitor.visitArray(name); if (arrayAnnotationVisitor != null) { List<?> arrayValue = (List<?>) value; for (int i = 0, n = arrayValue.size(); i < n; ++i) { accept(arrayAnnotationVisitor, null, arrayValue.get(i)); } arrayAnnotationVisitor.visitEnd(); } } else { annotationVisitor.visit(name, value); } } }
Example 7
Source File: AnnotationNode.java From JReFrameworker with MIT License | 6 votes |
/** * Makes the given visitor visit a given annotation value. * * @param annotationVisitor an annotation visitor. Maybe {@literal null}. * @param name the value name. * @param value the actual value. */ static void accept( final AnnotationVisitor annotationVisitor, final String name, final Object value) { if (annotationVisitor != null) { if (value instanceof String[]) { String[] typeValue = (String[]) value; annotationVisitor.visitEnum(name, typeValue[0], typeValue[1]); } else if (value instanceof AnnotationNode) { AnnotationNode annotationValue = (AnnotationNode) value; annotationValue.accept(annotationVisitor.visitAnnotation(name, annotationValue.desc)); } else if (value instanceof List) { AnnotationVisitor arrayAnnotationVisitor = annotationVisitor.visitArray(name); if (arrayAnnotationVisitor != null) { List<?> arrayValue = (List<?>) value; for (int i = 0, n = arrayValue.size(); i < n; ++i) { accept(arrayAnnotationVisitor, null, arrayValue.get(i)); } arrayAnnotationVisitor.visitEnd(); } } else { annotationVisitor.visit(name, value); } } }
Example 8
Source File: DynamicEntityGenerator.java From we-cmdb with Apache License 2.0 | 5 votes |
private static void writeGetterForMapperBy(ClassWriter classWriter, FieldNode field, String className, String getter) { MethodVisitor methodVisitor; AnnotationVisitor annotationVisitor0; methodVisitor = classWriter.visitMethod(ACC_PUBLIC, getter, "()Ljava/util/Set;", "()" + getTypeSiganitureForOneToMany(field.getTypeDesc()), null); if (DynamicEntityType.MultiReference.equals(field.getEntityType())) { annotationVisitor0 = methodVisitor.visitAnnotation("Ljavax/persistence/ManyToMany;", true); annotationVisitor0.visit("mappedBy", field.getMappedBy()); annotationVisitor0.visitEnd(); } else { annotationVisitor0 = methodVisitor.visitAnnotation("Ljavax/persistence/OneToMany;", true); annotationVisitor0.visit("mappedBy", field.getMappedBy()); if (DynamicEntityType.MultiSelection.equals(field.getEntityType())) { annotationVisitor0.visitEnum("fetch", "Ljavax/persistence/FetchType;", "EAGER"); AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("cascade"); annotationVisitor1.visitEnum(null, "Ljavax/persistence/CascadeType;", CascadeType.ALL.toString()); annotationVisitor1.visitEnd(); } annotationVisitor0.visitEnd(); } { annotationVisitor0 = methodVisitor.visitAnnotation("Lcom/fasterxml/jackson/annotation/JsonIgnore;", true); annotationVisitor0.visitEnd(); } // getter method body methodVisitor.visitVarInsn(ALOAD, 0); methodVisitor.visitFieldInsn(GETFIELD, className, field.getName(), "Ljava/util/Set;"); methodVisitor.visitInsn(ARETURN); methodVisitor.visitMaxs(1, 1); methodVisitor.visitEnd(); }
Example 9
Source File: ASMContentHandler.java From JByteMod-Beta with GNU General Public License v2.0 | 5 votes |
@Override public void begin(final String nm, final Attributes attrs) { AnnotationVisitor av = (AnnotationVisitor) peek(); if (av != null) { av.visitEnum(attrs.getValue("name"), attrs.getValue("desc"), attrs.getValue("value")); } }
Example 10
Source File: ClassReaderTest.java From turbine with Apache License 2.0 | 5 votes |
@Test public void annotationDeclaration() { ClassWriter cw = new ClassWriter(0); cw.visit( 52, Opcodes.ACC_PUBLIC + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ABSTRACT + Opcodes.ACC_INTERFACE, "test/Hello", null, "java/lang/Object", new String[] {"java/lang/annotation/Annotation"}); AnnotationVisitor av = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true); av.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;", "RUNTIME"); av.visitEnd(); cw.visitEnd(); byte[] bytes = cw.toByteArray(); ClassFile classFile = com.google.turbine.bytecode.ClassReader.read(null, bytes); assertThat(classFile.access()) .isEqualTo( TurbineFlag.ACC_PUBLIC | TurbineFlag.ACC_ANNOTATION | TurbineFlag.ACC_ABSTRACT | TurbineFlag.ACC_INTERFACE); assertThat(classFile.name()).isEqualTo("test/Hello"); assertThat(classFile.signature()).isNull(); assertThat(classFile.superName()).isEqualTo("java/lang/Object"); assertThat(classFile.interfaces()).containsExactly("java/lang/annotation/Annotation"); assertThat(classFile.annotations()).hasSize(1); ClassFile.AnnotationInfo annotation = Iterables.getOnlyElement(classFile.annotations()); assertThat(annotation.typeName()).isEqualTo("Ljava/lang/annotation/Retention;"); assertThat(annotation.elementValuePairs()).hasSize(1); assertThat(annotation.elementValuePairs()).containsKey("value"); ElementValue value = annotation.elementValuePairs().get("value"); assertThat(value.kind()).isEqualTo(ElementValue.Kind.ENUM); ElementValue.EnumConstValue enumValue = (ElementValue.EnumConstValue) value; assertThat(enumValue.typeName()).isEqualTo("Ljava/lang/annotation/RetentionPolicy;"); assertThat(enumValue.constName()).isEqualTo("RUNTIME"); }
Example 11
Source File: InterfaceDesugaring.java From bazel with Apache License 2.0 | 5 votes |
@Override public void visitEnum(String name, String desc, String value) { super.visitEnum(name, desc, value); for (AnnotationVisitor dest : moreDestinations) { dest.visitEnum(name, desc, value); } }
Example 12
Source File: AbstractAnnotationDescriptionTest.java From byte-buddy with Apache License 2.0 | 5 votes |
@Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(version, access, name, signature, superName, interfaces); AnnotationVisitor annotationVisitor = visitAnnotation(Type.getDescriptor(BrokenAnnotation.class), true); annotationVisitor.visit("incompatibleValue", INTEGER); AnnotationVisitor incompatibleValueArray = annotationVisitor.visitArray("incompatibleValueArray"); incompatibleValueArray.visit(null, INTEGER); incompatibleValueArray.visitEnd(); if (incompatibleDeclaration) { annotationVisitor.visitAnnotation("incompatibleAnnotationDeclaration", Type.getDescriptor(BrokenAnnotationProperty.class)).visitEnd(); AnnotationVisitor incompatibleAnnotationDeclarationArray = annotationVisitor.visitArray("incompatibleAnnotationDeclarationArray"); incompatibleAnnotationDeclarationArray.visitAnnotation(null, Type.getDescriptor(BrokenAnnotationProperty.class)); incompatibleAnnotationDeclarationArray.visitEnd(); annotationVisitor.visitEnum("incompatibleEnumerationDeclaration", Type.getDescriptor(BrokenEnumerationProperty.class), FOO.toUpperCase()); AnnotationVisitor incompatibleEnumerationDeclarationArray = annotationVisitor.visitArray("incompatibleAnnotationDeclarationArray"); incompatibleEnumerationDeclarationArray.visitEnum(null, Type.getDescriptor(BrokenEnumerationProperty.class), FOO.toUpperCase()); incompatibleEnumerationDeclarationArray.visitEnd(); } if (allowMissingValues) { annotationVisitor.visitEnum("unknownEnumerationConstant", Type.getDescriptor(SampleEnumeration.class), FOO); AnnotationVisitor unknownEnumConstantArray = annotationVisitor.visitArray("unknownEnumerationConstantArray"); unknownEnumConstantArray.visitEnum(null, Type.getDescriptor(SampleEnumeration.class), FOO); unknownEnumConstantArray.visitEnd(); annotationVisitor.visit("missingType", Type.getType("Lnet/bytebuddy/inexistant/Foo;")); AnnotationVisitor missingTypeArray = annotationVisitor.visitArray("missingTypeArray"); missingTypeArray.visit(null, Type.getType("Lnet/bytebuddy/inexistant/Foo;")); missingTypeArray.visitEnd(); } annotationVisitor.visitEnd(); }
Example 13
Source File: AbstractASMBackend.java From JAADAS with GNU General Public License v3.0 | 4 votes |
/** * Emits the bytecode for the values of an annotation * @param av The AnnotationVisitor to emit the bytecode to * @param elements A collection of AnnatiotionElem that are the values of the annotation * @param addName True, if the name of the annotation has to be added, false otherwise (should be false only in recursive calls!) */ protected void generateAnnotationElems(AnnotationVisitor av, Collection<AnnotationElem> elements, boolean addName) { if (av != null) { Iterator<AnnotationElem> it = elements.iterator(); while (it.hasNext()) { AnnotationElem elem = it.next(); if (elem instanceof AnnotationEnumElem) { AnnotationEnumElem enumElem = (AnnotationEnumElem) elem; av.visitEnum(enumElem.getName(), enumElem.getTypeName(), enumElem.getConstantName()); } else if (elem instanceof AnnotationArrayElem) { AnnotationArrayElem arrayElem = (AnnotationArrayElem) elem; AnnotationVisitor arrayVisitor = av.visitArray(arrayElem .getName()); generateAnnotationElems(arrayVisitor, arrayElem.getValues(), false); } else if (elem instanceof AnnotationAnnotationElem) { AnnotationAnnotationElem aElem = (AnnotationAnnotationElem) elem; AnnotationVisitor aVisitor = av.visitAnnotation( aElem.getName(), aElem.getValue().getType()); generateAnnotationElems(aVisitor, aElem.getValue() .getElems(), true); } else { Object val = null; if (elem instanceof AnnotationIntElem) { AnnotationIntElem intElem = (AnnotationIntElem) elem; int value = intElem.getValue(); switch (intElem.getKind()) { case 'B': val = (byte) value; break; case 'Z': val = (value == 1); break; case 'I': val = value; break; case 'S': val = (short) value; break; } } else if (elem instanceof AnnotationFloatElem) { AnnotationFloatElem floatElem = (AnnotationFloatElem) elem; val = floatElem.getValue(); } else if (elem instanceof AnnotationLongElem) { AnnotationLongElem longElem = (AnnotationLongElem) elem; val = longElem.getValue(); } else if (elem instanceof AnnotationDoubleElem) { AnnotationDoubleElem doubleElem = (AnnotationDoubleElem) elem; val = doubleElem.getValue(); } else if (elem instanceof AnnotationStringElem) { AnnotationStringElem stringElem = (AnnotationStringElem) elem; val = stringElem.getValue(); } else if (elem instanceof AnnotationClassElem) { AnnotationClassElem classElem = (AnnotationClassElem) elem; val = org.objectweb.asm.Type.getType(classElem .getDesc()); } if(addName){ av.visit(elem.getName(), val); } else{ av.visit(null, val); } } } av.visitEnd(); } }
Example 14
Source File: AnnotationTest.java From JAADAS with GNU General Public License v3.0 | 4 votes |
@Override protected void generate(TraceClassVisitor cw) { MethodVisitor mv; AnnotationVisitor av0; cw.visit(V1_5, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE, "soot/asm/backend/targets/MyTestAnnotation", null, "java/lang/Object", new String[] { "java/lang/annotation/Annotation" }); cw.visitSource("MyTestAnnotation.java", null); { av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true); av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;", "RUNTIME"); av0.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "bVal", "()B", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "dVal", "()D", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "fVal", "()F", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "iAVal", "()[I", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "iVal", "()I", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "lVal", "()J", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "rVal", "()Ljava/lang/Class;", "()Ljava/lang/Class<Lsoot/asm/backend/targets/AnnotatedClass;>;", null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "sAVal", "()[Ljava/lang/String;", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "sVal", "()S", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "strVal", "()Ljava/lang/String;", null, null); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "zVal", "()Z", null, null); mv.visitEnd(); } cw.visitEnd(); }
Example 15
Source File: ASMClassParser.java From TickDynamic with MIT License | 4 votes |
protected void parseAnnotation(AnnotationVisitor anno, String token) throws Exception { if(token == null || token.length() == 0 || token.length() == 2) return; //Nothing to parse //System.out.println("Parse annotation: " + token); //TODO: Handle escaped quotes properly if(token.contains("\\\"")) throw new Exception(getCurrentTokenLine() + ": Parser currently does not handle escaped quotes in annotations! Bug me about this -_-(Unless you are on an old version"); int offset = 1; //Start after the ( int index; while(true) { String valueName; String value; //Get value name index = token.indexOf("=", offset); valueName = token.substring(offset, index); //Get value offset = index+1; char tokenChar = token.charAt(offset); if(tokenChar == '"') //String value { index = token.indexOf('"', offset+1); value = token.substring(offset+1, index); anno.visit(valueName, value); //System.out.println("AnnotationStr: " + valueName + "=" + value); offset = index+1; } else if(tokenChar == '{') //Array value throw new Exception(getCurrentTokenLine() + ": Parser currently does not handle arrays in annotations!"); else if(tokenChar == 'L') //Enum or Object Type { //Start with getting the Type name index = token.indexOf(";", offset); value = token.substring(offset, index+1); offset = index+1; //If we have a '.' after that, it's an Enum if(token.charAt(offset) == '.') { //Find length int index1 = token.indexOf(",", offset); int index2 = token.indexOf(")", offset); if(index1 < index2 && index1 != -1) index = index1; else index = index2; String entryName = token.substring(offset+1, index); anno.visitEnum(valueName, value, entryName); //System.out.println("AnnotationEnum: " + valueName + "=" + value + "." + entryName); offset = index; } else { anno.visit(valueName, org.objectweb.asm.Type.getType(value)); //System.out.println("AnnotationObj: " + valueName + "=" + value); } } else { //Check for Boolean and Number values index = token.indexOf(",", offset); if(index == -1) value = token.substring(offset, token.length()-1); else value = token.substring(offset, index); ValueType parsedValue = parseValue(value); anno.visit(valueName, parsedValue.value); //System.out.println("AnnotationBoolNr: " + valueName + "=" + parsedValue.value); offset = index; } tokenChar = token.charAt(offset); if(tokenChar == ',') //Continue to next value { offset ++; continue; } else if(tokenChar == ')') //Done break; throw new Exception(getCurrentTokenLine() + ": Error while parsing Annotation: Expected ',' or ')', got: " + tokenChar); } //TODO: If we get "// invisible" before end of line, the annotation is invisible? }