/** * {@inheritDoc} */ public void emitFrame(MethodVisitor methodVisitor) { methodVisitor.visitFrame(Opcodes.F_NEW, EMPTY.length, EMPTY, EMPTY.length, EMPTY); } }
@Override protected void onExitAdviceReturn() { methodVisitor.visitVarInsn(Opcodes.ALOAD, argumentHandler.thrown()); Label endOfHandler = new Label(); methodVisitor.visitJumpInsn(Opcodes.IFNULL, endOfHandler); methodVisitor.visitVarInsn(Opcodes.ALOAD, argumentHandler.thrown()); methodVisitor.visitInsn(Opcodes.ATHROW); methodVisitor.visitLabel(endOfHandler); stackMapFrameHandler.injectPostCompletionFrame(methodVisitor); } }
/** {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Context implementationContext) { methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/Arrays", "toString", "([I)Ljava/lang/String;", false); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); return new Size(0, 0); } },
/** {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Context implementationContext) { methodVisitor.visitInsn(Opcodes.DUP2); methodVisitor.visitIntInsn(Opcodes.BIPUSH, 32); methodVisitor.visitInsn(Opcodes.LUSHR); methodVisitor.visitInsn(Opcodes.LXOR); methodVisitor.visitInsn(Opcodes.L2I); return new Size(-1, 3); } },
@Override protected void onStart() { mv.visitJumpInsn(Opcodes.GOTO, appended); mv.visitLabel(original); frameWriter.emitFrame(mv); }
int writerFlags, int readerFlags) { methodVisitor.visitCode(); methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, UNSAFE_CLASS, "getUnsafe", "()L" + UNSAFE_CLASS + ";", false); methodVisitor.visitVarInsn(Opcodes.ASTORE, 6); methodVisitor.visitVarInsn(Opcodes.ALOAD, 6); methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/invoke/MethodHandles$Lookup", "lookupClass", "()Ljava/lang/Class;", false); methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/ClassLoader", "getSystemClassLoader", "()Ljava/lang/ClassLoader;", false); methodVisitor.visitLdcInsn("net.bytebuddy.agent.builder.LambdaFactory"); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/ClassLoader", "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;", false); methodVisitor.visitLdcInsn("make"); methodVisitor.visitIntInsn(Opcodes.BIPUSH, 9); methodVisitor.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Class"); methodVisitor.visitInsn(Opcodes.DUP); methodVisitor.visitInsn(Opcodes.ICONST_0); methodVisitor.visitLdcInsn(Type.getType("Ljava/lang/Object;")); methodVisitor.visitInsn(Opcodes.AASTORE); methodVisitor.visitInsn(Opcodes.DUP); methodVisitor.visitInsn(Opcodes.ICONST_1); methodVisitor.visitLdcInsn(Type.getType("Ljava/lang/String;")); methodVisitor.visitInsn(Opcodes.AASTORE); methodVisitor.visitInsn(Opcodes.DUP); methodVisitor.visitInsn(Opcodes.ICONST_2); methodVisitor.visitLdcInsn(Type.getType("Ljava/lang/Object;")); methodVisitor.visitInsn(Opcodes.AASTORE); methodVisitor.visitInsn(Opcodes.DUP); methodVisitor.visitInsn(Opcodes.ICONST_3); methodVisitor.visitLdcInsn(Type.getType("Ljava/lang/Object;"));
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Context implementationContext) { Label label = new Label(); methodVisitor.visitJumpInsn(jumpCondition, label); methodVisitor.visitInsn(value); methodVisitor.visitInsn(Opcodes.IRETURN); methodVisitor.visitLabel(label); if (implementationContext.getClassFileVersion().isAtLeast(ClassFileVersion.JAVA_V6)) { methodVisitor.visitFrame(Opcodes.F_SAME, EMPTY.length, EMPTY, EMPTY.length, EMPTY); } return new Size(-1, 1); } }
/** * {@inheritDoc} */ public int apply(MethodVisitor methodVisitor, int offset) { if (instrumentedMethod.isConstructor()) { throw new IllegalStateException("Cannot skip code execution from constructor: " + instrumentedMethod); } methodVisitor.visitVarInsn(Opcodes.ALOAD, offset); methodVisitor.visitTypeInsn(Opcodes.INSTANCEOF, typeDescription.getInternalName()); Label noSkip = new Label(); methodVisitor.visitJumpInsn(Opcodes.IFEQ, noSkip); relocation.apply(methodVisitor); methodVisitor.visitLabel(noSkip); return NO_REQUIRED_SIZE; } }
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, REFLECTION_FACTORY_INTERNAL_NAME, GET_REFLECTION_FACTORY_METHOD_NAME, GET_REFLECTION_FACTORY_METHOD_DESCRIPTOR, false); methodVisitor.visitLdcInsn(Type.getType(instrumentedType.getDescriptor())); methodVisitor.visitLdcInsn(Type.getType(JAVA_LANG_OBJECT_DESCRIPTOR)); methodVisitor.visitInsn(Opcodes.ICONST_0); methodVisitor.visitTypeInsn(Opcodes.ANEWARRAY, JAVA_LANG_CLASS_INTERNAL_NAME); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JAVA_LANG_CLASS_INTERNAL_NAME, GET_DECLARED_CONSTRUCTOR_METHOD_NAME, GET_DECLARED_CONSTRUCTOR_METHOD_DESCRIPTOR, false); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, REFLECTION_FACTORY_INTERNAL_NAME, NEW_CONSTRUCTOR_FOR_SERIALIZATION_METHOD_NAME, NEW_CONSTRUCTOR_FOR_SERIALIZATION_METHOD_DESCRIPTOR, false); methodVisitor.visitInsn(Opcodes.ICONST_0); methodVisitor.visitTypeInsn(Opcodes.ANEWARRAY, JAVA_LANG_OBJECT_INTERNAL_NAME); methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JAVA_LANG_CONSTRUCTOR_INTERNAL_NAME, NEW_INSTANCE_METHOD_NAME, NEW_INSTANCE_METHOD_DESCRIPTOR, false); methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, instrumentedType.getInternalName()); methodVisitor.visitInsn(Opcodes.ARETURN); return new Size(4, 0);
/** * {@inheritDoc} */ public int apply(MethodVisitor methodVisitor, int offset) { if (instrumentedMethod.isConstructor()) { throw new IllegalStateException("Cannot skip code execution from constructor: " + instrumentedMethod); } methodVisitor.visitVarInsn(load, offset); convertValue(methodVisitor); Label noSkip = new Label(); methodVisitor.visitJumpInsn(inverted ? nonDefaultJump : defaultJump, noSkip); relocation.apply(methodVisitor); methodVisitor.visitLabel(noSkip); return requiredSize; } }
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Implementation.Context implementationContext) { methodVisitor.visitInsn(opcode); return size; } }
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Context implementationContext) { methodVisitor.visitVarInsn(Opcodes.ASTORE, instrumentedMethod.getStackSize()); methodVisitor.visitVarInsn(Opcodes.ALOAD, instrumentedMethod.getStackSize()); methodVisitor.visitJumpInsn(Opcodes.IFNULL, label); methodVisitor.visitVarInsn(Opcodes.ALOAD, instrumentedMethod.getStackSize()); return new Size(0, 0); } }
/** * {@inheritDoc} */ public void onStart(MethodVisitor methodVisitor) { methodVisitor.visitLabel(startOfMethod); }
/** * Visits a jump instruction. * * @param opcode The visited opcode. * @param label The visited label. */ protected void onVisitJumpInsn(int opcode, Label label) { super.visitJumpInsn(opcode, label); }
methodVisitor.visitParameter( readUTF8(currentParameterOffset, charBuffer), readUnsignedShort(currentParameterOffset + 2)); AnnotationVisitor annotationVisitor = methodVisitor.visitAnnotationDefault(); readElementValue(annotationVisitor, annotationDefaultOffset, null, charBuffer); if (annotationVisitor != null) { methodVisitor.visitAnnotation(annotationDescriptor, /* visible = */ true), currentAnnotationOffset, /* named = */ true, methodVisitor.visitAnnotation(annotationDescriptor, /* visible = */ false), currentAnnotationOffset, /* named = */ true, methodVisitor.visitTypeAnnotation( context.currentTypeAnnotationTarget, context.currentTypeAnnotationTargetPath, methodVisitor.visitTypeAnnotation( context.currentTypeAnnotationTarget, context.currentTypeAnnotationTargetPath, methodVisitor.visitAttribute(attributes); attributes = nextAttribute; methodVisitor.visitCode(); readCode(methodVisitor, context, codeOffset);
/** * Visits an variable instruction. * * @param opcode The visited opcode. * @param offset The visited offset. */ protected void onVisitVarInsn(int opcode, int offset) { super.visitVarInsn(opcode, offset); }
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Context implementationContext) { methodVisitor.visitLabel(label); if (implementationContext.getClassFileVersion().isAtLeast(ClassFileVersion.JAVA_V6)) { methodVisitor.visitFrame(Opcodes.F_SAME1, EMPTY.length, EMPTY, INTEGER.length, INTEGER); } return new Size(0, 0); } }
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Implementation.Context implementationContext) { methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, fieldOwnerInternalName, PRIMITIVE_TYPE_FIELD, CLASS_TYPE_INTERNAL_NAME); return SIZE; }
/** * {@inheritDoc} */ public Size apply(MethodVisitor methodVisitor, Implementation.Context implementationContext) { methodVisitor.visitLdcInsn(value); return SIZE; } }