List of usage examples for org.objectweb.asm MethodVisitor visitEnd
public void visitEnd()
From source file:me.themallard.bitmmo.impl.plugin.playerhook.PlayerPlugin.java
License:Open Source License
@Override public void run(ClassNode cn) { MethodVisitor mv = cn.visitMethod(Opcodes.ACC_PUBLIC, "getPosition", "()" + "Lme/themallard/bitmmo/impl/plugin/position/IPosition;", null, null); mv.visitVarInsn(Opcodes.ALOAD, 0);/*w w w.j ava 2 s.co m*/ mv.visitFieldInsn(Opcodes.GETFIELD, "Entity", "position", "LPosition;"); mv.visitInsn( Type.getType("Lme/themallard/bitmmo/impl/plugin/position/IPosition;").getOpcode(Opcodes.IRETURN)); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void compileBridgeMethod(ClassVisitor writer, String targetClassName, String deserializerClassName) { // this method is needed to support the generics-based call MethodVisitor syntheticMethodVisitor = writer.visitMethod(ACC_PUBLIC + ACC_BRIDGE + ACC_SYNTHETIC, "deserialize", "(L" + org.objectweb.asm.Type.getInternalName(Deserializer.class) + ";Lcom/facebook/thrift/protocol/TProtocol;)Ljava/lang/Object;", null, new String[] { "com/facebook/thrift/TException" }); syntheticMethodVisitor.visitCode();/*from w w w . j a v a 2s. com*/ syntheticMethodVisitor.visitVarInsn(ALOAD, 0); syntheticMethodVisitor.visitVarInsn(ALOAD, 1); syntheticMethodVisitor.visitVarInsn(ALOAD, 2); syntheticMethodVisitor.visitMethodInsn(INVOKEVIRTUAL, deserializerClassName, "deserialize", "(L" + Util.getInternalName(Deserializer.class) + ";Lcom/facebook/thrift/protocol/TProtocol;)L" + targetClassName + ";"); syntheticMethodVisitor.visitInsn(ARETURN); syntheticMethodVisitor.visitMaxs(3, 3); syntheticMethodVisitor.visitEnd(); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void compileDeserializeMethod(StructureType type, ClassVisitor writer, String targetClassName, Class targetClass) {/* w ww . j a va2 s. co m*/ MethodVisitor methodVisitor = writer.visitMethod( ACC_PUBLIC, "deserialize", "(L" + Util.getInternalName(Deserializer.class) + ";Lcom/facebook/thrift/protocol/TProtocol;)L" + targetClassName + ";", null, new String[] { "com/facebook/thrift/TException" }); FrameRegisterManager context = new FrameRegisterManager(); context.bindSlot("this", 0); context.bindSlot("deserializer", 1); context.bindSlot("protocol", 2); context.newSlot("target"); context.newSlot("tfield"); methodVisitor.visitCode(); // <target> result = new <target>() methodVisitor.visitTypeInsn(NEW, targetClassName); methodVisitor.visitInsn(DUP); methodVisitor.visitMethodInsn(INVOKESPECIAL, targetClassName, "<init>", "()V"); methodVisitor.visitVarInsn(ASTORE, context.getSlot("target")); // protocol.readStructBegin() methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readStructBegin", "()Lcom/facebook/thrift/protocol/TStruct;"); methodVisitor.visitInsn(POP); // discard return value // while (true) Label whileLabel = new Label(); methodVisitor.visitLabel(whileLabel); // TField tfield = protocol.readFieldBegin() methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readFieldBegin", "()Lcom/facebook/thrift/protocol/TField;"); methodVisitor.visitVarInsn(ASTORE, context.getSlot("tfield")); // tfield.type methodVisitor.visitVarInsn(ALOAD, context.getSlot("tfield")); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TField", "type", "B"); methodVisitor.visitFieldInsn(GETSTATIC, "com/facebook/thrift/protocol/TType", "STOP", "B"); // if (tfield.type == TType.STOP) { break; } Label endWhile = new Label(); methodVisitor.visitJumpInsn(IF_ICMPEQ, endWhile); // tfield.id methodVisitor.visitVarInsn(ALOAD, context.getSlot("tfield")); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TField", "id", "S"); List<Field> fields = new ArrayList<Field>(type.getFields()); int[] ids = new int[fields.size()]; Label[] labels = new Label[fields.size()]; for (int i = 0; i < fields.size(); ++i) { ids[i] = fields.get(i).getId(); labels[i] = new Label(); } Label fieldSkipped = new Label(); methodVisitor.visitLookupSwitchInsn(fieldSkipped, ids, labels); for (int i = 0; i < fields.size(); ++i) { Field field = fields.get(i); methodVisitor.visitLabel(labels[i]); // if (tfield.type == ###) methodVisitor.visitVarInsn(ALOAD, context.getSlot("tfield")); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TField", "type", "B"); methodVisitor.visitIntInsn(BIPUSH, field.getType().getTType()); methodVisitor.visitJumpInsn(IF_ICMPNE, fieldSkipped); methodVisitor.visitVarInsn(ALOAD, context.getSlot("target")); if (Map.class.isAssignableFrom(targetClass)) { methodVisitor.visitLdcInsn(field.getName()); generateReadElement(methodVisitor, context, field.getType()); generateAddToMap(targetClassName, methodVisitor, context, field); } else { generateReadElement(methodVisitor, context, field.getType()); generateSetTargetField(targetClassName, methodVisitor, context, field); } methodVisitor.visitJumpInsn(GOTO, whileLabel); } methodVisitor.visitLabel(fieldSkipped); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitVarInsn(ALOAD, context.getSlot("tfield")); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TField", "type", "B"); methodVisitor.visitMethodInsn(INVOKESTATIC, "com/facebook/thrift/protocol/TProtocolUtil", "skip", "(Lcom/facebook/thrift/protocol/TProtocol;B)V"); // end while methodVisitor.visitJumpInsn(GOTO, whileLabel); methodVisitor.visitLabel(endWhile); // protocol.readStructEnd() methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readStructEnd", "()V"); // return result methodVisitor.visitVarInsn(ALOAD, context.getSlot("target")); methodVisitor.visitInsn(ARETURN); methodVisitor.visitMaxs(1, 1); // TODO: what should these be? methodVisitor.visitEnd(); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void compileConstructor(ClassVisitor writer) { // constructor MethodVisitor constructorVisitor = writer.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); constructorVisitor.visitCode();/*from www . j a v a 2 s . c om*/ constructorVisitor.visitVarInsn(ALOAD, 0); constructorVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); constructorVisitor.visitInsn(RETURN); constructorVisitor.visitMaxs(1, 1); constructorVisitor.visitEnd(); }
From source file:mt.swift.Serializer.java
License:Apache License
private void compileSerializeMethod(StructureType type, ClassVisitor writer, String targetClassName, Class clazz) {// w w w.j av a2s . com MethodVisitor methodVisitor = writer.visitMethod(ACC_PUBLIC, "serialize", "(Ljava/lang/Object;L" + Util.getInternalName(Serializer.class) + ";Lcom/facebook/thrift/protocol/TProtocol;)V", null, new String[] { "com/facebook/thrift/TException" }); FrameRegisterManager context = new FrameRegisterManager(); context.bindSlot("this", 0); context.bindSlot("object", 1); context.bindSlot("serializer", 2); context.bindSlot("protocol", 3); methodVisitor.visitCode(); // protocol.writeStructBegin(new TStruct("name")) methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitTypeInsn(NEW, "com/facebook/thrift/protocol/TStruct"); methodVisitor.visitInsn(DUP); methodVisitor.visitLdcInsn(type.getName()); methodVisitor.visitMethodInsn(INVOKESPECIAL, "com/facebook/thrift/protocol/TStruct", "<init>", "(Ljava/lang/String;)V"); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "writeStructBegin", "(Lcom/facebook/thrift/protocol/TStruct;)V"); // TField tfield = new TField() int fieldSlot = context.newAnonymousSlot(); methodVisitor.visitTypeInsn(NEW, "com/facebook/thrift/protocol/TField"); methodVisitor.visitInsn(DUP); methodVisitor.visitMethodInsn(INVOKESPECIAL, "com/facebook/thrift/protocol/TField", "<init>", "()V"); methodVisitor.visitVarInsn(ASTORE, fieldSlot); for (Field field : type.getFields()) { // tfield.id = ... methodVisitor.visitVarInsn(ALOAD, fieldSlot); pushValue(methodVisitor, (short) field.getId()); // TODO: field.getId() should return short methodVisitor.visitFieldInsn(PUTFIELD, "com/facebook/thrift/protocol/TField", "id", "S"); // tfield.type = ... methodVisitor.visitVarInsn(ALOAD, fieldSlot); pushValue(methodVisitor, field.getType().getTType()); methodVisitor.visitFieldInsn(PUTFIELD, "com/facebook/thrift/protocol/TField", "type", "B"); // tfield.name = ... methodVisitor.visitVarInsn(ALOAD, fieldSlot); methodVisitor.visitLdcInsn(field.getName()); methodVisitor.visitFieldInsn(PUTFIELD, "com/facebook/thrift/protocol/TField", "name", "Ljava/lang/String;"); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitVarInsn(ALOAD, fieldSlot); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "writeFieldBegin", "(Lcom/facebook/thrift/protocol/TField;)V"); if (Map.class.isAssignableFrom(clazz)) { generateGetFromMap(methodVisitor, context, field); } else { generateGetField(targetClassName, methodVisitor, context, field); } // protocol.writeXXX(element) generateWriteElement(methodVisitor, context, field.getType()); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "writeFieldEnd", "()V"); } methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "writeFieldStop", "()V"); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "writeStructEnd", "()V"); context.release(fieldSlot); methodVisitor.visitInsn(RETURN); methodVisitor.visitMaxs(1, 1); // TODO: compute these methodVisitor.visitEnd(); }
From source file:net.minecrell.quartz.event.EventHandlerClassFactory.java
License:MIT License
private static byte[] generateClass(String name, Class<?> handle, Method method, Class<?> eventClass) { name = name.replace('.', '/'); final String handleName = Type.getInternalName(handle); final String handleDescriptor = Type.getDescriptor(handle); final String eventName = Type.getInternalName(eventClass); ClassWriter cw = new ClassWriter(0); FieldVisitor fv;/*from ww w . j a va 2s .c om*/ MethodVisitor mv; cw.visit(V1_8, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, name, null, "java/lang/Object", new String[] { EVENT_HANDLER_CLASS }); { fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "handle", handleDescriptor, null, null); fv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "<init>", '(' + handleDescriptor + ")V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, name, "handle", handleDescriptor); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "getHandle", "()Ljava/lang/Object;", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, name, "handle", handleDescriptor); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "handle", EVENT_HANDLER_METHOD, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, name, "handle", handleDescriptor); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, eventName); mv.visitMethodInsn(INVOKEVIRTUAL, handleName, method.getName(), "(L" + eventName + ";)V", false); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
From source file:net.openhft.smoothie.SegmentClassGenerator.java
License:Open Source License
private static byte[] classBytes(String segmentClassName, int allocationCapacity) { ClassWriter cw = new ClassWriter(0); String segmentClassNameWithSlashes = segmentClassName.replace('.', '/'); cw.visit(52, ACC_PUBLIC + ACC_SUPER, segmentClassNameWithSlashes + allocationCapacity, null, segmentClassNameWithSlashes, null); for (int i = 1; i < allocationCapacity; i++) { FieldVisitor fv;/* w w w .j a v a 2s.c om*/ fv = cw.visitField(0, "k" + i, "Ljava/lang/Object;", null, null); fv.visitEnd(); fv = cw.visitField(0, "v" + i, "Ljava/lang/Object;", null, null); fv.visitEnd(); } { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, segmentClassNameWithSlashes, "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
From source file:net.orfjackal.dimdwarf.aop.AddEqualsAndHashCodeMethodsForEntities.java
License:Open Source License
private void addEqualsMethod() { MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, "equals", "(Ljava/lang/Object;)Z", null, null); mv.visitCode();/* w w w. j av a 2s .c o m*/ mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, entityHelperClass, "equals", "(Ljava/lang/Object;Ljava/lang/Object;)Z"); mv.visitInsn(IRETURN); mv.visitMaxs(2, 2); mv.visitEnd(); }
From source file:net.orfjackal.dimdwarf.aop.AddEqualsAndHashCodeMethodsForEntities.java
License:Open Source License
private void addHashCodeMethod() { MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null); mv.visitCode();//from ww w. java2 s . c o m mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, entityHelperClass, "hashCode", "(Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:net.orfjackal.retrolambda.defaultmethods.ClassModifier.java
License:Open Source License
@Override public void visitEnd() { for (MethodContainer m : defaultMethods) { if (visitedMethods.contains(new VisitedMethod(m.methodName, m.methodDesc))) { continue; }/*from w w w . j a v a 2s . c o m*/ System.out.println("VISITEND, CREATING PROXY " + m); MethodVisitor tmp = super.visitMethod(ACC_PUBLIC, m.methodName, m.methodDesc, m.signature, m.exceptions); tmp.visitVarInsn(ALOAD, 0); int i = 1; for (Type arg : Type.getArgumentTypes(m.methodDesc)) { tmp.visitVarInsn(arg.getOpcode(ILOAD), i++); } String rightInterface = findRightInterace(m, interfaces); System.out.println("It thinks that the right interface is " + rightInterface); String mDesc = Helpers.addParam(m.methodDesc, rightInterface); tmp.visitMethodInsn(INVOKESTATIC, rightInterface + "$helper", m.methodName, mDesc, false); tmp.visitInsn(Type.getReturnType(m.methodDesc).getOpcode(IRETURN)); tmp.visitMaxs(0, 0); tmp.visitEnd(); } super.visitEnd(); }