Class AopProxyWriter

  • All Implemented Interfaces:
    io.micronaut.core.util.Toggleable, io.micronaut.inject.writer.BeanDefinitionVisitor, io.micronaut.inject.writer.ClassOutputWriter, io.micronaut.inject.writer.OriginatingElements, io.micronaut.inject.writer.ProxyingBeanDefinitionVisitor, org.objectweb.asm.Opcodes

    public class AopProxyWriter
    extends io.micronaut.inject.writer.AbstractClassFileWriter
    implements io.micronaut.inject.writer.ProxyingBeanDefinitionVisitor, io.micronaut.core.util.Toggleable
    A class that generates AOP proxy classes at compile time.
    Since:
    1.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String FIELD_BEAN_RESOLUTION_CONTEXT  
      static java.lang.String FIELD_READ_LOCK  
      static java.lang.String FIELD_READ_WRITE_LOCK  
      static java.lang.String FIELD_TARGET  
      static org.objectweb.asm.Type FIELD_TYPE_INTERCEPTORS  
      static java.lang.String FIELD_WRITE_LOCK  
      static int MAX_LOCALS  
      static org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET  
      static org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET_BEAN  
      static org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET_BEAN_WITH_CONTEXT  
      static org.objectweb.asm.commons.Method METHOD_HAS_CACHED_INTERCEPTED_METHOD  
      static org.objectweb.asm.Type TYPE_BEAN_LOCATOR  
      static org.objectweb.asm.Type TYPE_DEFAULT_BEAN_CONTEXT  
      static org.objectweb.asm.Type TYPE_INTERCEPTOR_CHAIN  
      static org.objectweb.asm.Type TYPE_LOCK  
      static org.objectweb.asm.Type TYPE_METHOD_INTERCEPTOR_CHAIN  
      static org.objectweb.asm.Type TYPE_READ_WRITE_LOCK  
      • 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 io.micronaut.inject.writer.BeanDefinitionVisitor

        PROXY_SUFFIX
      • 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
      AopProxyWriter​(io.micronaut.inject.writer.BeanDefinitionWriter parent, io.micronaut.core.value.OptionalValues<java.lang.Boolean> settings, io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder, io.micronaut.inject.visitor.VisitorContext visitorContext, io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
      Constructs a new AopProxyWriter for the given parent BeanDefinitionWriter and starting interceptors types.
      AopProxyWriter​(java.lang.String packageName, java.lang.String className, boolean isInterface, boolean implementInterface, io.micronaut.inject.ast.Element originatingElement, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, io.micronaut.inject.ast.ClassElement[] interfaceTypes, io.micronaut.inject.visitor.VisitorContext visitorContext, io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder, io.micronaut.inject.configuration.ConfigurationMetadata configurationMetadata, io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
      Constructs a new AopProxyWriter for the purposes of writing Introduction advise.
      AopProxyWriter​(java.lang.String packageName, java.lang.String className, boolean isInterface, io.micronaut.inject.ast.Element originatingElement, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, io.micronaut.inject.ast.ClassElement[] interfaceTypes, io.micronaut.inject.visitor.VisitorContext visitorContext, io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder, io.micronaut.inject.configuration.ConfigurationMetadata configurationMetadata, io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
      Constructs a new AopProxyWriter for the purposes of writing Introduction advise.
    • Method Summary

      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      void accept​(io.micronaut.inject.writer.ClassWriterOutputVisitor visitor)
      Write the class to output via a visitor that manages output destination.
      io.micronaut.core.annotation.AnnotationMetadata getAnnotationMetadata()  
      java.lang.String getBeanDefinitionName()  
      java.lang.String getBeanDefinitionReferenceClassName()  
      java.lang.String getBeanSimpleName()  
      java.lang.String getBeanTypeName()  
      java.util.Optional<org.objectweb.asm.Type> getInterceptedType()  
      io.micronaut.inject.ast.Element getOriginatingElement()
      Deprecated.
      java.lang.String getPackageName()  
      org.objectweb.asm.Type getProvidedType()  
      java.lang.String getProxiedBeanDefinitionName()  
      java.lang.String getProxiedTypeName()  
      io.micronaut.inject.ast.ClassElement[] getTypeArguments()  
      boolean isEnabled()  
      boolean isInterface()  
      boolean isProxyTarget()
      Is the target bean being proxied.
      boolean isSingleton()  
      boolean isValidated()  
      boolean requiresMethodProcessing()  
      void setInterceptedType​(java.lang.String typeName)  
      void setRequiresMethodProcessing​(boolean shouldPreProcess)  
      void setValidated​(boolean validated)  
      protected void startClass​(org.objectweb.asm.ClassVisitor classWriter, java.lang.String className, org.objectweb.asm.Type superType)  
      void visitAnnotationMemberPropertyInjectionPoint​(io.micronaut.inject.ast.TypedElement annotationMemberBeanType, java.lang.String annotationMemberProperty, java.lang.String requiredValue, java.lang.String notEqualsValue)  
      void visitAroundMethod​(io.micronaut.inject.ast.TypedElement beanType, io.micronaut.inject.ast.MethodElement methodElement)
      Visit a method that is to be proxied.
      void visitBeanDefinitionConstructor​(io.micronaut.inject.ast.MethodElement constructor, boolean requiresReflection, io.micronaut.inject.visitor.VisitorContext visitorContext)
      Visits a constructor.
      void visitBeanDefinitionEnd()
      Finalizes the proxy.
      void visitBeanDefinitionInterface​(java.lang.Class<? extends io.micronaut.inject.BeanDefinition> interfaceType)  
      void visitBeanFactoryField​(io.micronaut.inject.ast.ClassElement factoryClass, io.micronaut.inject.ast.FieldElement factoryField)  
      void visitBeanFactoryMethod​(io.micronaut.inject.ast.ClassElement factoryClass, io.micronaut.inject.ast.MethodElement factoryMethod)  
      void visitBeanFactoryMethod​(io.micronaut.inject.ast.ClassElement factoryClass, io.micronaut.inject.ast.MethodElement factoryMethod, io.micronaut.inject.ast.ParameterElement[] parameters)  
      void visitConfigBuilderDurationMethod​(java.lang.String prefix, io.micronaut.inject.ast.ClassElement returnType, java.lang.String methodName, java.lang.String propertyPath)  
      void visitConfigBuilderEnd()  
      void visitConfigBuilderField​(io.micronaut.inject.ast.ClassElement type, java.lang.String field, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, io.micronaut.inject.configuration.ConfigurationMetadataBuilder metadataBuilder, boolean isInterface)  
      void visitConfigBuilderMethod​(io.micronaut.inject.ast.ClassElement type, java.lang.String methodName, io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, io.micronaut.inject.configuration.ConfigurationMetadataBuilder metadataBuilder, boolean isInterface)  
      void visitConfigBuilderMethod​(java.lang.String prefix, io.micronaut.inject.ast.ClassElement returnType, java.lang.String methodName, io.micronaut.inject.ast.ClassElement paramType, java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement> generics, java.lang.String propertyPath)  
      void visitDefaultConstructor​(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata, io.micronaut.inject.visitor.VisitorContext visitorContext)  
      int visitExecutableMethod​(io.micronaut.inject.ast.TypedElement declaringBean, io.micronaut.inject.ast.MethodElement methodElement, io.micronaut.inject.visitor.VisitorContext visitorContext)  
      void visitFieldInjectionPoint​(io.micronaut.inject.ast.TypedElement declaringType, io.micronaut.inject.ast.FieldElement fieldType, boolean requiresReflection)  
      void visitFieldValue​(io.micronaut.inject.ast.TypedElement declaringType, io.micronaut.inject.ast.FieldElement fieldType, boolean requiresReflection, boolean isOptional)  
      void visitInterceptorBinding​(io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
      visitInterceptorTypes.
      void visitIntroductionMethod​(io.micronaut.inject.ast.TypedElement declaringBean, io.micronaut.inject.ast.MethodElement methodElement)
      Visit a abstract method that is to be implemented.
      void visitMethodInjectionPoint​(io.micronaut.inject.ast.TypedElement beanType, io.micronaut.inject.ast.MethodElement methodElement, boolean requiresReflection, io.micronaut.inject.visitor.VisitorContext visitorContext)  
      void visitPostConstructMethod​(io.micronaut.inject.ast.TypedElement declaringType, io.micronaut.inject.ast.MethodElement methodElement, boolean requiresReflection, io.micronaut.inject.visitor.VisitorContext visitorContext)  
      void visitPreDestroyMethod​(io.micronaut.inject.ast.TypedElement declaringType, io.micronaut.inject.ast.MethodElement methodElement, boolean requiresReflection, io.micronaut.inject.visitor.VisitorContext visitorContext)  
      void visitSetterValue​(io.micronaut.inject.ast.TypedElement declaringType, io.micronaut.inject.ast.MethodElement methodElement, boolean requiresReflection, boolean isOptional)  
      void visitSuperBeanDefinition​(java.lang.String name)  
      void visitSuperBeanDefinitionFactory​(java.lang.String beanName)  
      void visitTypeArguments​(java.util.Map<java.lang.String,​java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement>> typeArguments)  
      void writeTo​(java.io.File compilationDir)
      Write the proxy to the given compilation directory.
      • 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, 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, startConstructor, startConstructor, startFinalClass, startProtectedMethod, startPublicClass, startPublicFinalClass, startPublicFinalMethodZeroArgs, startPublicMethod, startPublicMethod, startPublicMethodZeroArgs, startService, startService, visitStaticInitializer, writeBooleanMethod, writeClassToDisk, writeClassToDisk
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface io.micronaut.inject.writer.OriginatingElements

        addOriginatingElement, getOriginatingElements
    • Field Detail

      • METHOD_GET_PROXY_TARGET

        public static final org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET
      • METHOD_GET_PROXY_TARGET_BEAN_WITH_CONTEXT

        public static final org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET_BEAN_WITH_CONTEXT
      • METHOD_GET_PROXY_TARGET_BEAN

        public static final org.objectweb.asm.commons.Method METHOD_GET_PROXY_TARGET_BEAN
      • METHOD_HAS_CACHED_INTERCEPTED_METHOD

        public static final org.objectweb.asm.commons.Method METHOD_HAS_CACHED_INTERCEPTED_METHOD
      • FIELD_TYPE_INTERCEPTORS

        public static final org.objectweb.asm.Type FIELD_TYPE_INTERCEPTORS
      • TYPE_INTERCEPTOR_CHAIN

        public static final org.objectweb.asm.Type TYPE_INTERCEPTOR_CHAIN
      • TYPE_METHOD_INTERCEPTOR_CHAIN

        public static final org.objectweb.asm.Type TYPE_METHOD_INTERCEPTOR_CHAIN
      • FIELD_BEAN_RESOLUTION_CONTEXT

        public static final java.lang.String FIELD_BEAN_RESOLUTION_CONTEXT
        See Also:
        Constant Field Values
      • FIELD_READ_WRITE_LOCK

        public static final java.lang.String FIELD_READ_WRITE_LOCK
        See Also:
        Constant Field Values
      • TYPE_READ_WRITE_LOCK

        public static final org.objectweb.asm.Type TYPE_READ_WRITE_LOCK
      • FIELD_WRITE_LOCK

        public static final java.lang.String FIELD_WRITE_LOCK
        See Also:
        Constant Field Values
      • TYPE_LOCK

        public static final org.objectweb.asm.Type TYPE_LOCK
      • TYPE_BEAN_LOCATOR

        public static final org.objectweb.asm.Type TYPE_BEAN_LOCATOR
      • TYPE_DEFAULT_BEAN_CONTEXT

        public static final org.objectweb.asm.Type TYPE_DEFAULT_BEAN_CONTEXT
    • Constructor Detail

      • AopProxyWriter

        public AopProxyWriter​(io.micronaut.inject.writer.BeanDefinitionWriter parent,
                              io.micronaut.core.value.OptionalValues<java.lang.Boolean> settings,
                              io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder,
                              io.micronaut.inject.visitor.VisitorContext visitorContext,
                              io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)

        Constructs a new AopProxyWriter for the given parent BeanDefinitionWriter and starting interceptors types.

        Additional Interceptor types can be added downstream with visitInterceptorBinding(AnnotationValue[]) .

        Parameters:
        parent - The parent BeanDefinitionWriter
        settings - optional setting
        metadataBuilder - The configuration metadata builder
        visitorContext - The visitor context
        interceptorBinding - The interceptor binding of the Interceptor instances to be injected
      • AopProxyWriter

        public AopProxyWriter​(java.lang.String packageName,
                              java.lang.String className,
                              boolean isInterface,
                              io.micronaut.inject.ast.Element originatingElement,
                              io.micronaut.core.annotation.AnnotationMetadata annotationMetadata,
                              io.micronaut.inject.ast.ClassElement[] interfaceTypes,
                              io.micronaut.inject.visitor.VisitorContext visitorContext,
                              io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder,
                              io.micronaut.inject.configuration.ConfigurationMetadata configurationMetadata,
                              io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
        Constructs a new AopProxyWriter for the purposes of writing Introduction advise.
        Parameters:
        packageName - The package name
        className - The class name
        isInterface - Is the target of the advise an interface
        originatingElement - The originating element
        annotationMetadata - The annotation metadata
        interfaceTypes - The additional interfaces to implement
        visitorContext - The visitor context
        metadataBuilder - The configuration metadata builder
        configurationMetadata - The configuration metadata for the class
        interceptorBinding - The interceptor types
      • AopProxyWriter

        public AopProxyWriter​(java.lang.String packageName,
                              java.lang.String className,
                              boolean isInterface,
                              boolean implementInterface,
                              io.micronaut.inject.ast.Element originatingElement,
                              io.micronaut.core.annotation.AnnotationMetadata annotationMetadata,
                              io.micronaut.inject.ast.ClassElement[] interfaceTypes,
                              io.micronaut.inject.visitor.VisitorContext visitorContext,
                              io.micronaut.inject.configuration.ConfigurationMetadataBuilder<?> metadataBuilder,
                              io.micronaut.inject.configuration.ConfigurationMetadata configurationMetadata,
                              io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
        Constructs a new AopProxyWriter for the purposes of writing Introduction advise.
        Parameters:
        packageName - The package name
        className - The class name
        isInterface - Is the target of the advise an interface
        implementInterface - Whether the interface should be implemented. If false the interfaceTypes argument should contain at least one entry
        originatingElement - The originating elements
        annotationMetadata - The annotation metadata
        interfaceTypes - The additional interfaces to implement
        visitorContext - The visitor context
        metadataBuilder - The configuration metadata builder
        configurationMetadata - The configuration metadata for the class
        interceptorBinding - The interceptor binding
    • Method Detail

      • isEnabled

        public boolean isEnabled()
        Specified by:
        isEnabled in interface io.micronaut.core.util.Toggleable
      • isProxyTarget

        public boolean isProxyTarget()
        Is the target bean being proxied.
        Returns:
        True if the target bean is being proxied
      • startClass

        protected void startClass​(org.objectweb.asm.ClassVisitor classWriter,
                                  java.lang.String className,
                                  org.objectweb.asm.Type superType)
        Overrides:
        startClass in class io.micronaut.inject.writer.AbstractClassFileWriter
      • getOriginatingElement

        @Deprecated
        public io.micronaut.inject.ast.Element getOriginatingElement()
        Deprecated.
        Specified by:
        getOriginatingElement in interface io.micronaut.inject.writer.BeanDefinitionVisitor
        Overrides:
        getOriginatingElement in class io.micronaut.inject.writer.AbstractClassFileWriter
      • visitBeanFactoryMethod

        public void visitBeanFactoryMethod​(io.micronaut.inject.ast.ClassElement factoryClass,
                                           io.micronaut.inject.ast.MethodElement factoryMethod)
        Specified by:
        visitBeanFactoryMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitBeanFactoryMethod

        public void visitBeanFactoryMethod​(io.micronaut.inject.ast.ClassElement factoryClass,
                                           io.micronaut.inject.ast.MethodElement factoryMethod,
                                           io.micronaut.inject.ast.ParameterElement[] parameters)
        Specified by:
        visitBeanFactoryMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitBeanFactoryField

        public void visitBeanFactoryField​(io.micronaut.inject.ast.ClassElement factoryClass,
                                          io.micronaut.inject.ast.FieldElement factoryField)
        Specified by:
        visitBeanFactoryField in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • isSingleton

        public boolean isSingleton()
        Specified by:
        isSingleton in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • isInterface

        public boolean isInterface()
        Specified by:
        isInterface in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitBeanDefinitionInterface

        public void visitBeanDefinitionInterface​(java.lang.Class<? extends io.micronaut.inject.BeanDefinition> interfaceType)
        Specified by:
        visitBeanDefinitionInterface in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getBeanTypeName

        public java.lang.String getBeanTypeName()
        Specified by:
        getBeanTypeName in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getProvidedType

        public org.objectweb.asm.Type getProvidedType()
        Specified by:
        getProvidedType in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • setValidated

        public void setValidated​(boolean validated)
        Specified by:
        setValidated in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • setInterceptedType

        public void setInterceptedType​(java.lang.String typeName)
        Specified by:
        setInterceptedType in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getInterceptedType

        public java.util.Optional<org.objectweb.asm.Type> getInterceptedType()
        Specified by:
        getInterceptedType in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • isValidated

        public boolean isValidated()
        Specified by:
        isValidated in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getBeanDefinitionName

        public java.lang.String getBeanDefinitionName()
        Specified by:
        getBeanDefinitionName in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitBeanDefinitionConstructor

        public void visitBeanDefinitionConstructor​(io.micronaut.inject.ast.MethodElement constructor,
                                                   boolean requiresReflection,
                                                   io.micronaut.inject.visitor.VisitorContext visitorContext)
        Visits a constructor.
        Specified by:
        visitBeanDefinitionConstructor in interface io.micronaut.inject.writer.BeanDefinitionVisitor
        Parameters:
        constructor - The constructor
        requiresReflection - Whether reflection is required
        visitorContext - The visitor context
      • visitDefaultConstructor

        public void visitDefaultConstructor​(io.micronaut.core.annotation.AnnotationMetadata annotationMetadata,
                                            io.micronaut.inject.visitor.VisitorContext visitorContext)
        Specified by:
        visitDefaultConstructor in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getBeanDefinitionReferenceClassName

        @NonNull
        public java.lang.String getBeanDefinitionReferenceClassName()
        Specified by:
        getBeanDefinitionReferenceClassName in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitIntroductionMethod

        public void visitIntroductionMethod​(io.micronaut.inject.ast.TypedElement declaringBean,
                                            io.micronaut.inject.ast.MethodElement methodElement)
        Visit a abstract method that is to be implemented.
        Parameters:
        declaringBean - The declaring bean of the method.
        methodElement - The method element
      • visitAroundMethod

        public void visitAroundMethod​(io.micronaut.inject.ast.TypedElement beanType,
                                      io.micronaut.inject.ast.MethodElement methodElement)
        Visit a method that is to be proxied.
        Parameters:
        beanType - The bean type.
        methodElement - The method element
      • visitBeanDefinitionEnd

        public void visitBeanDefinitionEnd()
        Finalizes the proxy. This method should be called before writing the proxy to disk with writeTo(File)
        Specified by:
        visitBeanDefinitionEnd in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • writeTo

        public void writeTo​(java.io.File compilationDir)
                     throws java.io.IOException
        Write the proxy to the given compilation directory.
        Specified by:
        writeTo in interface io.micronaut.inject.writer.BeanDefinitionVisitor
        Overrides:
        writeTo in class io.micronaut.inject.writer.AbstractClassFileWriter
        Parameters:
        compilationDir - The target compilation directory
        Throws:
        java.io.IOException - If an error occurs writing the file
      • getTypeArguments

        @NonNull
        public io.micronaut.inject.ast.ClassElement[] getTypeArguments()
        Specified by:
        getTypeArguments in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • accept

        public void accept​(io.micronaut.inject.writer.ClassWriterOutputVisitor visitor)
                    throws java.io.IOException
        Write the class to output via a visitor that manages output destination.
        Specified by:
        accept in interface io.micronaut.inject.writer.BeanDefinitionVisitor
        Specified by:
        accept in interface io.micronaut.inject.writer.ClassOutputWriter
        Parameters:
        visitor - the writer output visitor
        Throws:
        java.io.IOException - If an error occurs
      • visitSuperBeanDefinition

        public void visitSuperBeanDefinition​(java.lang.String name)
        Specified by:
        visitSuperBeanDefinition in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitSuperBeanDefinitionFactory

        public void visitSuperBeanDefinitionFactory​(java.lang.String beanName)
        Specified by:
        visitSuperBeanDefinitionFactory in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitSetterValue

        public void visitSetterValue​(io.micronaut.inject.ast.TypedElement declaringType,
                                     io.micronaut.inject.ast.MethodElement methodElement,
                                     boolean requiresReflection,
                                     boolean isOptional)
        Specified by:
        visitSetterValue in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitPostConstructMethod

        public void visitPostConstructMethod​(io.micronaut.inject.ast.TypedElement declaringType,
                                             io.micronaut.inject.ast.MethodElement methodElement,
                                             boolean requiresReflection,
                                             io.micronaut.inject.visitor.VisitorContext visitorContext)
        Specified by:
        visitPostConstructMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitPreDestroyMethod

        public void visitPreDestroyMethod​(io.micronaut.inject.ast.TypedElement declaringType,
                                          io.micronaut.inject.ast.MethodElement methodElement,
                                          boolean requiresReflection,
                                          io.micronaut.inject.visitor.VisitorContext visitorContext)
        Specified by:
        visitPreDestroyMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitMethodInjectionPoint

        public void visitMethodInjectionPoint​(io.micronaut.inject.ast.TypedElement beanType,
                                              io.micronaut.inject.ast.MethodElement methodElement,
                                              boolean requiresReflection,
                                              io.micronaut.inject.visitor.VisitorContext visitorContext)
        Specified by:
        visitMethodInjectionPoint in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitExecutableMethod

        public int visitExecutableMethod​(io.micronaut.inject.ast.TypedElement declaringBean,
                                         io.micronaut.inject.ast.MethodElement methodElement,
                                         io.micronaut.inject.visitor.VisitorContext visitorContext)
        Specified by:
        visitExecutableMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitFieldInjectionPoint

        public void visitFieldInjectionPoint​(io.micronaut.inject.ast.TypedElement declaringType,
                                             io.micronaut.inject.ast.FieldElement fieldType,
                                             boolean requiresReflection)
        Specified by:
        visitFieldInjectionPoint in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitAnnotationMemberPropertyInjectionPoint

        public void visitAnnotationMemberPropertyInjectionPoint​(io.micronaut.inject.ast.TypedElement annotationMemberBeanType,
                                                                java.lang.String annotationMemberProperty,
                                                                java.lang.String requiredValue,
                                                                java.lang.String notEqualsValue)
        Specified by:
        visitAnnotationMemberPropertyInjectionPoint in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitFieldValue

        public void visitFieldValue​(io.micronaut.inject.ast.TypedElement declaringType,
                                    io.micronaut.inject.ast.FieldElement fieldType,
                                    boolean requiresReflection,
                                    boolean isOptional)
        Specified by:
        visitFieldValue in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getPackageName

        public java.lang.String getPackageName()
        Specified by:
        getPackageName in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getBeanSimpleName

        public java.lang.String getBeanSimpleName()
        Specified by:
        getBeanSimpleName in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getAnnotationMetadata

        public io.micronaut.core.annotation.AnnotationMetadata getAnnotationMetadata()
        Specified by:
        getAnnotationMetadata in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitConfigBuilderField

        public void visitConfigBuilderField​(io.micronaut.inject.ast.ClassElement type,
                                            java.lang.String field,
                                            io.micronaut.core.annotation.AnnotationMetadata annotationMetadata,
                                            io.micronaut.inject.configuration.ConfigurationMetadataBuilder metadataBuilder,
                                            boolean isInterface)
        Specified by:
        visitConfigBuilderField in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitConfigBuilderMethod

        public void visitConfigBuilderMethod​(io.micronaut.inject.ast.ClassElement type,
                                             java.lang.String methodName,
                                             io.micronaut.core.annotation.AnnotationMetadata annotationMetadata,
                                             io.micronaut.inject.configuration.ConfigurationMetadataBuilder metadataBuilder,
                                             boolean isInterface)
        Specified by:
        visitConfigBuilderMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitConfigBuilderMethod

        public void visitConfigBuilderMethod​(java.lang.String prefix,
                                             io.micronaut.inject.ast.ClassElement returnType,
                                             java.lang.String methodName,
                                             io.micronaut.inject.ast.ClassElement paramType,
                                             java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement> generics,
                                             java.lang.String propertyPath)
        Specified by:
        visitConfigBuilderMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitConfigBuilderDurationMethod

        public void visitConfigBuilderDurationMethod​(java.lang.String prefix,
                                                     io.micronaut.inject.ast.ClassElement returnType,
                                                     java.lang.String methodName,
                                                     java.lang.String propertyPath)
        Specified by:
        visitConfigBuilderDurationMethod in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitConfigBuilderEnd

        public void visitConfigBuilderEnd()
        Specified by:
        visitConfigBuilderEnd in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • setRequiresMethodProcessing

        public void setRequiresMethodProcessing​(boolean shouldPreProcess)
        Specified by:
        setRequiresMethodProcessing in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • visitTypeArguments

        public void visitTypeArguments​(java.util.Map<java.lang.String,​java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement>> typeArguments)
        Specified by:
        visitTypeArguments in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • requiresMethodProcessing

        public boolean requiresMethodProcessing()
        Specified by:
        requiresMethodProcessing in interface io.micronaut.inject.writer.BeanDefinitionVisitor
      • getProxiedTypeName

        public java.lang.String getProxiedTypeName()
        Specified by:
        getProxiedTypeName in interface io.micronaut.inject.writer.ProxyingBeanDefinitionVisitor
      • getProxiedBeanDefinitionName

        public java.lang.String getProxiedBeanDefinitionName()
        Specified by:
        getProxiedBeanDefinitionName in interface io.micronaut.inject.writer.ProxyingBeanDefinitionVisitor
      • visitInterceptorBinding

        public void visitInterceptorBinding​(io.micronaut.core.annotation.AnnotationValue<?>... interceptorBinding)
        visitInterceptorTypes.
        Parameters:
        interceptorBinding - the interceptor binding