public DexAnnotationVisitor visitAnnotation(String name, Visibility visibility) { if (visitor == null) { return null; } return visitor.visitAnnotation(name, visibility); } }
@Test public void test3() { DexFileWriter w = new DexFileWriter(); DexClassVisitor cv = w.visit(0x1, "La/c;", null, new String[]{"Ljava/lang/Comparable;"}); cv.visitSource("c.java"); cv.visitAnnotation("LAnn;", Visibility.SYSTEM).visitEnd(); DexFieldVisitor fv = cv.visitField(ACC_PUBLIC | ACC_STATIC, new Field("La/c;", "a", "I"), 55); fv.visitAnnotation("LE;", Visibility.RUNTIME).visitEnd(); fv.visitEnd(); DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La/c;", "bb", new String[]{"I"}, "V")); mv.visitAnnotation("Laaa;", Visibility.RUNTIME).visitEnd(); DexAnnotationVisitor dav = mv.visitParameterAnnotation(0).visitAnnotation("Laaa;", Visibility.RUNTIME); dav.visit("abc", true); DexAnnotationVisitor dav2 = dav.visitArray("efg"); dav2.visit("", "123"); dav2.visit("", "456"); dav2.visitEnd(); dav.visitEnd(); DexCodeVisitor code = mv.visitCode(); code.visitRegister(2); code.visitStmt0R(Op.RETURN_VOID); code.visitEnd(); mv.visitEnd(); cv.visitEnd(); w.visitEnd(); w.toByteArray(); }
public DexAnnotationVisitor visitAnnotation(String name, Visibility visibility) { if (visitor == null) { return null; } return visitor.visitAnnotation(name, visibility); } }
private void writeField(DexClassVisitor cw, EncodedField encodedField) { Field field = new Field(encodedField.field.clazz.descriptor.stringData.string, encodedField.field.name.stringData.string, encodedField.field.type.descriptor.stringData.string); Object decodeValue = null; if (null != encodedField.staticValue) { decodeValue = decodeValue(encodedField.staticValue); } DexFieldVisitor fw = cw.visitField(encodedField.accessFlags, field, decodeValue); if (null != encodedField.annotationSetItem) { for (AnnotationItem annotationItem : encodedField.annotationSetItem.annotations) { EncodedAnnotation annotation = annotationItem.annotation; DexAnnotationVisitor aw = fw.visitAnnotation(annotation.type.descriptor.stringData.string, annotationItem.visibility); writeAnnotation(aw, annotation); aw.visitEnd(); } } fw.visitEnd(); }