List of usage examples for org.objectweb.asm MethodVisitor visitLabel
public void visitLabel(final Label label)
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate code to convert ldapAttribute witch is on the to of the stack to * Boolean/* ww w .j ava2 s. co m*/ * * @param p_MethodVisitor * The {@link MethodVisitor} of the generated method * @param p_ClassName * Name of the generated class * @param p_LdapAttribute * The LdapAttribute that will be used for generating the method * @param p_ReturnType * The type of the result * @param p_Object * Index of the object to convert on the stack * @param p_Result * Index of the converted object on the stack */ private void generateConvertToBoolean(MethodVisitor p_MethodVisitor, String p_ClassName, LdapAttribute p_LdapAttribute, Class<?> p_ReturnType, int p_Object, int p_Result) { MethodVisitor mv = p_MethodVisitor; Label l0 = new Label(); // return true or false instead of result generateConvertToBoolean(mv, p_ReturnType, p_LdapAttribute.trueValue(), true, p_Object, p_Result, l0); generateConvertToBoolean(mv, p_ReturnType, p_LdapAttribute.falseValue(), false, p_Object, p_Result, l0); // Can't convert attribute to boolean // throw new IllegalArgumentException(object + // " cannot be converted into boolean"); mv.visitTypeInsn(NEW, "java/lang/IllegalArgumentException"); mv.visitInsn(DUP); mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V"); mv.visitVarInsn(ALOAD, p_Object); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;"); mv.visitLdcInsn(" cannot be converted into boolean"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;"); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalArgumentException", "<init>", "(Ljava/lang/String;)V"); mv.visitInsn(ATHROW); mv.visitLabel(l0); }
From source file:ldapbeans.bean.LdapBeanClassManager.java
License:LGPL
/** * Generate code to convert ldapAttribute witch is on the to of the stack to * Boolean//from w w w.jav a 2 s. c o m * * @param p_MethodVisitor * The {@link MethodVisitor} of the generated method * @param p_ReturnType * The type of the result * @param p_BValues * Possible values for the attribute * @param p_BValue * Boolean value * @param p_Object * Index of the object to convert on the stack * @param p_Result * Index of the converted object on the stack * @param p_End * Destination if the conversion success */ private void generateConvertToBoolean(MethodVisitor p_MethodVisitor, Class<?> p_ReturnType, String[] p_BValues, boolean p_BValue, int p_Object, int p_Result, Label p_End) { MethodVisitor mv = p_MethodVisitor; { // if(trueValue.equals(result)) Label l0 = new Label(); for (String bValue : p_BValues) { mv.visitLdcInsn(bValue); mv.visitVarInsn(ALOAD, p_Object); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equalsIgnoreCase", "(Ljava/lang/String;)Z"); mv.visitJumpInsn(IFNE, l0); } Label l1 = new Label(); mv.visitJumpInsn(GOTO, l1); // { mv.visitLabel(l0); if (boolean.class.equals(p_ReturnType)) { // return true|false; mv.visitInsn(p_BValue ? ICONST_1 : ICONST_0); mv.visitVarInsn(ISTORE, p_Result); } else { // return Boolean.TRUE|Boolean.FALSE; mv.visitFieldInsn(GETSTATIC, "java/lang/Boolean", p_BValue ? "TRUE" : "FALSE", "Ljava/lang/Boolean;"); mv.visitVarInsn(ASTORE, p_Result); } mv.visitJumpInsn(GOTO, p_End); // } mv.visitLabel(l1); } }
From source file:lombok.patcher.scripts.SetSymbolDuringMethodCallScript.java
License:Open Source License
private void makeWrapperMethod(ClassVisitor cv, WrapperMethodDescriptor wmd) { MethodVisitor mv = cv.visitMethod(Opcodes.ACC_SYNTHETIC | Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, wmd.getWrapperName(), wmd.getWrapperDescriptor(), null, null); MethodLogistics logistics = new MethodLogistics(Opcodes.ACC_STATIC, wmd.getWrapperDescriptor()); mv.visitCode();//from w w w. j a va 2 s . c o m Label start = new Label(); Label end = new Label(); Label handler = new Label(); mv.visitTryCatchBlock(start, end, handler, null); mv.visitLabel(start); mv.visitLdcInsn(symbol); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "lombok/patcher/Symbols", "push", "(Ljava/lang/String;)V", false); for (int i = 0; i < logistics.getParamCount(); i++) { logistics.generateLoadOpcodeForParam(i, mv); } mv.visitMethodInsn(wmd.getOpcode(), wmd.getOwner(), wmd.getName(), wmd.getTargetDescriptor(), wmd.isItf()); mv.visitLabel(end); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "lombok/patcher/Symbols", "pop", "()V", false); logistics.generateReturnOpcode(mv); mv.visitLabel(handler); mv.visitFrame(Opcodes.F_FULL, 0, null, 1, new Object[] { "java/lang/Throwable" }); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "lombok/patcher/Symbols", "pop", "()V", false); mv.visitInsn(Opcodes.ATHROW); mv.visitMaxs(Math.max(1, logistics.getParamCount()), logistics.getParamCount()); mv.visitEnd(); }
From source file:me.rojo8399.placeholderapi.impl.placeholder.gen.ClassPlaceholderFactory.java
License:Open Source License
private static void nullCheck(MethodVisitor mv, boolean nullable, Consumer<MethodVisitor> success, boolean throwError) { if (nullable) { return;// w ww. j a v a2s. c o m } // assume null check obj already loaded to stack Label no = new Label(); mv.visitJumpInsn(IFNONNULL, no); if (throwError) { mv.visitTypeInsn(Opcodes.NEW, Type.getInternalName(NoValueException.class)); mv.visitVarInsn(ASTORE, 7); mv.visitVarInsn(ALOAD, 7); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(NoValueException.class), "<init>", "()V", false); mv.visitVarInsn(ALOAD, 7); mv.visitInsn(Opcodes.ATHROW); } else { mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); } mv.visitLabel(no); success.accept(mv); }
From source file:me.rojo8399.placeholderapi.impl.placeholder.gen.ClassPlaceholderFactory.java
License:Open Source License
private static void skipIfNull(MethodVisitor mv, Consumer<MethodVisitor> success) { // assume null check obj already loaded to stack Label no = new Label(); mv.visitJumpInsn(IFNULL, no);//from w ww . jav a2s .c om success.accept(mv); mv.visitLabel(no); }
From source file:me.rojo8399.placeholderapi.impl.placeholder.gen.ClassPlaceholderFactory.java
License:Open Source License
private static void tryCatch(MethodVisitor mv, Consumer<MethodVisitor> t, Consumer<MethodVisitor> c) { Label st = new Label(), et = new Label(), sc = new Label(), ec = new Label(); mv.visitTryCatchBlock(st, et, sc, "java/lang/Exception"); mv.visitLabel(st); t.accept(mv);// w w w. j a v a 2s . c om mv.visitLabel(et); mv.visitJumpInsn(GOTO, ec); mv.visitLabel(sc); c.accept(mv); mv.visitLabel(ec); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void compileDeserializeMethod(StructureType type, ClassVisitor writer, String targetClassName, Class targetClass) {/*from www. j av a2 s . com*/ 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 generateReadList(MethodVisitor methodVisitor, FrameRegisterManager context, ListType listType) { // protocol.readListBegin() int tlistSizeLocal = context.newAnonymousSlot(); int loopCounterLocal = context.newAnonymousSlot(); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readListBegin", "()Lcom/facebook/thrift/protocol/TList;"); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TList", "size", "I"); methodVisitor.visitVarInsn(ISTORE, tlistSizeLocal); // result = new ArrayList(tlist.size) methodVisitor.visitTypeInsn(NEW, "java/util/ArrayList"); methodVisitor.visitInsn(DUP);//from w ww .ja v a2 s.c o m methodVisitor.visitVarInsn(ILOAD, tlistSizeLocal); methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "<init>", "(I)V"); // i = 0 methodVisitor.visitInsn(ICONST_0); methodVisitor.visitVarInsn(ISTORE, loopCounterLocal); // #4 = loop counter Label done = new Label(); Label loop = new Label(); methodVisitor.visitLabel(loop); methodVisitor.visitVarInsn(ILOAD, loopCounterLocal); methodVisitor.visitVarInsn(ILOAD, tlistSizeLocal); methodVisitor.visitJumpInsn(IF_ICMPGE, done); methodVisitor.visitInsn(DUP); // ArrayList generateReadElement(methodVisitor, context, listType.getValueType()); generateConvertToObject(methodVisitor, listType.getValueType()); // entry is left on stack(0). Add to list methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "java/util/ArrayList", "add", "(Ljava/lang/Object;)Z"); methodVisitor.visitInsn(POP); methodVisitor.visitIincInsn(loopCounterLocal, 1); methodVisitor.visitJumpInsn(GOTO, loop); methodVisitor.visitLabel(done); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readListEnd", "()V"); context.release(tlistSizeLocal); context.release(loopCounterLocal); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void generateReadSet(MethodVisitor methodVisitor, FrameRegisterManager context, SetType type) { // protocol.readListBegin() int tsetSizeLocal = context.newAnonymousSlot(); int loopCounterLocal = context.newAnonymousSlot(); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readSetBegin", "()Lcom/facebook/thrift/protocol/TSet;"); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TSet", "size", "I"); methodVisitor.visitVarInsn(ISTORE, tsetSizeLocal); // result = new ArrayList(tlist.size) methodVisitor.visitTypeInsn(NEW, "java/util/HashSet"); methodVisitor.visitInsn(DUP);/*from w w w . jav a 2 s . c om*/ methodVisitor.visitVarInsn(ILOAD, tsetSizeLocal); methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/util/HashSet", "<init>", "(I)V"); // i = 0 methodVisitor.visitInsn(ICONST_0); methodVisitor.visitVarInsn(ISTORE, loopCounterLocal); // #4 = loop counter Label done = new Label(); Label loop = new Label(); methodVisitor.visitLabel(loop); methodVisitor.visitVarInsn(ILOAD, loopCounterLocal); methodVisitor.visitVarInsn(ILOAD, tsetSizeLocal); methodVisitor.visitJumpInsn(IF_ICMPGE, done); methodVisitor.visitInsn(DUP); // ArrayList generateReadElement(methodVisitor, context, type.getValueType()); generateConvertToObject(methodVisitor, type.getValueType()); // entry is left on stack(0). Add to list methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "java/util/HashSet", "add", "(Ljava/lang/Object;)Z"); methodVisitor.visitInsn(POP); methodVisitor.visitIincInsn(loopCounterLocal, 1); methodVisitor.visitJumpInsn(GOTO, loop); methodVisitor.visitLabel(done); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readSetEnd", "()V"); context.release(tsetSizeLocal); context.release(loopCounterLocal); }
From source file:mt.swift.Deserializer.java
License:Apache License
private void generateReadMap(MethodVisitor methodVisitor, FrameRegisterManager context, MapType type) { // protocol.readListBegin() int tmapSizeLocal = context.newAnonymousSlot(); int loopCounterLocal = context.newAnonymousSlot(); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readMapBegin", "()Lcom/facebook/thrift/protocol/TMap;"); methodVisitor.visitFieldInsn(GETFIELD, "com/facebook/thrift/protocol/TMap", "size", "I"); methodVisitor.visitVarInsn(ISTORE, tmapSizeLocal); // result = new ArrayList(tlist.size) methodVisitor.visitTypeInsn(NEW, "java/util/LinkedHashMap"); methodVisitor.visitInsn(DUP);/*from w ww . j a va 2 s . c o m*/ methodVisitor.visitVarInsn(ILOAD, tmapSizeLocal); methodVisitor.visitInsn(ICONST_2); // allocate 2 * tmap.size to avoid rehashing while building map methodVisitor.visitInsn(IMUL); methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/util/LinkedHashMap", "<init>", "(I)V"); // i = 0 methodVisitor.visitInsn(ICONST_0); methodVisitor.visitVarInsn(ISTORE, loopCounterLocal); // #4 = loop counter Label done = new Label(); Label loop = new Label(); methodVisitor.visitLabel(loop); methodVisitor.visitVarInsn(ILOAD, loopCounterLocal); methodVisitor.visitVarInsn(ILOAD, tmapSizeLocal); methodVisitor.visitJumpInsn(IF_ICMPGE, done); methodVisitor.visitInsn(DUP); // Map generateReadElement(methodVisitor, context, type.getKeyType()); generateConvertToObject(methodVisitor, type.getKeyType()); generateReadElement(methodVisitor, context, type.getValueType()); generateConvertToObject(methodVisitor, type.getValueType()); // entry is left on stack(0). Add to list methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "java/util/LinkedHashMap", "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); methodVisitor.visitInsn(POP); methodVisitor.visitIincInsn(loopCounterLocal, 1); methodVisitor.visitJumpInsn(GOTO, loop); methodVisitor.visitLabel(done); methodVisitor.visitVarInsn(ALOAD, context.getSlot("protocol")); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "com/facebook/thrift/protocol/TProtocol", "readMapEnd", "()V"); context.release(tmapSizeLocal); context.release(loopCounterLocal); }