Package io.micronaut.inject.writer
Class DispatchWriter
- java.lang.Object
-
- io.micronaut.inject.writer.AbstractClassFileWriter
-
- io.micronaut.inject.writer.DispatchWriter
-
- All Implemented Interfaces:
ClassOutputWriter
,OriginatingElements
,org.objectweb.asm.Opcodes
@Internal public final class DispatchWriter extends AbstractClassFileWriter implements org.objectweb.asm.Opcodes
Switch based dispatch writer.- Since:
- 3.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
DispatchWriter.DispatchTarget
Dispatch target implementation writer.static class
DispatchWriter.FieldGetDispatchTarget
Field get dispatch target.static class
DispatchWriter.FieldSetDispatchTarget
Field set dispatch target.static class
DispatchWriter.InterceptableMethodDispatchTarget
Interceptable method invocation dispatch target.static class
DispatchWriter.MethodDispatchTarget
Method invocation dispatch target.
-
Field Summary
-
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, V9
-
-
Constructor Summary
Constructors Constructor Description DispatchWriter(org.objectweb.asm.Type thisType)
DispatchWriter(org.objectweb.asm.Type thisType, org.objectweb.asm.Type dispatchSuperType)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
accept(ClassWriterOutputVisitor classWriterOutputVisitor)
Accept a ClassWriterOutputVisitor to write this writer to disk.int
addDispatchTarget(DispatchWriter.DispatchTarget dispatchTarget)
Adds new custom dispatch target.int
addGetField(FieldElement beanField)
Adds new get field dispatch target.int
addInterceptedMethod(TypedElement declaringType, MethodElement methodElement, java.lang.String interceptedProxyClassName, java.lang.String interceptedProxyBridgeMethodName)
Adds new interceptable method dispatch target.int
addMethod(TypedElement declaringType, MethodElement methodElement)
Adds new method dispatch target.int
addMethod(TypedElement declaringType, MethodElement methodElement, boolean useOneDispatch)
Adds new method dispatch target.int
addSetField(FieldElement beanField)
Adds new set field dispatch target.void
buildDispatchMethod(org.objectweb.asm.ClassWriter classWriter)
Build dispatch method if needed.void
buildDispatchOneMethod(org.objectweb.asm.ClassWriter classWriter)
Build dispatch one method if needed.void
buildGetTargetMethodByIndex(org.objectweb.asm.ClassWriter classWriter)
Build get target method by index method if needed.java.util.List<DispatchWriter.DispatchTarget>
getDispatchTargets()
boolean
isHasInterceptedMethod()
static void
pushTypeUtilsGetRequiredMethod(org.objectweb.asm.commons.GeneratorAdapter builder, org.objectweb.asm.Type declaringTypeObject, MethodElement methodElement)
-
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
-
-
-
-
Method Detail
-
addSetField
public int addSetField(FieldElement beanField)
Adds new set field dispatch target.- Parameters:
beanField
- The field- Returns:
- the target index
-
addGetField
public int addGetField(FieldElement beanField)
Adds new get field dispatch target.- Parameters:
beanField
- The field- Returns:
- the target index
-
addMethod
public int addMethod(TypedElement declaringType, MethodElement methodElement)
Adds new method dispatch target.- Parameters:
declaringType
- The declaring typemethodElement
- The method element- Returns:
- the target index
-
addMethod
public int addMethod(TypedElement declaringType, MethodElement methodElement, boolean useOneDispatch)
Adds new method dispatch target.- Parameters:
declaringType
- The declaring typemethodElement
- The method elementuseOneDispatch
- If method should be dispatched using "dispatchOne"- Returns:
- the target index
-
addInterceptedMethod
public int addInterceptedMethod(TypedElement declaringType, MethodElement methodElement, java.lang.String interceptedProxyClassName, java.lang.String interceptedProxyBridgeMethodName)
Adds new interceptable method dispatch target.- Parameters:
declaringType
- The declaring typemethodElement
- The method elementinterceptedProxyClassName
- The interceptedProxyClassNameinterceptedProxyBridgeMethodName
- The interceptedProxyBridgeMethodName- Returns:
- the target index
-
addDispatchTarget
public int addDispatchTarget(DispatchWriter.DispatchTarget dispatchTarget)
Adds new custom dispatch target.- Parameters:
dispatchTarget
- The dispatch target implementation- Returns:
- the target index
-
buildDispatchMethod
public void buildDispatchMethod(org.objectweb.asm.ClassWriter classWriter)
Build dispatch method if needed.- Parameters:
classWriter
- The classwriter
-
buildDispatchOneMethod
public void buildDispatchOneMethod(org.objectweb.asm.ClassWriter classWriter)
Build dispatch one method if needed.- Parameters:
classWriter
- The classwriter
-
buildGetTargetMethodByIndex
public void buildGetTargetMethodByIndex(org.objectweb.asm.ClassWriter classWriter)
Build get target method by index method if needed.- Parameters:
classWriter
- The classwriter
-
pushTypeUtilsGetRequiredMethod
public static void pushTypeUtilsGetRequiredMethod(org.objectweb.asm.commons.GeneratorAdapter builder, org.objectweb.asm.Type declaringTypeObject, MethodElement methodElement)
-
accept
public void accept(ClassWriterOutputVisitor classWriterOutputVisitor) throws java.io.IOException
Description copied from interface:ClassOutputWriter
Accept a ClassWriterOutputVisitor to write this writer to disk.- Specified by:
accept
in interfaceClassOutputWriter
- Parameters:
classWriterOutputVisitor
- TheClassWriterOutputVisitor
- Throws:
java.io.IOException
- if there is an error writing to disk
-
getDispatchTargets
public java.util.List<DispatchWriter.DispatchTarget> getDispatchTargets()
- Returns:
- all added dispatch targets
-
isHasInterceptedMethod
public boolean isHasInterceptedMethod()
- Returns:
- if intercepted method dispatch have been added
-
-