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 interfaceDispatchWriter.DispatchTargetDispatch target implementation writer.static classDispatchWriter.FieldGetDispatchTargetField get dispatch target.static classDispatchWriter.FieldSetDispatchTargetField set dispatch target.static classDispatchWriter.InterceptableMethodDispatchTargetInterceptable method invocation dispatch target.static classDispatchWriter.MethodDispatchTargetMethod 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)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaccept(ClassWriterOutputVisitor classWriterOutputVisitor)Accept a ClassWriterOutputVisitor to write this writer to disk.intaddDispatchTarget(DispatchWriter.DispatchTarget dispatchTarget)Adds new custom dispatch target.intaddGetField(FieldElement beanField)Adds new get field dispatch target.intaddInterceptedMethod(TypedElement declaringType, MethodElement methodElement, java.lang.String interceptedProxyClassName, java.lang.String interceptedProxyBridgeMethodName)Adds new interceptable method dispatch target.intaddMethod(TypedElement declaringType, MethodElement methodElement)Adds new method dispatch target.intaddMethod(TypedElement declaringType, MethodElement methodElement, boolean useOneDispatch)Adds new method dispatch target.intaddSetField(FieldElement beanField)Adds new set field dispatch target.voidbuildDispatchMethod(org.objectweb.asm.ClassWriter classWriter)Build dispatch method if needed.voidbuildDispatchOneMethod(org.objectweb.asm.ClassWriter classWriter)Build dispatch one method if needed.voidbuildGetTargetMethodByIndex(org.objectweb.asm.ClassWriter classWriter)Build get target method by index method if needed.java.util.List<DispatchWriter.DispatchTarget>getDispatchTargets()booleanisHasInterceptedMethod()static voidpushTypeUtilsGetRequiredMethod(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:ClassOutputWriterAccept a ClassWriterOutputVisitor to write this writer to disk.- Specified by:
acceptin 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
-
-