com.googlecode.d2j.tools.jar.ScanBridgeAdapter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle Show documentation
Show all versions of gradle Show documentation
fakeradnroid gradle builder
package com.googlecode.d2j.tools.jar;
import com.googlecode.d2j.tools.jar.ClassInfo.MemberInfo;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static com.googlecode.d2j.util.AccUtils.isBridge;
import static com.googlecode.d2j.util.AccUtils.isSynthetic;
public class ScanBridgeAdapter extends ClassVisitor implements Opcodes {
private Map bridge = new HashMap();
public ScanBridgeAdapter(ClassVisitor cv) {
super(ASM4, cv);
}
// private String currentName;
//
// @Override
// public void visit(int version, int access, String name, String signature,
// String superName, String[] interfaces) {
// super.visit(version, access, name, signature, superName, interfaces);
// this.currentName = name;
// }
public Map getBridge() {
return Collections.unmodifiableMap(bridge);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
if (isBridge(access) && isSynthetic(access)) {
if (mv == null) {
mv = new MethodVisitor(ASM4) {
};
}
final MemberInfo member = new MemberInfo();
member.access = access;
member.desc = desc;
member.name = name;
mv = new MethodVisitor(ASM4, mv) {
@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
super.visitMethodInsn(opcode, owner, name, desc);
if (!name.equals(member.name)) {
bridge.put(owner + '.' + name + desc.substring(0, desc.lastIndexOf(')') + 1), member);
}
}
};
}
return mv;
}
}