List of usage examples for org.objectweb.asm Opcodes RETURN
int RETURN
To view the source code for org.objectweb.asm Opcodes RETURN.
Click Source Link
From source file:lucee.transformer.bytecode.util.JavaProxyFactory.java
License:Open Source License
public static Object createProxy(PageContext pc, Component cfc, Class extendz, Class... interfaces) throws PageException, IOException { PageContextImpl pci = (PageContextImpl) pc; if (extendz == null) extendz = Object.class; if (interfaces == null) interfaces = new Class[0]; else {/*from w w w. j a va 2s. co m*/ for (int i = 0; i < interfaces.length; i++) { if (!interfaces[i].isInterface()) throw new IOException( "definition [" + interfaces[i].getName() + "] is a class and not a interface"); } } Type typeExtends = Type.getType(extendz); Type[] typeInterfaces = ASMUtil.toTypes(interfaces); String[] strInterfaces = new String[typeInterfaces.length]; for (int i = 0; i < strInterfaces.length; i++) { strInterfaces[i] = typeInterfaces[i].getInternalName(); } String className = createClassName(extendz, interfaces); //Mapping mapping = cfc.getPageSource().getMapping(); // get ClassLoader PhysicalClassLoader cl = null; try { cl = (PhysicalClassLoader) pci.getRPCClassLoader(false);// mapping.getConfig().getRPCClassLoader(false) } catch (IOException e) { throw Caster.toPageException(e); } Resource classFile = cl.getDirectory().getRealResource(className.concat(".class")); // check if already exists, if yes return if (classFile.exists()) { //Object obj=newInstance(cl,className,cfc); // if(obj!=null) return obj; } /* String classNameOriginal=component.getPageSource().getFullClassName(); String realOriginal=classNameOriginal.replace('.','/'); Resource classFileOriginal = mapping.getClassRootDirectory().getRealResource(realOriginal.concat(".class")); */ ClassWriter cw = ASMUtil.getClassWriter(); cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, className, null, typeExtends.getInternalName(), strInterfaces); //BytecodeContext statConstr = null;//new BytecodeContext(null,null,null,cw,real,ga,Page.STATIC_CONSTRUCTOR); //BytecodeContext constr = null;//new BytecodeContext(null,null,null,cw,real,ga,Page.CONSTRUCTOR); // field Component FieldVisitor _fv = cw.visitField(Opcodes.ACC_PRIVATE, "cfc", COMPONENT_NAME, null, null); _fv.visitEnd(); _fv = cw.visitField(Opcodes.ACC_PRIVATE, "config", CONFIG_WEB_NAME, null, null); _fv.visitEnd(); // Constructor GeneratorAdapter adapter = new GeneratorAdapter(Opcodes.ACC_PUBLIC, CONSTRUCTOR, null, null, cw); Label begin = new Label(); adapter.visitLabel(begin); adapter.loadThis(); adapter.invokeConstructor(Types.OBJECT, SUPER_CONSTRUCTOR); //adapter.putField(JAVA_PROXY, arg1, arg2) adapter.visitVarInsn(Opcodes.ALOAD, 0); adapter.visitVarInsn(Opcodes.ALOAD, 1); adapter.visitFieldInsn(Opcodes.PUTFIELD, className, "config", CONFIG_WEB_NAME); adapter.visitVarInsn(Opcodes.ALOAD, 0); adapter.visitVarInsn(Opcodes.ALOAD, 2); adapter.visitFieldInsn(Opcodes.PUTFIELD, className, "cfc", COMPONENT_NAME); adapter.visitInsn(Opcodes.RETURN); Label end = new Label(); adapter.visitLabel(end); adapter.visitLocalVariable("config", CONFIG_WEB_NAME, null, begin, end, 1); adapter.visitLocalVariable("cfc", COMPONENT_NAME, null, begin, end, 2); //adapter.returnValue(); adapter.endMethod(); // create methods Set<Class> cDone = new HashSet<Class>(); Map<String, Class> mDone = new HashMap<String, Class>(); for (int i = 0; i < interfaces.length; i++) { _createProxy(cw, cDone, mDone, cfc, interfaces[i], className); } cw.visitEnd(); // create class file byte[] barr = cw.toByteArray(); try { ResourceUtil.touch(classFile); IOUtil.copy(new ByteArrayInputStream(barr), classFile, true); cl = (PhysicalClassLoader) pci.getRPCClassLoader(true); Class<?> clazz = cl.loadClass(className, barr); return newInstance(clazz, pc.getConfig(), cfc); } catch (Throwable t) { throw Caster.toPageException(t); } }
From source file:lucee.transformer.bytecode.util.JavaProxyFactory.java
License:Open Source License
private static void _createMethod(ClassWriter cw, Map<String, Class> mDone, Method src, String className) throws IOException { Class<?>[] classArgs = src.getParameterTypes(); Class<?> classRtn = src.getReturnType(); String str = src.getName() + "(" + Reflector.getDspMethods(classArgs) + ")"; Class rtnClass = mDone.get(str); if (rtnClass != null) { if (rtnClass != classRtn) throw new IOException("there is a conflict with method [" + str + "], this method is declared more than once with different return types."); return;/*from w w w. j a v a 2 s . c om*/ } mDone.put(str, classRtn); Type[] typeArgs = ASMUtil.toTypes(classArgs); Type typeRtn = Type.getType(classRtn); org.objectweb.asm.commons.Method method = new org.objectweb.asm.commons.Method(src.getName(), typeRtn, typeArgs); GeneratorAdapter adapter = new GeneratorAdapter(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, method, null, null, cw); //BytecodeContext bc = new BytecodeContext(statConstr,constr,null,null,keys,cw,className,adapter,method,writeLog); Label start = adapter.newLabel(); adapter.visitLabel(start); //JavaProxy.call(cfc,"add",new Object[]{arg0}) // config adapter.visitVarInsn(Opcodes.ALOAD, 0); adapter.visitFieldInsn(Opcodes.GETFIELD, className, "config", CONFIG_WEB_NAME); // cfc adapter.visitVarInsn(Opcodes.ALOAD, 0); adapter.visitFieldInsn(Opcodes.GETFIELD, className, "cfc", COMPONENT_NAME); // name adapter.push(src.getName()); // arguments ArrayVisitor av = new ArrayVisitor(); av.visitBegin(adapter, Types.OBJECT, typeArgs.length); for (int y = 0; y < typeArgs.length; y++) { av.visitBeginItem(adapter, y); adapter.loadArg(y); if (classArgs[y] == boolean.class) adapter.invokeStatic(JAVA_PROXY, _BOOLEAN); else if (classArgs[y] == byte.class) adapter.invokeStatic(JAVA_PROXY, _BYTE); else if (classArgs[y] == char.class) adapter.invokeStatic(JAVA_PROXY, _CHAR); else if (classArgs[y] == double.class) adapter.invokeStatic(JAVA_PROXY, _DOUBLE); else if (classArgs[y] == float.class) adapter.invokeStatic(JAVA_PROXY, _FLOAT); else if (classArgs[y] == int.class) adapter.invokeStatic(JAVA_PROXY, _INT); else if (classArgs[y] == long.class) adapter.invokeStatic(JAVA_PROXY, _LONG); else if (classArgs[y] == short.class) adapter.invokeStatic(JAVA_PROXY, _SHORT); else { adapter.invokeStatic(JAVA_PROXY, _OBJECT); } av.visitEndItem(adapter); } av.visitEnd(); adapter.invokeStatic(JAVA_PROXY, CALL); //JavaProxy.to...(...); int rtn = Opcodes.IRETURN; if (classRtn == boolean.class) adapter.invokeStatic(JAVA_PROXY, TO_BOOLEAN); else if (classRtn == byte.class) adapter.invokeStatic(JAVA_PROXY, TO_BYTE); else if (classRtn == char.class) adapter.invokeStatic(JAVA_PROXY, TO_CHAR); else if (classRtn == double.class) { rtn = Opcodes.DRETURN; adapter.invokeStatic(JAVA_PROXY, TO_DOUBLE); } else if (classRtn == float.class) { rtn = Opcodes.FRETURN; adapter.invokeStatic(JAVA_PROXY, TO_FLOAT); } else if (classRtn == int.class) adapter.invokeStatic(JAVA_PROXY, TO_INT); else if (classRtn == long.class) { rtn = Opcodes.LRETURN; adapter.invokeStatic(JAVA_PROXY, TO_LONG); } else if (classRtn == short.class) adapter.invokeStatic(JAVA_PROXY, TO_SHORT); else if (classRtn == void.class) { rtn = Opcodes.RETURN; adapter.pop(); } else { rtn = Opcodes.ARETURN; adapter.checkCast(typeRtn); } /*mv = cw.visitMethod(ACC_PUBLIC, "add", "(Ljava/lang/Object;)Z", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitLineNumber(20, l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, "Test", "cfc", "Ljava/lang/Object;"); mv.visitLdcInsn("add"); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKESTATIC, "JavaProxy", "call", "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"); mv.visitMethodInsn(INVOKESTATIC, "JavaProxy", "toBoolean", "(Ljava/lang/Object;)Z"); mv.visitInsn(IRETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", "LTest;", null, l0, l1, 0); mv.visitLocalVariable("arg0", "Ljava/lang/Object;", null, l0, l1, 1); mv.visitMaxs(6, 2); mv.visitEnd();*/ adapter.visitInsn(rtn); adapter.endMethod(); }
From source file:maaatts.nodrown.NoDrownPlugin.java
License:Open Source License
@Override public void run(ClassNode cn) { Pattern p = new PatternBuilder() .add(new LdcElement(new LdcInsnNode("You realize you cannot breathe underwater. DEATH!"))).build(); for (MethodNode mn : cn.methods) { int offset = p.getOffset(mn.instructions); if (offset != -1) { mn.instructions.insertBefore(mn.instructions.get(offset), new InsnNode(Opcodes.RETURN)); }/*from w ww .j a v a2s.co m*/ } }
From source file:me.themallard.bitmmo.api.transformer.Transformer.java
License:Open Source License
protected final void createSetter(ClassNode cn, FieldNode fn, String name) { MethodVisitor mv = cn.visitMethod(Opcodes.ACC_PUBLIC, name, "(" + fn.desc + ")V", null, null); mv.visitVarInsn(Opcodes.ALOAD, 0);/*ww w. j a va2 s . c om*/ mv.visitVarInsn(Type.getType(fn.desc).getOpcode(Opcodes.ILOAD), 1); mv.visitFieldInsn(Opcodes.PUTFIELD, cn.name, fn.name, fn.desc); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:me.themallard.bitmmo.impl.transformer.LaserWeaponGodTransformer.java
License:Open Source License
@Override public void run(ClassNode cn) { Pattern p = new PatternBuilder().add(new LdcElement(new LdcInsnNode("TakeSelfDamage"))).build(); for (MethodNode mn : cn.methods) { int offset = p.getOffset(mn.instructions); if (offset != -1) { mn.instructions.insertBefore(mn.instructions.get(offset), new InsnNode(Opcodes.RETURN)); }//from ww w . ja va2s .co m } }
From source file:net.cazzar.corelib.asm.MethodTransformer.java
License:Open Source License
private boolean isReturn(AbstractInsnNode node) { switch (node.getOpcode()) { case Opcodes.RET: case Opcodes.RETURN: case Opcodes.ARETURN: case Opcodes.DRETURN: case Opcodes.FRETURN: case Opcodes.IRETURN: case Opcodes.LRETURN: return true; default://w ww. j a v a 2 s . c o m return false; } }
From source file:net.petercashel.jmsDd.util.ASMTransformer.java
License:Apache License
public static byte[] transform(String name, byte[] bytes) { if (debug)/*from w w w. j a va 2s .c o m*/ System.out.println(bytes.length); ClassNode classNode = new ClassNode(); String classNameASM = name.replace('.', '/'); ClassReader classReader = new ClassReader(bytes); classReader.accept(classNode, 0); boolean DoModInit = false; boolean HasInit = false; String initDesc = "()V"; boolean lockDesc = false; try { try { for (int i = 0; i < classNode.visibleAnnotations.size(); i++) { AnnotationNode ann = (AnnotationNode) classNode.visibleAnnotations.get(i); if (ann.desc.equalsIgnoreCase("Lnet/petercashel/jmsDd/module/Module;")) { try { if (debug) System.out.println("ANNOTE!"); DoModInit = true; Map<String, Object> values = asmList2Map(ann.values); ModuleSystem.modulesToLoad.put( values.get("ModuleName").toString().replace("[", "").replace("]", ""), classNode.name.replace("/", ".")); } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { } try { if (DoModInit) { for (int i = 0; i < classNode.methods.size(); i++) { MethodNode m = (MethodNode) classNode.methods.get(i); if (m.name.contentEquals("<init>")) { initDesc = m.desc; if (m.desc.contentEquals("()V")) { HasInit = true; if (debug) System.out.println("Found <init>"); } } } } } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } if (debug) System.out.println("Still alive?"); try { // L0 // LINENUMBER 43 L0 // ALOAD 0 // INVOKESPECIAL // CLASSNAME FOR ASM // ()V ////// This is effectically a super() call but to the discovered constructor // L1 // LINENUMBER 44 L1 // INVOKESTATIC net/petercashel/jmsDd/API/API$Impl.getAPI ()Lnet/petercashel/jmsDd/API/API; // ALOAD 0 // INVOKEINTERFACE net/petercashel/jmsDd/API/API.registerEventBus (Ljava/lang/Object;)V // L2 // LINENUMBER 46 L2 // RETURN // L3 // LOCALVARIABLE this // "L" + CLASSNAME FOR ASM + ";" // L0 L3 0 // LOCALVARIABLE e Lnet/petercashel/jmsDd/event/module/DummyEvent; L0 L3 1 // MAXSTACK = 2 // MAXLOCALS = 2 if (DoModInit) { if (HasInit) { if (debug) System.out.println("Adding Extra Constructor to " + name); MethodNode constructor = new MethodNode(Opcodes.ACC_PUBLIC, "<init>", "(Lnet/petercashel/jmsDd/event/module/DummyEvent;)V", null, null); Label L0 = new Label(); constructor.visitLabel(L0); constructor.visitVarInsn(Opcodes.ALOAD, 0); constructor.visitMethodInsn(Opcodes.INVOKESPECIAL, classNameASM, "<init>", initDesc); Label L1 = new Label(); constructor.visitLabel(L1); constructor.visitMethodInsn(Opcodes.INVOKESTATIC, "net/petercashel/jmsDd/API/API$Impl", "getAPI", "()Lnet/petercashel/jmsDd/API/API;"); constructor.visitVarInsn(Opcodes.ALOAD, 0); constructor.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/petercashel/jmsDd/API/API", "registerEventBus", "(Ljava/lang/Object;)V"); Label L2 = new Label(); constructor.visitLabel(L2); constructor.visitInsn(Opcodes.RETURN); Label L3 = new Label(); constructor.visitLabel(L3); constructor.visitLocalVariable("this", "L" + classNameASM + ";", null, L0, L3, 0); constructor.visitLocalVariable("e", "Lnet/petercashel/jmsDd/event/module/DummyEvent;", null, L0, L3, 1); constructor.visitMaxs(2, 2); constructor.visitEnd(); classNode.methods.add(constructor); } else { System.err.println("WARNING! " + name + " Doesn't have a default no-args constructor. Module loader cannot chain load the constructor. \n If you are recieving this error and your module has no constructors defined, or a no-args constructor defined, \n please report the bug to the author of JMSDd."); MethodNode constructor = new MethodNode(Opcodes.ACC_PUBLIC, "<init>", "(Lnet/petercashel/jmsDd/event/module/DummyEvent;)V", null, null); Label L0 = new Label(); constructor.visitLabel(L0); constructor.visitVarInsn(Opcodes.ALOAD, 0); //INVOKESPECIAL java/lang/Object.<init> ()V ////// There is no other constructor, call super() to Object. constructor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); Label L1 = new Label(); constructor.visitLabel(L1); constructor.visitMethodInsn(Opcodes.INVOKESTATIC, "net/petercashel/jmsDd/API/API$Impl", "getAPI", "()Lnet/petercashel/jmsDd/API/API;"); constructor.visitVarInsn(Opcodes.ALOAD, 0); constructor.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/petercashel/jmsDd/API/API", "registerEventBus", "(Ljava/lang/Object;)V"); Label L2 = new Label(); constructor.visitLabel(L2); constructor.visitInsn(Opcodes.RETURN); Label L3 = new Label(); constructor.visitLabel(L3); constructor.visitLocalVariable("this", "L" + classNameASM + ";", null, L0, L3, 0); constructor.visitLocalVariable("e", "Lnet/petercashel/jmsDd/event/module/DummyEvent;", null, L0, L3, 1); constructor.visitMaxs(2, 2); constructor.visitEnd(); classNode.methods.add(constructor); } classNode.visitEnd(); ClassWriter wr = new ClassWriter(0); classNode.accept(wr); bytes = wr.toByteArray(); } } catch (Exception e) { e.printStackTrace(); } if (debug) System.out.println("Still alive."); if (debug) System.out.println(bytes.length); if (plugins.size() > 0) { for (ASMPlugin p : plugins) { try { bytes = p.transform(name, bytes); } catch (Exception e) { } } } return bytes; }
From source file:net.sf.cglib.proxy.TestEnhancer.java
License:Apache License
public void testBridgeParameterCheckcast() throws Exception { // If the compiler used for Z omits the bridge method, and X is compiled with javac, // javac will generate an invokespecial bridge in X. // public interface I<A, B> { // public A f(B b); // }/*from w w w. j ava2 s . c o m*/ // public abstract class Z<U extends Number> implements I<U, Long> { // public U f(Long id) { // return null; // } // } // public class X extends Z<Integer> {} final Map<String, byte[]> classes = new HashMap<String, byte[]>(); { ClassWriter cw = new ClassWriter(0); cw.visit(49, Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT | Opcodes.ACC_INTERFACE, "I", "<A:Ljava/lang/Object;B:Ljava/lang/Object;>Ljava/lang/Object;", "java/lang/Object", null); { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, "f", "(Ljava/lang/Object;)Ljava/lang/Object;", "(TB;)TA;", null); mv.visitEnd(); } cw.visitEnd(); classes.put("I.class", cw.toByteArray()); } { ClassWriter cw = new ClassWriter(0); cw.visit(49, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER | Opcodes.ACC_ABSTRACT, "Z", "<U:Ljava/lang/Number;>Ljava/lang/Object;LI<TU;Ljava/lang/String;>;", "java/lang/Object", new String[] { "I" }); { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "f", "(Ljava/lang/String;)Ljava/lang/Number;", "(Ljava/lang/String;)TU;", null); mv.visitCode(); mv.visitInsn(Opcodes.ACONST_NULL); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(1, 2); mv.visitEnd(); } cw.visitEnd(); classes.put("Z.class", cw.toByteArray()); } { ClassWriter cw = new ClassWriter(0); cw.visit(49, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, "X", "LZ<Ljava/lang/Integer;>;", "Z", null); { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "Z", "<init>", "()V", false); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_BRIDGE | Opcodes.ACC_SYNTHETIC, "f", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String"); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "Z", "f", "(Ljava/lang/String;)Ljava/lang/Number;", false); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } cw.visitEnd(); classes.put("X.class", cw.toByteArray()); } ClassLoader classLoader = new ClassLoader(getClass().getClassLoader()) { @Override public InputStream getResourceAsStream(String name) { InputStream is = super.getResourceAsStream(name); if (is != null) { return is; } if (classes.containsKey(name)) { return new ByteArrayInputStream(classes.get(name)); } return null; } public Class findClass(String name) throws ClassNotFoundException { byte[] ba = classes.get(name.replace('.', '/') + ".class"); if (ba != null) { return defineClass(name, ba, 0, ba.length); } throw new ClassNotFoundException(name); } }; List<Class> retTypes = new ArrayList<Class>(); List<Class> paramTypes = new ArrayList<Class>(); Interceptor interceptor = new Interceptor(retTypes, paramTypes); Enhancer e = new Enhancer(); e.setClassLoader(classLoader); e.setSuperclass(classLoader.loadClass("X")); e.setCallback(interceptor); Object c = e.create(); for (Method m : c.getClass().getDeclaredMethods()) { if (m.getName().equals("f") && m.getReturnType().equals(Object.class)) { m.invoke(c, new Object[] { null }); } } // f(Object)Object should bridge to f(Number)String assertEquals(Arrays.asList(Object.class, Number.class), retTypes); assertEquals(Arrays.asList(Object.class, String.class), paramTypes); }
From source file:net.sourceforge.cobertura.instrument.pass1.CodeFootstamp.java
License:GNU General Public License
private boolean trimableIfLast(String e) { return e.equals("JUMP:" + String.valueOf(Opcodes.GOTO)) || e.equals(String.valueOf(Opcodes.RETURN)) || e.equals(String.valueOf(Opcodes.ATHROW)) || e.equals("L"); }
From source file:net.sourceforge.cobertura.instrument.pass3.AbstractCodeProvider.java
License:GNU General Public License
/** * {@inheritDoc}<br/><br/>/*from ww w.ja v a2s.c om*/ * <p/> * Generates method (named {@link #COBERTURA_CLASSMAP_METHOD_NAME}) with such a signature: * __cobertura_classmap( {@link LightClassmapListener} listener).</br> * <p/> * The method informs the listener about all lines, jumps and switches found, and about all counters tracking * the constructions. */ public void generateCoberturaClassMapMethod(ClassVisitor cv, ClassMap classMap) { LinkedList<TouchPointDescriptor> touchPointDescriptors = new LinkedList<TouchPointDescriptor>( classMap.getTouchPointsInLineOrder()); int parts = 0; for (int j = 0; touchPointDescriptors.size() > 0; j++) { List<TouchPointDescriptor> bufor = new LinkedList<TouchPointDescriptor>(); for (int i = 0; i < 1000 && touchPointDescriptors.size() > 0; i++) { bufor.add(touchPointDescriptors.removeFirst()); } classMapContent(cv, j, bufor); parts++; } MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, COBERTURA_CLASSMAP_METHOD_NAME, "(" + Type.getType(LightClassmapListener.class).toString() + ")V", null, null); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitInsn(Opcodes.DUP); mv.visitLdcInsn(classMap.getClassName()); mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, CLASSMAP_LISTENER_INTERNALNAME, "setClazz", "(Ljava/lang/String;)V"); if (classMap.getSource() != null) { mv.visitInsn(Opcodes.DUP); mv.visitLdcInsn(classMap.getSource()); mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, CLASSMAP_LISTENER_INTERNALNAME, "setSource", "(Ljava/lang/String;)V"); } for (int i = 0; i < parts; i++) { mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESTATIC, classMap.getClassName(), COBERTURA_CLASSMAP_METHOD_NAME + "_" + i, "(" + Type.getType(LightClassmapListener.class).toString() + ")V"); } mv.visitInsn(Opcodes.POP); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(0, 0);//will be recalculated by writer mv.visitEnd(); }