public void visitBytecodeSequence(BytecodeSequence bytecodeSequence) { MethodVisitor mv = controller.getMethodVisitor(); List instructions = bytecodeSequence.getInstructions(); int mark = controller.getOperandStack().getStackLength(); for (Iterator iterator = instructions.iterator(); iterator.hasNext();) { Object part = iterator.next(); if (part == EmptyExpression.INSTANCE) { mv.visitInsn(ACONST_NULL); } else if (part instanceof Expression) { ((Expression) part).visit(this); } else if (part instanceof Statement) { Statement stm = (Statement) part; stm.visit(this); mv.visitInsn(ACONST_NULL); } else { BytecodeInstruction runner = (BytecodeInstruction) part; runner.visit(mv); } } controller.getOperandStack().remove(mark-controller.getOperandStack().getStackLength()); }
((BytecodeInstruction)((BytecodeSequence)code).getInstructions().get(0)).visit(mv); } else { visitStdMethod(node, isConstructor, parameters, code);
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence) { List instructions = bytecodeSequence.getInstructions(); for (Iterator iterator = instructions.iterator(); iterator.hasNext();) { Object part = iterator.next(); if (part == EmptyExpression.INSTANCE) { mv.visitInsn(ACONST_NULL); } else if (part instanceof Expression) { visitAndAutoboxBoolean((Expression) part); } else if (part instanceof Statement) { Statement stm = (Statement) part; stm.visit(this); mv.visitInsn(ACONST_NULL); } else { BytecodeInstruction runner = (BytecodeInstruction) part; runner.visit(mv); } } }
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence) { List instructions = bytecodeSequence.getInstructions(); for (Iterator iterator = instructions.iterator(); iterator.hasNext();) { Object part = iterator.next(); if (part == EmptyExpression.INSTANCE) { mv.visitInsn(ACONST_NULL); } else if (part instanceof Expression) { visitAndAutoboxBoolean((Expression) part); } else if (part instanceof Statement) { Statement stm = (Statement) part; stm.visit(this); mv.visitInsn(ACONST_NULL); } else { BytecodeInstruction runner = (BytecodeInstruction) part; runner.visit(mv); } } }
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence) { List instructions = bytecodeSequence.getInstructions(); for (Iterator iterator = instructions.iterator(); iterator.hasNext();) { Object part = iterator.next(); if (part == EmptyExpression.INSTANCE) { mv.visitInsn(ACONST_NULL); } else if (part instanceof Expression) { visitAndAutoboxBoolean((Expression) part); } else if (part instanceof Statement) { Statement stm = (Statement) part; stm.visit(this); mv.visitInsn(ACONST_NULL); } else { BytecodeInstruction runner = (BytecodeInstruction) part; runner.visit(mv); } } }
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence) { MethodVisitor mv = controller.getMethodVisitor(); List instructions = bytecodeSequence.getInstructions(); int mark = controller.getOperandStack().getStackLength(); for (Iterator iterator = instructions.iterator(); iterator.hasNext();) { Object part = iterator.next(); if (part == EmptyExpression.INSTANCE) { mv.visitInsn(ACONST_NULL); } else if (part instanceof Expression) { ((Expression) part).visit(this); } else if (part instanceof Statement) { Statement stm = (Statement) part; stm.visit(this); mv.visitInsn(ACONST_NULL); } else { BytecodeInstruction runner = (BytecodeInstruction) part; runner.visit(mv); } } controller.getOperandStack().remove(mark-controller.getOperandStack().getStackLength()); }
protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) { Parameter[] parameters = node.getParameters(); String methodType = BytecodeHelper.getMethodDescriptor(node.getReturnType(), parameters); String signature = BytecodeHelper.getGenericsMethodSignature(node); int modifiers = node.getModifiers(); if (isVargs(node.getParameters())) modifiers |= Opcodes.ACC_VARARGS; mv = cv.visitMethod(modifiers, node.getName(), methodType, signature, buildExceptions(node.getExceptions())); mv = new MyMethodAdapter(); visitAnnotations(node, mv); for (int i = 0; i < parameters.length; i++) { visitParameterAnnotations(parameters[i], i, mv); } helper = new BytecodeHelper(mv); if (classNode.isAnnotationDefinition()) { visitAnnotationDefault(node, mv); } else if (!node.isAbstract()) { Statement code = node.getCode(); // fast path for getter/setters etc. if (code instanceof BytecodeSequence && ((BytecodeSequence)code).getInstructions().size() == 1 && ((BytecodeSequence)code).getInstructions().get(0) instanceof BytecodeInstruction) { ((BytecodeInstruction)((BytecodeSequence)code).getInstructions().get(0)).visit(mv); } else{ visitStdMethod(node, isConstructor, parameters, code); } mv.visitMaxs(0, 0); } mv.visitEnd(); }
protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) { lineNumber = -1; columnNumber = -1; Parameter[] parameters = node.getParameters(); String methodType = BytecodeHelper.getMethodDescriptor(node.getReturnType(), parameters); String signature = BytecodeHelper.getGenericsMethodSignature(node); int modifiers = node.getModifiers(); if (isVargs(node.getParameters())) modifiers |= Opcodes.ACC_VARARGS; mv = cv.visitMethod(modifiers, node.getName(), methodType, signature, buildExceptions(node.getExceptions())); mv = new MyMethodAdapter(); visitAnnotations(node, mv); for (int i = 0; i < parameters.length; i++) { visitParameterAnnotations(parameters[i], i, mv); } helper = new BytecodeHelper(mv); if (classNode.isAnnotationDefinition()) { visitAnnotationDefault(node, mv); } else if (!node.isAbstract()) { Statement code = node.getCode(); // fast path for getter/setters etc. if (code instanceof BytecodeSequence && ((BytecodeSequence)code).getInstructions().size() == 1 && ((BytecodeSequence)code).getInstructions().get(0) instanceof BytecodeInstruction) { ((BytecodeInstruction)((BytecodeSequence)code).getInstructions().get(0)).visit(mv); } else{ visitStdMethod(node, isConstructor, parameters, code); } mv.visitMaxs(0, 0); } mv.visitEnd(); }
protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) { controller.resetLineNumber(); Parameter[] parameters = node.getParameters(); String methodType = BytecodeHelper.getMethodDescriptor(node.getReturnType(), parameters); String signature = BytecodeHelper.getGenericsMethodSignature(node); int modifiers = node.getModifiers(); if (isVargs(node.getParameters())) modifiers |= Opcodes.ACC_VARARGS; MethodVisitor mv = cv.visitMethod(modifiers, node.getName(), methodType, signature, buildExceptions(node.getExceptions())); controller.setMethodVisitor(mv); visitAnnotations(node, mv); for (int i = 0; i < parameters.length; i++) { visitParameterAnnotations(parameters[i], i, mv); } if (controller.getClassNode().isAnnotationDefinition() && !node.isStaticConstructor()) { visitAnnotationDefault(node, mv); } else if (!node.isAbstract()) { Statement code = node.getCode(); mv.visitCode(); // fast path for getter/setters etc. if (code instanceof BytecodeSequence && ((BytecodeSequence)code).getInstructions().size() == 1 && ((BytecodeSequence)code).getInstructions().get(0) instanceof BytecodeInstruction) { ((BytecodeInstruction)((BytecodeSequence)code).getInstructions().get(0)).visit(mv); } else { visitStdMethod(node, isConstructor, parameters, code); } // we use this NOP to have a valid jump target for the various labels //mv.visitInsn(NOP); mv.visitMaxs(0, 0); } mv.visitEnd(); }