List of usage examples for org.objectweb.asm Label Label
public 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 a v a2 s .com*/ 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 w ww . j av a2s . c o 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);/*from w w w .j a va 2 s. 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);/*from w ww. j av a 2s. 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) {/* www . j ava 2 s . c o m*/ Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event); 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) {//from w w w .j a v a2 s .com Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event); 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) {/*from w ww . j a v a2s . c o m*/ Label returnLabel = new Label(); Label continueLabel = new Label(); visitor.visitVarInsn(ALOAD, event); 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) {//from w w w . jav a 2 s. c o m try { 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) {// w w w. j a v a2s.co m try { 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.AsyncMethodAdapter.java
License:Apache License
private void checkProlog() { // Generate only once (at the beginning) if (prologGenerated) { return;//from w w w . jav a 2s .c om } prologGenerated = true; // try...catch around the whole body. Should be added last (after all // other try..catch blocks). // Actually, we are making an assumption that reader will emit // visitTryCatchBlock BEFORE generating any bytecode. // We cannot call visitTryCatchBlock at the end since it should // be called before all its labels are visited (which we generate // in this block). mv.visitTryCatchBlock(tryLabel, dispatchLabel, catchLabel, null); // Goto to table switch dispatcher mv.visitJumpInsn(Opcodes.GOTO, dispatchLabel); // Wrap the whole original body with try...catch that will invoke // cont.setException(Throwable t) mv.visitLabel(tryLabel); // Restore the frame as it was before changing method arguments Type[] locs = info.entryLocals; Object[] frame = new Object[info.isStatic() ? locs.length : locs.length + 1]; // Frame if (!info.isStatic()) { frame[0] = info.owner; } int off = info.isStatic() ? 0 : 1; for (int i = 0; i < locs.length; ++i) { frame[off + i] = Frames.toFrameType(locs[i]); } mv.visitFrame(Opcodes.F_FULL, frame.length, frame, 0, new Object[0]); Label label = new Label(); dispatchTable.add(label); mv.visitLabel(label); if (!info.isStatic()) { locals.add(Type.getObjectType(info.owner)); } Collections.addAll(locals, locs); // Restore the original method arguments // argX = state.varX String[] names = info.entryLocalsVars; for (int i = 0; i < info.entryLocals.length; ++i) { // We go directly to target, introduced var used target.visitVarInsn(Opcodes.ALOAD, info.isStatic() ? 0 : 1); mv.visitFieldInsn(Opcodes.GETFIELD, info.stateClassName, names[i], info.entryLocals[i].getDescriptor()); mv.visitVarInsn(info.entryLocals[i].getOpcode(Opcodes.ISTORE), info.isStatic() ? i : i + 1); } }