本文整理汇总了Java中jdk.internal.org.objectweb.asm.ClassVisitor类的典型用法代码示例。如果您正苦于以下问题:Java ClassVisitor类的具体用法?Java ClassVisitor怎么用?Java ClassVisitor使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ClassVisitor类属于jdk.internal.org.objectweb.asm包,在下文中一共展示了ClassVisitor类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: addGetter
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
static void addGetter(final ClassVisitor cv, final String owner, final MemberInfo memInfo) {
final int access = ACC_PUBLIC;
final String name = GETTER_PREFIX + memInfo.getJavaName();
final String desc = getterDesc(memInfo);
final MethodVisitor mv = cv.visitMethod(access, name, desc, null, null);
final MethodGenerator mi = new MethodGenerator(mv, access, name, desc);
mi.visitCode();
if (memInfo.isStatic() && memInfo.getKind() == Kind.PROPERTY) {
mi.getStatic(owner, memInfo.getJavaName(), memInfo.getJavaDesc());
} else {
mi.loadLocal(0);
mi.getField(owner, memInfo.getJavaName(), memInfo.getJavaDesc());
}
mi.returnValue();
mi.computeMaxs();
mi.visitEnd();
}
示例2: addSetter
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
static void addSetter(final ClassVisitor cv, final String owner, final MemberInfo memInfo) {
final int access = ACC_PUBLIC;
final String name = SETTER_PREFIX + memInfo.getJavaName();
final String desc = setterDesc(memInfo);
final MethodVisitor mv = cv.visitMethod(access, name, desc, null, null);
final MethodGenerator mi = new MethodGenerator(mv, access, name, desc);
mi.visitCode();
if (memInfo.isStatic() && memInfo.getKind() == Kind.PROPERTY) {
mi.loadLocal(1);
mi.putStatic(owner, memInfo.getJavaName(), memInfo.getJavaDesc());
} else {
mi.loadLocal(0);
mi.loadLocal(1);
mi.putField(owner, memInfo.getJavaName(), memInfo.getJavaDesc());
}
mi.returnVoid();
mi.computeMaxs();
mi.visitEnd();
}
示例3: make
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
public ClassVisitor make(ClassVisitor cv) {
return new ClassVisitor(Opcodes.ASM5, cv) {
@Override
public void visitInnerClass(String name, String outerName,
String innerName, int access) {
if (whenVisitInner) {
int access_ = (ACC_PROTECTED | access) & ~(ACC_PRIVATE | ACC_PUBLIC);
System.out.println("visitInnerClass: name = " + name
+ ", outerName = " + outerName
+ ", innerName = " + innerName
+ ", access original = 0x" + Integer.toHexString(access)
+ ", access modified to 0x" + Integer.toHexString(access_));
access = access_;
}
super.visitInnerClass(name, outerName, innerName, access);
}
};
}
示例4: hasModulePackages
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
boolean hasModulePackages() throws IOException {
Set<String> attrTypes = new HashSet<>();
ClassVisitor cv = new ClassVisitor(Opcodes.ASM5) {
@Override
public void visitAttribute(Attribute attr) {
attrTypes.add(attr.type);
}
};
// prototype of attributes that should be parsed
Attribute[] attrs = new Attribute[] {
new ClassFileAttributes.ModulePackagesAttribute()
};
try (InputStream in = getInputStream()) {
// parse module-info.class
ClassReader cr = new ClassReader(in);
cr.accept(cv, attrs, 0);
return attrTypes.contains(ClassFileConstants.MODULE_PACKAGES);
}
}
示例5: read
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
public static ModuleTarget read(InputStream in) throws IOException {
ModuleTargetAttribute[] modTargets = new ModuleTargetAttribute[1];
ClassVisitor cv = new ClassVisitor(Opcodes.ASM5) {
@Override
public void visitAttribute(Attribute attr) {
if (attr instanceof ModuleTargetAttribute) {
modTargets[0] = (ModuleTargetAttribute)attr;
}
}
};
// prototype of attributes that should be parsed
Attribute[] attrs = new Attribute[] {
new ModuleTargetAttribute()
};
// parse module-info.class
ClassReader cr = new ClassReader(in);
cr.accept(cv, attrs, 0);
if (modTargets[0] != null) {
return new ModuleTarget(modTargets[0].targetPlatform());
}
return null;
}
示例6: hasModuleTarget
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
private static boolean hasModuleTarget(InputStream in) throws IOException {
ModuleTargetAttribute[] modTargets = new ModuleTargetAttribute[1];
ClassVisitor cv = new ClassVisitor(Opcodes.ASM5) {
@Override
public void visitAttribute(Attribute attr) {
if (attr instanceof ModuleTargetAttribute) {
modTargets[0] = (ModuleTargetAttribute)attr;
}
}
};
// prototype of attributes that should be parsed
Attribute[] attrs = new Attribute[] {
new ModuleTargetAttribute()
};
// parse module-info.class
ClassReader cr = new ClassReader(in);
cr.accept(cv, attrs, 0);
return modTargets[0] != null && modTargets[0].targetPlatform() != null;
}
示例7: addMethodEntryInjection
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
public synchronized Instrumentor addMethodEntryInjection(String methodName, Consumer<InstrHelper> injector) {
instrumentingVisitor = new ClassVisitor(Opcodes.ASM5, instrumentingVisitor) {
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
if (name.equals(methodName)) {
matches.getAndIncrement();
mv = new MethodVisitor(Opcodes.ASM5, mv) {
@Override
public void visitCode() {
injector.accept(new InstrHelper(mv, name));
}
};
}
return mv;
}
};
return this;
}
示例8: visit
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
@Override
public ClassWriter visit(ClassReader reader) {
if ((amount++ % 2) == 0) {
String className = reader.getClassName();
if (className.endsWith("module-info")) {
return null;
}
ClassWriter cw = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES);
reader.accept(new ClassVisitor(Opcodes.ASM5, cw) {
@Override
public void visit(int i, int i1, String s, String s1, String s2, String[] strings) {
super.visit(i, i1, s + "Changed", s1, s2, strings);
}
}, ClassReader.EXPAND_FRAMES);
++changed;
return cw;
} else {
return null;
}
}
示例9: accept
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
/**
* Makes the given class visitor visit this method.
*
* @param cv
* a class visitor.
*/
public void accept(final ClassVisitor cv) {
String[] exceptions = new String[this.exceptions.size()];
this.exceptions.toArray(exceptions);
MethodVisitor mv = cv.visitMethod(access, name, desc, signature,
exceptions);
if (mv != null) {
accept(mv);
}
}
示例10: makeConstructor
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
static MethodGenerator makeConstructor(final ClassVisitor cv) {
final int access = 0;
final String name = INIT;
final String desc = DEFAULT_INIT_DESC;
final MethodVisitor mv = cv.visitMethod(access, name, desc, null, null);
return new MethodGenerator(mv, access, name, desc);
}
示例11: addMapField
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
static void addMapField(final ClassVisitor cv) {
// add a PropertyMap static field
final FieldVisitor fv = cv.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL,
PROPERTYMAP_FIELD_NAME, PROPERTYMAP_DESC, null, null);
if (fv != null) {
fv.visitEnd();
}
}
示例12: ScriptClassInstrumentor
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
ScriptClassInstrumentor(final ClassVisitor visitor, final ScriptClassInfo sci) {
super(Opcodes.ASM4, visitor);
if (sci == null) {
throw new IllegalArgumentException("Null ScriptClassInfo, is the class annotated?");
}
this.scriptClassInfo = sci;
this.memberCount = scriptClassInfo.getInstancePropertyCount();
}
示例13: Method
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
public Method(ClassConstruct ownerClass, ClassVisitor cv, String name, String descriptor, int access,
ClassBuilder.ExecutionMode execMode) {
this.ownerClassName = ownerClass.getName();
this.ownerClass = ownerClass;
this.execMode = execMode;
this.cv = cv;
mv = cv.visitMethod(access, name, descriptor, null, null);
mv.visitCode();
}
示例14: asm
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
public byte[] asm(ClassLoader loader, String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException {
ClassWriter cw = new ClassWriter(0);
ClassVisitor cv = new ReAddDummyFieldsClassVisitor(ASM5, cw) { };
ClassReader cr = new ClassReader(classfileBuffer);
cr.accept(cv, 0);
return cw.toByteArray();
}
示例15: generateTestMethod
import jdk.internal.org.objectweb.asm.ClassVisitor; //导入依赖的package包/类
private static void generateTestMethod(ClassVisitor cv,
Label unstableIfLocation) {
MethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, METHOD_NAME,
"(Z)V", null, null);
mv.visitCode();
Label end = new Label();
Label falseBranch = new Label();
// push "field" field's value and 1 to stack
mv.visitFieldInsn(GETSTATIC, CLASS_NAME, FIELD_NAME, "I");
mv.visitInsn(ICONST_1);
// load argument's value
mv.visitVarInsn(ILOAD, 0); // alwaysTrue
// here is our unstable if
mv.visitLabel(unstableIfLocation);
mv.visitJumpInsn(IFEQ, falseBranch);
// increment on "true"
mv.visitInsn(IADD);
mv.visitJumpInsn(GOTO, end);
// decrement on "false"
mv.visitLabel(falseBranch);
mv.visitInsn(ISUB);
mv.visitLabel(end);
// bye bye
mv.visitInsn(RETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}