@Override public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) { return new InsnNode(opcode).cloneAnnotations(this); } }
@Override public void visitInsn(final int opcode) { instructions.add(new InsnNode(opcode)); }
public static InsnList getBoxInsnList(Class<?> primitiveType, InsnList loadPrimtiveInsnNodeList) { if (!primitiveType.isPrimitive()) { return loadPrimtiveInsnNodeList; } ExceptionUtil.mustNotBeEqualToValue("primitiveType", primitiveType, void.class); Class<?> clazz = ClassInfo.box(primitiveType); String internalName = org.babyfish.org.objectweb.asm.Type.getInternalName(clazz); InsnList insnList = new InsnList(); insnList.add(new TypeInsnNode(Opcodes.NEW, internalName)); insnList.add(new InsnNode(Opcodes.DUP)); insnList.add(loadPrimtiveInsnNodeList); insnList.add( new MethodInsnNode( Opcodes.INVOKESPECIAL, internalName, "<init>", '(' + getDescriptor(primitiveType) + ")V", false)); return insnList; }
newInstructions.add(new InsnNode(ACONST_NULL)); newInstructions.add(new JumpInsnNode(GOTO, startlbl)); newInstructions.add(newinst.returnLabel);
return (N)new InsnNode(abstractInsnNode.getOpcode());
retval = true; instractions.add(new InsnNode(Opcodes.RETURN)); newMethodNode.instructions = instractions; newClassNode.methods.add(newMethodNode);
"(Ljava/lang/String;)Ljava/lang/Class;", false)); tmpInstructions.add(new InsnNode(Opcodes.SWAP)); tmpInstructions.add(new MethodInsnNode( Opcodes.INVOKESTATIC,
Type.getDescriptor(Field.class))); if (isStatic) { instructions.add(new InsnNode(Opcodes.ACONST_NULL)); } else { instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); "(Ljava/lang/Object;Ljava/lang/Object;)V", false)); instructions.add(new InsnNode(Opcodes.RETURN)); instructions.add(new InsnNode(Opcodes.POP)); //pop exception instructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(AssertionError.class))); instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new LdcInsnNode("Internal bug: 6")); instructions.add(new MethodInsnNode( "(Ljava/lang/String;)V", false)); instructions.add(new InsnNode(Opcodes.ATHROW));
Type.getDescriptor(Field.class))); if (isStatic) { instructions.add(new InsnNode(Opcodes.ACONST_NULL)); } else { instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); instructions.add(ASM.getUnboxInsnList(originalDesc, true)); instructions.add(new InsnNode(thatTypeCategory.getReturnCode())); instructions.add(new InsnNode(Opcodes.POP)); //pop exception instructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(AssertionError.class))); instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new LdcInsnNode("Internal bug: 5")); instructions.add(new MethodInsnNode( "(Ljava/lang/String;)V", false)); instructions.add(new InsnNode(Opcodes.ATHROW));
if (!methodEntry.isInit()) { if (isStatic) { instructions.add(new InsnNode(Opcodes.ACONST_NULL)); } else { instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); int slot = isStatic || methodEntry.isInit() ? 0 : 1; for (int i = 0; i < parameterTypes.length; i++) { instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new LdcInsnNode(i)); Type parameterType = parameterTypes[i]; TypeCategory typeCategory = TypeCategory.of(parameterType); instructions.add(ASM.getBoxInsnList(parameterType, new VarInsnNode(typeCategory.getLoadCode(), slot))); instructions.add(new InsnNode(Opcodes.AASTORE)); slot += typeCategory.getSlotCount(); instructions.add(new InsnNode(Opcodes.ARETURN)); } else { instructions.add( instructions.add(new InsnNode(returnTypeCategory.getReturnCode())); instructions.add(new InsnNode(Opcodes.POP)); //pop exception instructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(AssertionError.class))); instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new LdcInsnNode("Internal bug: 7")); instructions.add(new MethodInsnNode( "(Ljava/lang/String;)V",
"(Ljava/lang/String;)" + Type.getDescriptor(Field.class), false)); tmpInstructions.add(new InsnNode(Opcodes.DUP)); tmpInstructions.add(new LdcInsnNode(true)); tmpInstructions.add(new MethodInsnNode( tmpInstructions.add(new JumpInsnNode(Opcodes.GOTO, endCatchLabelNode)); tmpInstructions.add(catchNoSuchFieldLabelNode); tmpInstructions.add(new InsnNode(Opcodes.POP)); //pop exception tmpInstructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(AssertionError.class))); tmpInstructions.add(new InsnNode(Opcodes.DUP)); tmpInstructions.add(new LdcInsnNode("Internal bug: 1")); tmpInstructions.add( "(Ljava/lang/String;)V", false)); tmpInstructions.add(new InsnNode(Opcodes.ATHROW)); if (!fieldEntry.ownerVisible) { tmpInstructions.add(catchClassNotFoundLabelNode); tmpInstructions.add(new InsnNode(Opcodes.POP)); //pop exception tmpInstructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(AssertionError.class))); tmpInstructions.add(new InsnNode(Opcodes.DUP)); tmpInstructions.add(new LdcInsnNode("Internal bug: 2")); tmpInstructions.add( "(Ljava/lang/String;)V", false)); tmpInstructions.add(new InsnNode(Opcodes.ATHROW));
if (abstractInsnNode.getOpcode() == Opcodes.ARETURN) { InsnList tmpInstructions = new InsnList(); tmpInstructions.add(new InsnNode(Opcodes.DUP)); tmpInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); tmpInstructions.add(new InsnNode(Opcodes.SWAP)); tmpInstructions.add( new MethodInsnNode( beforeInstructions.add(new InsnNode(Opcodes.DUP)); beforeInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); beforeInstructions.add(new InsnNode(Opcodes.SWAP)); beforeInstructions.add( new FieldInsnNode( Opcodes.NEW, ASM.getInternalName(DistinctLimitQueryLoader.class))); afterInstructions.add(new InsnNode(Opcodes.DUP)); afterInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); afterInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
instructions.add(new InsnNode(Opcodes.RETURN)); instructions.add(useDistinctLabelNode); instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); instructions.add( instructions.add(new InsnNode(Opcodes.DUP)); instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); "()" + ASM.getDescriptor(SelectClause.class), false)); instructions.add(new InsnNode(distinct ? Opcodes.ICONST_1 : Opcodes.ICONST_0)); instructions.add(new MethodInsnNode( Opcodes.INVOKESPECIAL, ASM.getDescriptor(UnlimitedCountLoader.class))); instructions.add(new InsnNode(Opcodes.RETURN));