List of usage examples for org.objectweb.asm MethodVisitor visitLabel
public void visitLabel(final Label label)
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void include(Include include, int event, MethodVisitor visitor) { visitor.visitVarInsn(ALOAD, event);/*from www . j ava 2 s . c o m*/ visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.objectType.getInternalName(), "getClass", BytecodeEventListenerGeneration.getClassMethod.getDescriptor(), false); Label returnLabel = new Label(); Label continueLabel = new Label(); for (Class clazz : include.value()) { visitor.visitInsn(DUP); visitor.visitLdcInsn(Type.getType(clazz)); visitor.visitInsn(SWAP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.objectType.getInternalName(), "equals", BytecodeEventListenerGeneration.equalsMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); } visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void cancelled(Cancelled cancelled, int event, Class eventClass, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);/*from ww w . j av a 2s . co m*/ if (CancellableEvent.class.isAssignableFrom(eventClass)) { //Assume cancelled visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.cancellableEventType.getInternalName(), "isCancelled", BytecodeEventListenerGeneration.isCancelledEventMethod.getDescriptor(), true); if (cancelled.value()) { visitor.visitJumpInsn(IFEQ, returnLabel); } else { visitor.visitJumpInsn(IFNE, returnLabel); } } else { //Check instance Label cleanLabel = new Label(); Label continueLabel2 = new Label(); visitor.visitInsn(DUP); visitor.visitTypeInsn(INSTANCEOF, BytecodeEventListenerGeneration.cancellableEventType.getInternalName()); visitor.visitJumpInsn(IFEQ, cleanLabel); visitor.visitJumpInsn(GOTO, continueLabel2); visitor.visitLabel(cleanLabel); visitor.visitInsn(POP); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(continueLabel2); visitor.visitTypeInsn(CHECKCAST, BytecodeEventListenerGeneration.cancellableEventType.getInternalName()); visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.cancellableEventType.getInternalName(), "isCancelled", BytecodeEventListenerGeneration.isCancelledEventMethod.getDescriptor(), true); if (cancelled.value()) { visitor.visitJumpInsn(IFEQ, returnLabel); } else { visitor.visitJumpInsn(IFNE, returnLabel); } } visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void firstCause(FirstCause firstCause, Class type, int param, int event, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);// ww w . j a v a 2s . c om visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.eventType.getInternalName(), "cause", BytecodeEventListenerGeneration.eventCauseMethod.getDescriptor(), true); visitor.visitLdcInsn(Type.getType(type)); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.causeType.getInternalName(), "first", BytecodeEventListenerGeneration.causeFirstMethod.getDescriptor(), false); visitor.visitInsn(DUP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "isPresent", BytecodeEventListenerGeneration.isPresentMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "get", BytecodeEventListenerGeneration.getMethod.getDescriptor(), false); BytecodeEventListenerGeneration.checkCast(Type.getType(type), visitor); visitor.visitVarInsn(ASTORE, param); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void lastCause(LastCause lastCause, Class type, int param, int event, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);/*w ww . j av a 2 s . c o m*/ visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.eventType.getInternalName(), "cause", BytecodeEventListenerGeneration.eventCauseMethod.getDescriptor(), true); visitor.visitLdcInsn(Type.getType(type)); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.causeType.getInternalName(), "last", BytecodeEventListenerGeneration.causeLastMethod.getDescriptor(), false); visitor.visitInsn(DUP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "isPresent", BytecodeEventListenerGeneration.isPresentMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "get", BytecodeEventListenerGeneration.getMethod.getDescriptor(), false); BytecodeEventListenerGeneration.checkCast(Type.getType(type), visitor); visitor.visitVarInsn(ASTORE, param); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void getContext(GetContext getContext, String paramName, Class type, int param, int event, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);// w ww . j ava 2 s. c o m visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.eventType.getInternalName(), "context", BytecodeEventListenerGeneration.eventContextMethod.getDescriptor(), true); visitor.visitLdcInsn(getContext.value().equals(GetContext.REFER_TO_PARAM) ? param : getContext.value()); visitor.visitLdcInsn(Type.getType(type)); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.contextType.getInternalName(), "get", BytecodeEventListenerGeneration.contextGetMethod.getDescriptor(), false); visitor.visitInsn(DUP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "isPresent", BytecodeEventListenerGeneration.isPresentMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "get", BytecodeEventListenerGeneration.getMethod.getDescriptor(), false); BytecodeEventListenerGeneration.checkCast(Type.getType(type), visitor); visitor.visitVarInsn(ASTORE, param); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void firstContext(FirstContext firstContext, boolean asPair, Class type, int param, int event, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);//w w w . ja v a2 s .c o m visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.eventType.getInternalName(), "context", BytecodeEventListenerGeneration.eventContextMethod.getDescriptor(), true); visitor.visitLdcInsn(Type.getType(type)); if (asPair) { visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.contextType.getInternalName(), "first", BytecodeEventListenerGeneration.contextFirstMethod.getDescriptor(), false); } else { visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.contextType.getInternalName(), "firstSimple", BytecodeEventListenerGeneration.contextSimpleFirstMethod.getDescriptor(), false); } visitor.visitInsn(DUP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "isPresent", BytecodeEventListenerGeneration.isPresentMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "get", BytecodeEventListenerGeneration.getMethod.getDescriptor(), false); BytecodeEventListenerGeneration.checkCast(asPair ? Type.getType(Pair.class) : Type.getType(type), visitor); visitor.visitVarInsn(ASTORE, param); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void lastContext(LastContext lastContext, boolean asPair, Class type, int param, int event, MethodVisitor visitor) { Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event);//ww w. j a v a 2 s. com visitor.visitMethodInsn(INVOKEINTERFACE, BytecodeEventListenerGeneration.eventType.getInternalName(), "context", BytecodeEventListenerGeneration.eventContextMethod.getDescriptor(), true); visitor.visitLdcInsn(Type.getType(type)); if (asPair) { visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.contextType.getInternalName(), "last", BytecodeEventListenerGeneration.contextLastMethod.getDescriptor(), false); } else { visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.contextType.getInternalName(), "lastSimple", BytecodeEventListenerGeneration.contextSimpleLastMethod.getDescriptor(), false); } visitor.visitInsn(DUP); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "isPresent", BytecodeEventListenerGeneration.isPresentMethod.getDescriptor(), false); visitor.visitJumpInsn(IFEQ, returnLabel); visitor.visitMethodInsn(INVOKEVIRTUAL, BytecodeEventListenerGeneration.optionalType.getInternalName(), "get", BytecodeEventListenerGeneration.getMethod.getDescriptor(), false); BytecodeEventListenerGeneration.checkCast(asPair ? Type.getType(Pair.class) : Type.getType(type), visitor); visitor.visitVarInsn(ASTORE, param); visitor.visitJumpInsn(GOTO, continueLabel); visitor.visitLabel(returnLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); }
From source file:com.gmail.socraticphoenix.nebula.event.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void get(Get get, Parameter parameter, Class eventClass, int param, int event, MethodVisitor visitor) { try {/*from w w w .ja v a2s . c o m*/ String name = EventListenerWrapper.name(get, parameter, eventClass).get(); Type eventType = Type.getType(eventClass); Method rMethod = eventClass.getMethod(name); Type method = Type.getType(rMethod); Type type = Type.getType(parameter.getType()); visitor.visitVarInsn(ALOAD, event); if (eventClass.isInterface()) { visitor.visitMethodInsn(INVOKEINTERFACE, eventType.getInternalName(), name, method.getDescriptor(), true); } else { visitor.visitMethodInsn(INVOKEVIRTUAL, eventType.getInternalName(), name, method.getDescriptor(), false); } if (get.nonnull() && method.getReturnType().getDescriptor().startsWith("L")) { Label continueLabel = new Label(); visitor.visitInsn(DUP); visitor.visitJumpInsn(IFNONNULL, continueLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); visitor.visitVarInsn(ASTORE, param); } else { if (!method.getReturnType().getDescriptor().startsWith("L")) { Type boxing = Type.getType(Reflections.boxingType(rMethod.getReturnType())); visitor.visitTypeInsn(NEW, boxing.getInternalName()); visitor.visitInsn(DUP_X1); visitor.visitInsn(SWAP); visitor.visitMethodInsn(INVOKESPECIAL, boxing.getInternalName(), "<init>", Type.getMethodDescriptor(Type.VOID_TYPE, method.getReturnType()), false); } visitor.visitVarInsn(ASTORE, param); } } catch (NoSuchMethodException e) { //Meh } }
From source file:com.gmail.socraticphoenix.occurence.wrappers.BytecodeEventListenerGeneration.java
License:Open Source License
public static void get(Get get, Parameter parameter, Class eventClass, int param, int event, MethodVisitor visitor) { try {//from www . ja v a 2 s . com String name = EventListenerWrapper.name(get, parameter, eventClass).get(); Type eventType = Type.getType(eventClass); Method rMethod = eventClass.getMethod(name); Type method = Type.getType(rMethod); visitor.visitVarInsn(ALOAD, event); if (eventClass.isInterface()) { visitor.visitMethodInsn(INVOKEINTERFACE, eventType.getInternalName(), name, method.getDescriptor(), true); } else { visitor.visitMethodInsn(INVOKEVIRTUAL, eventType.getInternalName(), name, method.getDescriptor(), false); } if (get.nonnull() && method.getReturnType().getDescriptor().startsWith("L")) { Label continueLabel = new Label(); visitor.visitInsn(DUP); visitor.visitJumpInsn(IFNONNULL, continueLabel); visitor.visitInsn(RETURN); visitor.visitLabel(continueLabel); visitor.visitVarInsn(ASTORE, param); } else { if (!method.getReturnType().getDescriptor().startsWith("L")) { Type boxing = Type.getType(Reflections.boxingType(rMethod.getReturnType())); visitor.visitTypeInsn(NEW, boxing.getInternalName()); visitor.visitInsn(DUP_X1); visitor.visitInsn(SWAP); visitor.visitMethodInsn(INVOKESPECIAL, boxing.getInternalName(), "<init>", Type.getMethodDescriptor(Type.VOID_TYPE, method.getReturnType()), false); } visitor.visitVarInsn(ASTORE, param); } } catch (NoSuchMethodException e) { //Meh } }
From source file:com.google.code.jconts.instrument.gen.ComputationClassGenerator.java
License:Apache License
private void generateConstructor(ClassVisitor cv) { final String name = info.computationClassName; final Type outerType = Type.getObjectType(info.owner); // Constructor have form either <init>(OuterClass this$0, State state) // or <init>(State state) String ctorDesc;/*ww w .j a v a 2s.c om*/ if (info.isStatic()) { ctorDesc = Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { info.stateType }); } else { cv.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_FINAL, "this$0", 'L' + info.owner + ';', null, null); ctorDesc = Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { outerType, info.stateType }); } // Generate constructor MethodVisitor mv = cv.visitMethod(0, CTOR_NAME, ctorDesc, null, null); mv.visitCode(); Label start = new Label(); Label end = new Label(); mv.visitLabel(start); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, OBJECT_NAME, CTOR_NAME, DEFAULT_CTOR_DESC); // Save state field mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 1 + info.thisOffset); mv.visitFieldInsn(Opcodes.PUTFIELD, name, "state", stateDesc); // Save outer this if (!info.isStatic()) { mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitFieldInsn(Opcodes.PUTFIELD, name, "this$0", outerType.getDescriptor()); } mv.visitInsn(Opcodes.RETURN); mv.visitLabel(end); mv.visitLocalVariable("this", 'L' + name + ';', signature, start, end, 0); if (!info.isStatic()) { mv.visitLocalVariable("this$0", outerType.getDescriptor(), null, start, end, 1); } mv.visitLocalVariable("state", stateDesc, null, start, end, 1 + info.thisOffset); mv.visitMaxs(2, 2 + info.thisOffset); mv.visitEnd(); }