@Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { className = name; super.visit(version, access, name, signature, superName, interfaces); }
public String[] toDescArray(Type[] ts) { String[] ds = new String[ts.length]; for (int i = 0; i < ts.length; i++) { ds[i] = ts[i].getDescriptor(); } return ds; }
private void mapLabelStmt(IrMethod ir) { for (Stmt p : ir.stmts) { if (p.st == ST.LABEL) { LabelStmt labelStmt = (LabelStmt) p; labelStmt.tag = new Label(); } } }
static String toInternal(String n) { // TODO replace return Type.getType(n).getInternalName(); }
void emit_field(int opcode, Type ctype, String name, Type ftype) { mv.visitFieldInsn(opcode, ctype.getInternalName(), name, ftype.getDescriptor()); }
TryCatch(GeneratorAdapter generatorAdapter, Type type) { this.generatorAdapter = generatorAdapter; this.start = generatorAdapter.mark(); this.end = new Label(); this.handler = new Label(); generatorAdapter.visitTryCatchBlock(start, end, handler, type.getInternalName()); }
public static String getNameFromClassFile(File file) throws IOException { String className; try (FileInputStream in = new FileInputStream(file)) { ClassReader classReader = new ClassReader(in); className = classReader.getClassName(); } return className; } }
public byte[] toByteArray() { cw.visitEnd(); return cw.toByteArray(); }
public TestDexClassV(String clz, int config) { super(); cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, clz, null, "java/lang/Object", null); this.config = config; }
public InsertMethodBodyAdapter(ClassWriter cw, String className, Map<String, Boolean> methodInstructionTypeMap) { super(Opcodes.ASM5, cw); this.classWriter = cw; this.className = className; this.methodInstructionTypeMap = methodInstructionTypeMap; //insert the field classWriter.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, Constants.INSERT_FIELD_NAME, Type.getDescriptor(ChangeQuickRedirect.class), null, null); }
public static void accept(DexAnnotationNode ann, MethodVisitor v) { AnnotationVisitor av = v.visitAnnotation(ann.type, ann.visibility != Visibility.BUILD); if (av != null) { accept(ann.items, av); av.visitEnd(); } }
public static void accept(DexAnnotationNode ann, ClassVisitor v) { AnnotationVisitor av = v.visitAnnotation(ann.type, ann.visibility != Visibility.BUILD); if (av != null) { accept(ann.items, av); av.visitEnd(); } }
public static void acceptParameter(DexAnnotationNode ann, int index, MethodVisitor v) { AnnotationVisitor av = v.visitParameterAnnotation(index, ann.type, ann.visibility != Visibility.BUILD); if (av != null) { accept(ann.items, av); av.visitEnd(); } }
public static void accept(DexAnnotationNode ann, FieldVisitor v) { AnnotationVisitor av = v.visitAnnotation(ann.type, ann.visibility != Visibility.BUILD); if (av != null) { accept(ann.items, av); av.visitEnd(); } }
@Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { String fieldDesc = className + ":" + name + ":" + desc; if (!refFieldSet.contains(fieldDesc)) { refFieldSet.add(fieldDesc); fieldCount++; } return super.visitField(access, name, desc, signature, value); } };
public static int sizeOfMethodWriter(MethodVisitor mv) { MethodWriter mw = (MethodWriter) mv; return mw.getSize(); }
protected static String toInternalName(String desc) { // TODO without creating object return Type.getType(desc).getInternalName(); }
TryCatch(GeneratorAdapter generatorAdapter, Type type) { this.generatorAdapter = generatorAdapter; this.start = generatorAdapter.mark(); this.end = new Label(); this.handler = new Label(); generatorAdapter.visitTryCatchBlock(start, end, handler, type.getInternalName()); }
@Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(jVersion, access, name, signature, superName, interfaces); } };
private static String[] getInternalNames(final Class<?>[] types) { if (types == null) { return null; } String[] names = new String[types.length]; for (int i = 0; i < names.length; ++i) { names[i] = Type.getType(types[i]).getInternalName(); } return names; }