Package io.micronaut.inject.writer
Class ExecutableMethodWriter
java.lang.Object
io.micronaut.inject.writer.AbstractClassFileWriter
io.micronaut.inject.writer.AbstractAnnotationMetadataWriter
io.micronaut.inject.writer.ExecutableMethodWriter
- All Implemented Interfaces:
ClassOutputWriter
,OriginatingElements
,org.objectweb.asm.Opcodes
@Internal
public class ExecutableMethodWriter
extends AbstractAnnotationMetadataWriter
implements org.objectweb.asm.Opcodes
Writes out
ExecutableMethod
implementations.- Since:
- 1.0
- Author:
- Graeme Rocher
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final org.objectweb.asm.commons.Method
static final org.objectweb.asm.commons.Method
protected static final org.objectweb.asm.commons.Method
protected static final org.objectweb.asm.commons.Method
protected final org.objectweb.asm.Type
Fields inherited from class io.micronaut.inject.writer.AbstractAnnotationMetadataWriter
annotationMetadata, defaults, FIELD_ANNOTATION_METADATA, FIELD_EMPTY_METADATA, loadTypeMethods, targetClassType
Fields inherited from class io.micronaut.inject.writer.AbstractClassFileWriter
ARRAY_PATTERN, CONSTRUCTOR_NAME, DEFAULT_MAX_STACK, DESCRIPTOR_DEFAULT_CONSTRUCTOR, METHOD_CREATE_ARGUMENT_SIMPLE, METHOD_CREATE_TYPE_VARIABLE_SIMPLE, METHOD_DEFAULT_CONSTRUCTOR, METHOD_GENERIC_PLACEHOLDER_SIMPLE, originatingElements, TYPE_ARGUMENT, TYPE_ARGUMENT_ARRAY, TYPE_CLASS, TYPE_GENERATED, TYPE_OBJECT, ZERO_ARGUMENTS_CONSTANT
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V9
-
Constructor Summary
ConstructorsConstructorDescriptionExecutableMethodWriter
(String methodClassName, boolean isInterface, boolean isAbstract, boolean isDefault, boolean isSuspend, OriginatingElements originatingElements, AnnotationMetadata annotationMetadata, String interceptedProxyClassName, String interceptedProxyBridgeMethodName) -
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(ClassWriterOutputVisitor classWriterOutputVisitor) Accept a ClassWriterOutputVisitor to write this writer to disk.protected final org.objectweb.asm.commons.GeneratorAdapter
beginAnnotationMetadataMethod
(org.objectweb.asm.ClassWriter classWriter) Returns the generator adaptor for the method that resolves the annotation metadata.protected void
buildInvokeMethod
(org.objectweb.asm.Type declaringTypeObject, String methodName, ClassElement returnType, Collection<ParameterElement> argumentTypes, org.objectweb.asm.commons.GeneratorAdapter invokeMethodVisitor) boolean
boolean
boolean
boolean
boolean
void
visitMethod
(TypedElement declaringType, MethodElement methodElement) Write the method.Methods inherited from class io.micronaut.inject.writer.AbstractAnnotationMetadataWriter
initializeAnnotationMetadata, writeAnnotationMetadataStaticInitializer, writeAnnotationMetadataStaticInitializer, writeGetAnnotationMetadataMethod
Methods inherited from class io.micronaut.inject.writer.AbstractClassFileWriter
addOriginatingElement, buildArgument, buildArgument, buildArgumentWithGenerics, buildArgumentWithGenerics, generateServiceDescriptor, getClassFileName, getConstructorDescriptor, getConstructorDescriptor, getConstructorDescriptor, getInternalName, getInternalNameForCast, getInternalNameForCast, getInternalNameForCast, getMethodDescriptor, getMethodDescriptor, getMethodDescriptor, getMethodDescriptor, getMethodDescriptorForReturnType, getMethodSignature, getObjectType, getOriginatingElement, getOriginatingElements, getTypeDescriptor, getTypeDescriptor, getTypeDescriptor, getTypeDescriptor, getTypeReference, getTypeReferenceForName, getTypes, implementInterceptedTypeMethod, invokeConstructor, invokeInterfaceStaticMethod, invokeMethod, newClassWriterOutputVisitor, pushBoxPrimitiveIfNecessary, pushBoxPrimitiveIfNecessary, pushBoxPrimitiveIfNecessary, pushBuildArgumentsForMethod, pushCastToType, pushCastToType, pushCastToType, pushCreateArgument, pushMethodNameAndTypesArguments, pushNewArray, pushNewArray, pushNewInstance, pushReturnTypeArgument, pushReturnValue, pushStoreInArray, pushStoreInArray, pushStoreStringInArray, pushStoreTypeInArray, pushStringMapOf, pushTypeArgumentElements, returnVoid, startClass, startClass, startConstructor, startConstructor, startFinalClass, startProtectedMethod, startPublicClass, startPublicFinalClass, startPublicFinalMethodZeroArgs, startPublicMethod, startPublicMethod, startPublicMethodZeroArgs, startService, startService, visitStaticInitializer, writeBooleanMethod, writeClassToDisk, writeClassToDisk, writeTo
-
Field Details
-
METHOD_INVOKE_INTERNAL
public static final org.objectweb.asm.commons.Method METHOD_INVOKE_INTERNAL -
METHOD_IS_ABSTRACT
protected static final org.objectweb.asm.commons.Method METHOD_IS_ABSTRACT -
METHOD_IS_SUSPEND
protected static final org.objectweb.asm.commons.Method METHOD_IS_SUSPEND -
METHOD_GET_TARGET
protected static final org.objectweb.asm.commons.Method METHOD_GET_TARGET -
methodType
protected final org.objectweb.asm.Type methodType
-
-
Constructor Details
-
ExecutableMethodWriter
public ExecutableMethodWriter(String methodClassName, boolean isInterface, boolean isAbstract, boolean isDefault, boolean isSuspend, OriginatingElements originatingElements, AnnotationMetadata annotationMetadata, String interceptedProxyClassName, String interceptedProxyBridgeMethodName) - Parameters:
methodClassName
- The method class nameisInterface
- Whether is an interfaceisAbstract
- Whether the method is abstractisDefault
- Whether the method is a default methodisSuspend
- Whether the method is Kotlin suspend functionoriginatingElements
- The originating elementsannotationMetadata
- The annotation metadatainterceptedProxyClassName
- The intercepted proxy class nameinterceptedProxyBridgeMethodName
- The intercepted proxy bridge method name
-
-
Method Details
-
isSupportsInterceptedProxy
public boolean isSupportsInterceptedProxy()- Returns:
- Is supports intercepted proxy.
-
isAbstract
public boolean isAbstract()- Returns:
- Is the method abstract.
-
isInterface
public boolean isInterface()- Returns:
- Is the method in an interface.
-
isDefault
public boolean isDefault()- Returns:
- Is the method a default method.
-
isSuspend
public boolean isSuspend()- Returns:
- Is the method suspend.
-
getClassName
- Returns:
- The class name
-
getInternalName
- Returns:
- The internal name
-
visitMethod
Write the method.- Parameters:
declaringType
- The declaring typemethodElement
- The method element
-
accept
Description copied from interface:ClassOutputWriter
Accept a ClassWriterOutputVisitor to write this writer to disk.- Specified by:
accept
in interfaceClassOutputWriter
- Parameters:
classWriterOutputVisitor
- TheClassWriterOutputVisitor
- Throws:
IOException
- if there is an error writing to disk
-
beginAnnotationMetadataMethod
@NonNull protected final org.objectweb.asm.commons.GeneratorAdapter beginAnnotationMetadataMethod(org.objectweb.asm.ClassWriter classWriter) Description copied from class:AbstractAnnotationMetadataWriter
Returns the generator adaptor for the method that resolves the annotation metadata.- Overrides:
beginAnnotationMetadataMethod
in classAbstractAnnotationMetadataWriter
- Parameters:
classWriter
- The class writer- Returns:
- The generator adapter
-
buildInvokeMethod
protected void buildInvokeMethod(org.objectweb.asm.Type declaringTypeObject, String methodName, ClassElement returnType, Collection<ParameterElement> argumentTypes, org.objectweb.asm.commons.GeneratorAdapter invokeMethodVisitor) - Parameters:
declaringTypeObject
- The declaring object typemethodName
- The method namereturnType
- The return typeargumentTypes
- The argument typesinvokeMethodVisitor
- The invoke method visitor
-