List of usage examples for org.objectweb.asm ClassVisitor visitEnd
public void visitEnd()
From source file:org.springframework.migrationanalyzer.contributions.bytecode.DelegatingClassVisitor.java
License:Apache License
@Override public void visitEnd() { for (ClassVisitor delegate : this.delegates) { delegate.visitEnd(); } }
From source file:org.teavm.flavour.regex.bytecode.MatcherClassBuilder.java
License:Apache License
public byte[] build(String className, Dfa dfa) { dfa = reorder(dfa, getOrdering(dfa)); className = className.replace('.', '/'); this.className = className; ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = writer; cv.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, className, null, "java/lang/Object", new String[] { Type.getInternalName(Matcher.class) }); cv.visitField(Opcodes.ACC_PRIVATE, "state", "I", null, null).visitEnd(); cv.visitField(Opcodes.ACC_PRIVATE, "domain", "I", null, null).visitEnd(); cv.visitField(Opcodes.ACC_PRIVATE, "index", "I", null, null).visitEnd(); buildConstructor(cv, className);/*from w w w .ja v a 2 s . c o m*/ buildValidMethod(cv, className); buildDomainMethod(cv, className); buildIndexMethod(cv, className); buildRestartMethod(cv, className); buildForkMethod(cv, className); buildEndMethod(cv, className, dfa); buildWorkerMethod(cv, className, dfa); cv.visitEnd(); byte[] result = writer.toByteArray(); return result; }
From source file:rubah.bytecode.transformers.ProxyGenerator.java
License:Open Source License
public byte[] generateProxy(String name) { final String proxyName = name.replace('.', '/'); ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); HashMap<Object, String> namesMap = new HashMap<Object, String>(); HashMap<String, Object> objectsMap = new HashMap<String, Object>(); // Map<Pair<Clazz, Method>, Integer> overloads = this.computeInheritedOverloads(this.version.getOverloads()); ClassVisitor visitor = writer; visitor = new ReplaceUniqueByOriginalNames(namesMap, objectsMap, this.version.getNamespace(), visitor); visitor = new UpdatableClassRenamer(this.version, objectsMap, visitor); visitor = this.getMethodsTransformer(proxyName, this.thisClass, visitor); // The placement of this transformer is important // because convert methods require special treatment // as they operate in between versions if (this.version.getPrevious() != null) { UpdateClass updateClass = VersionManager.getInstance().getUpdateClass(this.version); visitor = new ProcessUpdateClass(objectsMap, this.version, updateClass, visitor); visitor = new ClassVisitor(ASM5, visitor) { @Override//from w w w .ja va 2 s. c o m public void visitEnd() { Type t = thisClass.getASMType(); String updatableName = version.getUpdatableName(t.getClassName()); if (updatableName != null) { Type t1 = Type.getObjectType(updatableName.replace('.', '/')); String prevName = version.getPrevious().getUpdatableName(t.getClassName()); MethodVisitor mv = this.cv.visitMethod(ACC_PUBLIC, "convert", Type.getMethodDescriptor(Type.VOID_TYPE, OBJECT_TYPE, OBJECT_TYPE), null, null); if (prevName != null) { Type t0 = Type.getObjectType( version.getPrevious().getUpdatableName(t.getClassName()).replace('.', '/')); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, t0.getInternalName()); mv.visitVarInsn(ALOAD, 2); mv.visitTypeInsn(CHECKCAST, t1.getInternalName()); mv.visitMethodInsn(INVOKESTATIC, proxyName, ProcessUpdateClass.METHOD_NAME_STATIC, Type.getMethodDescriptor(Type.VOID_TYPE, t0, t1), false); mv.visitInsn(RETURN); } else { // Class was introduced this version mv.visitTypeInsn(NEW, "java/lang/Error"); mv.visitInsn(DUP); mv.visitLdcInsn( "Should not execute, converting a class that did not exist in the previous version"); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Error", "<init>", "(Ljava/lang/String;)V", false); mv.visitInsn(ATHROW); } mv.visitMaxs(0, 0); mv.visitEnd(); } this.cv.visitEnd(); } }; } // visitor = new RenameOverloads(objectsMap, overloads, this.version.getNamespace(), visitor); // visitor = new TypeEraser(objectsMap, this.version, visitor); visitor = new AddGettersAndSetters(objectsMap, this.version.getNamespace(), visitor) .setGenerateInheritedFields(true); visitor = new ReplaceOriginalNamesByUnique(namesMap, objectsMap, this.version.getNamespace(), visitor); visitor = new OverrideInheritedMethods(this.thisClass, visitor); visitor.visit(V1_5, CLASS_ACCESS, this.thisClass.getASMType().getInternalName(), null, null, null); visitor.visitEnd(); return writer.toByteArray(); }
From source file:suneido.compiler.TestAsm.java
License:Open Source License
public static void main(String[] args) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new CheckClassAdapter(cw); MethodVisitor mv;//from w w w.j a va 2 s . co m cv.visit(V1_6, ACC_PUBLIC + ACC_SUPER, Type.getInternalName(SampleFunction.class), null, Type.getInternalName(SuCallBase.class), null); mv = cv.visitMethod(ACC_PUBLIC + ACC_VARARGS, "call", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l3 = new Label(); mv.visitLabel(l3); mv.visitLocalVariable("this", Type.getDescriptor(SampleFunction.class), null, l0, l3, 0); mv.visitLocalVariable("self", "Ljava/lang/Object;", null, l0, l3, 1); mv.visitLocalVariable("args", "[Ljava/lang/Object;", null, l0, l3, 2); mv.visitMaxs(0, 0); mv.visitEnd(); cv.visitEnd(); }