public MethodVisitor visitMethod(int arg, String name, String descriptor, String signature, String[] exceptions) { if (Manager.isIgnoreGetSetMethod()) { if (fieldNameList.contains(name)) { return super.visitMethod(arg, name, descriptor, signature, exceptions); } } // 静态区域不注入 if ("<clinit>".equals(name)) { return super.visitMethod(arg, name, descriptor, signature, exceptions); } MethodVisitor mv = super.visitMethod(arg, name, descriptor, signature, exceptions); MethodAdapter ma = new ProfMethodAdapter(mv, mFileName, mClassName, name); return ma; }
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(version, access, name, signature, superName, interfaces); }
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { String up = name.substring(0, 1).toUpperCase() + name.substring(1, name.length()); String getFieldName = "get" + up; String setFieldName = "set" + up; String isFieldName = "is" + up; fieldNameList.add(getFieldName); fieldNameList.add(setFieldName); fieldNameList.add(isFieldName); return super.visitField(access, name, desc, signature, value); }
@Override public void visitEnd() { if (!skipEnchancing) { super.visitField( (isInterface ? Opcodes.ACC_PUBLIC : Opcodes.ACC_PRIVATE) + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, MaybeContinuableClassVisitor.MARKER_FIELD_NAME, "Ljava/lang/String;", null, "A" ).visitEnd(); } super.visitEnd(); }
@Override public void visitEnd() { super.visitEnd(); }
public HeapClass(ClassVisitor cv, String classId, boolean suppressAuditing, boolean debugAuditing) { this.cv = new ClassAdapter(cv); this.id = classId; this.suppressClass = suppressAuditing; this.debugClass = debugAuditing; log(debugClass, "{ # CLASS " + id); }
public void visitSource(final String source, final String debug) { super.visitSource(source, debug); mFileName = source; }
public void visitEnd() { log(debugClass, "\tvisitEnd()\n}"); cv.visitEnd(); }
final AtomicReference<Method> holder = new AtomicReference<Method>(); cr.accept(new ClassAdapter(empty){
@Override public void visitSource(String source, String debug) { super.visitSource(sourceFile, debug); } }
public MethodVisitor visitMethod(int access, final String name, final String desc, final String signature, final String[] exceptions) { for ( String method : DEFINALIZE_LIST ) { if ( name.equals(method) ) { access &= ~ACC_FINAL; break; } } return super.visitMethod(access, name, desc, signature, exceptions); } };
public void visit( final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) { super.visit(version, access, name, null, superName, interfaces); }
public FieldVisitor visitField( final int access, final String name, final String desc, final String signature, final Object value) { return super.visitField(access, name, desc, null, value); }
@Override public void visitEnd() { final MappedSubtypeInfo mappedSubtype = className_to_subtype.get(className); generateViewAddressGetter(); generateCapacity(); generateAlignGetter(mappedSubtype); generateSizeofGetter(); generateNext(); for ( String fieldName : mappedSubtype.fields.keySet() ) { final FieldInfo field = mappedSubtype.fields.get(fieldName); if ( field.type.getDescriptor().length() > 1 ) { // ByteBuffer, getter only generateByteBufferGetter(fieldName, field); } else { generateFieldGetter(fieldName, field); generateFieldSetter(fieldName, field); } } super.visitEnd(); }
reader.accept(new ClassAdapter(new EmptyVisitor()) { @Override public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) {
public void visitSource(String source, String debug) { log(debugClass, "\tvisitSource(" + source + ", " + debug + ")"); this.source = source; cv.visitSource(source, debug); }
private void generateSizeofGetter() { MethodVisitor mv = super.visitMethod(ACC_PUBLIC, SIZEOF_METHOD_NAME, "()I", null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, className, "SIZEOF", "I"); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(version, access, name, signature, superName, interfaces); this.classAccess = access; }
@Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { if (MaybeContinuableClassVisitor.MARKER_FIELD_NAME.equals(name) && (access & Opcodes.ACC_STATIC) != 0) { skipEnchancing = true; classInfo.markClassProcessed(); throw StopException.INSTANCE; } return super.visitField(access, name, desc, signature, value); }
/** * @param source In the format "ClassInstrumenter.java" */ public void visitSource(String source, String debug) { super.visitSource(source, debug); classData.setSourceFileName(source); }