@Override public void visitEnd() { for (Hook transplant : transplants) { String resourceName = "/" + transplantMapper.mapResourceName( classFileFormatVersion, transplant.getClassSpec() + ".class"); transplantMethod(resourceName, transplant, cv); } }
protected static void insertMethod(final Hook methodToInsert, final MethodVisitor target) { byte[] classData = readStream("/" + methodToInsert.getClassSpec() + ".class"); ClassReader reader = new ClassReader(classData); ClassVisitor methodFinder = new NoopClassVisitor() { @Override public MethodVisitor visitMethod( int access, String name, String desc, String signature, String[] exceptions) { if (name.equals(methodToInsert.getMethodName()) && desc.equals(methodToInsert.getMethodDescriptor())) { return new InsertBodyOfMethodIntoAnotherVisitor(target); } return null; } }; reader.accept(methodFinder, 0); }