Search in sources :

Example 16 with MethodElement

use of io.micronaut.inject.ast.MethodElement in project micronaut-core by micronaut-projects.

the class BeanDefinitionWriter method visitBeanDefinitionEnd.

/**
 * Finalize the bean definition to the given output stream.
 */
@SuppressWarnings("Duplicates")
@Override
public void visitBeanDefinitionEnd() {
    if (classWriter == null) {
        throw new IllegalStateException("At least one called to visitBeanDefinitionConstructor(..) is required");
    }
    processAllBeanElementVisitors();
    if (constructor instanceof MethodElement) {
        MethodElement methodElement = (MethodElement) constructor;
        boolean isParametrized = Arrays.stream(methodElement.getParameters()).map(AnnotationMetadataProvider::getAnnotationMetadata).anyMatch(this::isAnnotatedWithParameter);
        if (isParametrized) {
            interfaceTypes.add(ParametrizedBeanFactory.class);
        }
    }
    String[] interfaceInternalNames = new String[interfaceTypes.size()];
    Iterator<Class> j = interfaceTypes.iterator();
    for (int i = 0; i < interfaceInternalNames.length; i++) {
        interfaceInternalNames[i] = Type.getInternalName(j.next());
    }
    final String beanDefSignature = generateBeanDefSig(beanType);
    classWriter.visit(V1_8, ACC_SYNTHETIC, beanDefinitionInternalName, beanDefSignature, isSuperFactory ? TYPE_ABSTRACT_BEAN_DEFINITION.getInternalName() : superType.getInternalName(), interfaceInternalNames);
    classWriter.visitAnnotation(TYPE_GENERATED.getDescriptor(), false);
    if (buildMethodVisitor == null) {
        throw new IllegalStateException("At least one call to visitBeanDefinitionConstructor() is required");
    }
    GeneratorAdapter staticInit = visitStaticInitializer(classWriter);
    classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, FIELD_CONSTRUCTOR, Type.getType(AbstractInitializableBeanDefinition.MethodOrFieldReference.class).getDescriptor(), null, null);
    int methodsLength = allMethodVisits.size();
    if (!superBeanDefinition && methodsLength > 0) {
        Type methodsFieldType = Type.getType(AbstractInitializableBeanDefinition.MethodReference[].class);
        classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, FIELD_INJECTION_METHODS, methodsFieldType.getDescriptor(), null, null);
        pushNewArray(staticInit, AbstractInitializableBeanDefinition.MethodReference.class, methodsLength);
        int i = 0;
        for (MethodVisitData methodVisitData : allMethodVisits) {
            pushStoreInArray(staticInit, i++, methodsLength, () -> pushNewMethodReference(staticInit, JavaModelUtils.getTypeReference(methodVisitData.beanType), methodVisitData.methodElement, methodVisitData.requiresReflection, methodVisitData.isPostConstruct(), methodVisitData.isPreDestroy()));
        }
        staticInit.putStatic(beanDefinitionType, FIELD_INJECTION_METHODS, methodsFieldType);
    }
    if (!fieldInjectionPoints.isEmpty()) {
        Type fieldsFieldType = Type.getType(AbstractInitializableBeanDefinition.FieldReference[].class);
        classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, FIELD_INJECTION_FIELDS, fieldsFieldType.getDescriptor(), null, null);
        int length = fieldInjectionPoints.size();
        pushNewArray(staticInit, AbstractInitializableBeanDefinition.FieldReference.class, length);
        for (int i = 0; i < length; i++) {
            FieldVisitData fieldVisitData = fieldInjectionPoints.get(i);
            pushStoreInArray(staticInit, i, length, () -> pushNewFieldReference(staticInit, JavaModelUtils.getTypeReference(fieldVisitData.beanType), fieldVisitData.fieldElement, fieldVisitData.requiresReflection));
        }
        staticInit.putStatic(beanDefinitionType, FIELD_INJECTION_FIELDS, fieldsFieldType);
    }
    if (!superBeanDefinition && hasTypeArguments()) {
        Type typeArgumentsFieldType = Type.getType(Map.class);
        classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, FIELD_TYPE_ARGUMENTS, typeArgumentsFieldType.getDescriptor(), null, null);
        pushStringMapOf(staticInit, typeArguments, true, null, new Consumer<Map<String, ClassElement>>() {

            @Override
            public void accept(Map<String, ClassElement> stringClassElementMap) {
                pushTypeArgumentElements(beanDefinitionType, classWriter, staticInit, beanDefinitionName, stringClassElementMap, defaultsStorage, loadTypeMethods);
            }
        });
        staticInit.putStatic(beanDefinitionType, FIELD_TYPE_ARGUMENTS, typeArgumentsFieldType);
    }
    // first build the constructor
    visitBeanDefinitionConstructorInternal(staticInit, constructor, constructorRequiresReflection);
    addInnerConfigurationMethod(staticInit);
    addGetExposedTypes(staticInit);
    staticInit.returnValue();
    staticInit.visitMaxs(DEFAULT_MAX_STACK, defaultsStorage.size() + 3);
    staticInit.visitEnd();
    if (buildMethodVisitor != null) {
        if (isPrimitiveBean) {
            pushBoxPrimitiveIfNecessary(beanType, buildMethodVisitor);
        }
        buildMethodVisitor.returnValue();
        buildMethodVisitor.visitMaxs(DEFAULT_MAX_STACK, 10);
    }
    if (injectMethodVisitor != null) {
        if (injectEnd != null) {
            injectMethodVisitor.visitLabel(injectEnd);
        }
        invokeSuperInjectMethod(injectMethodVisitor, INJECT_BEAN_METHOD);
        if (isPrimitiveBean) {
            pushBoxPrimitiveIfNecessary(beanType, injectMethodVisitor);
        }
        injectMethodVisitor.returnValue();
        injectMethodVisitor.visitMaxs(DEFAULT_MAX_STACK, 10);
    }
    if (postConstructMethodVisitor != null) {
        postConstructMethodVisitor.loadLocal(postConstructInstanceLocalVarIndex);
        postConstructMethodVisitor.returnValue();
        postConstructMethodVisitor.visitMaxs(DEFAULT_MAX_STACK, 10);
    }
    if (preDestroyMethodVisitor != null) {
        preDestroyMethodVisitor.loadLocal(preDestroyInstanceLocalVarIndex);
        preDestroyMethodVisitor.returnValue();
        preDestroyMethodVisitor.visitMaxs(DEFAULT_MAX_STACK, 10);
    }
    if (interceptedDisposeMethod != null) {
        interceptedDisposeMethod.visitMaxs(1, 1);
        interceptedDisposeMethod.visitEnd();
    }
    getInterceptedType().ifPresent(t -> implementInterceptedTypeMethod(t, this.classWriter));
    for (GeneratorAdapter method : loadTypeMethods.values()) {
        method.visitMaxs(3, 1);
        method.visitEnd();
    }
    classWriter.visitEnd();
    this.beanFinalized = true;
}
Also used : MethodElement(io.micronaut.inject.ast.MethodElement) ClassElement(io.micronaut.inject.ast.ClassElement) AbstractConstructorInjectionPoint(io.micronaut.context.AbstractConstructorInjectionPoint) ConstructorInjectionPoint(io.micronaut.inject.ConstructorInjectionPoint) Type(org.objectweb.asm.Type) AdvisedBeanType(io.micronaut.inject.AdvisedBeanType) AbstractInitializableBeanDefinition(io.micronaut.context.AbstractInitializableBeanDefinition) GeneratorAdapter(org.objectweb.asm.commons.GeneratorAdapter) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap)

Example 17 with MethodElement

use of io.micronaut.inject.ast.MethodElement in project micronaut-core by micronaut-projects.

the class BeanDefinitionWriter method isInterceptedLifeCycleByType.

private boolean isInterceptedLifeCycleByType(AnnotationMetadata annotationMetadata, String interceptType) {
    return isLifeCycleCache.computeIfAbsent(interceptType, s -> {
        if (this.beanTypeElement.isAssignable("io.micronaut.aop.Interceptor")) {
            // interceptor beans cannot have lifecycle methods intercepted
            return false;
        }
        final Element originatingElement = getOriginatingElements()[0];
        final boolean isFactoryMethod = (originatingElement instanceof MethodElement && !(originatingElement instanceof ConstructorElement));
        final boolean isProxyTarget = annotationMetadata.booleanValue(AnnotationUtil.ANN_AROUND, "proxyTarget").orElse(false) || isFactoryMethod;
        // for beans that are @Around(proxyTarget=false) only the generated AOP impl should be intercepted
        final boolean isAopType = StringUtils.isNotEmpty(interceptedType);
        final boolean isConstructorInterceptionCandidate = (isProxyTarget && !isAopType) || (isAopType && !isProxyTarget);
        final boolean hasAroundConstruct;
        final AnnotationValue<Annotation> interceptorBindings = annotationMetadata.getAnnotation(AnnotationUtil.ANN_INTERCEPTOR_BINDINGS);
        List<AnnotationValue<Annotation>> interceptorBindingAnnotations;
        if (interceptorBindings != null) {
            interceptorBindingAnnotations = interceptorBindings.getAnnotations(AnnotationMetadata.VALUE_MEMBER);
            hasAroundConstruct = interceptorBindingAnnotations.stream().anyMatch(av -> av.stringValue("kind").map(k -> k.equals(interceptType)).orElse(false));
        } else {
            interceptorBindingAnnotations = Collections.emptyList();
            hasAroundConstruct = false;
        }
        if (isConstructorInterceptionCandidate) {
            return hasAroundConstruct;
        } else if (hasAroundConstruct) {
            AnnotationMetadata typeMetadata = annotationMetadata;
            if (!isSuperFactory && typeMetadata instanceof AnnotationMetadataHierarchy) {
                typeMetadata = ((AnnotationMetadataHierarchy) typeMetadata).getRootMetadata();
                final AnnotationValue<Annotation> av = typeMetadata.getAnnotation(AnnotationUtil.ANN_INTERCEPTOR_BINDINGS);
                if (av != null) {
                    interceptorBindingAnnotations = av.getAnnotations(AnnotationMetadata.VALUE_MEMBER);
                } else {
                    interceptorBindingAnnotations = Collections.emptyList();
                }
            }
            // if no other AOP advice is applied
            return interceptorBindingAnnotations.stream().noneMatch(av -> av.stringValue("kind").map(k -> k.equals("AROUND")).orElse(false));
        } else {
            return false;
        }
    });
}
Also used : ConstructorElement(io.micronaut.inject.ast.ConstructorElement) Bindable(io.micronaut.core.bind.annotation.Bindable) Arrays(java.util.Arrays) DefaultBeanContext(io.micronaut.context.DefaultBeanContext) Internal(io.micronaut.core.annotation.Internal) VISITORS(io.micronaut.inject.visitor.BeanElementVisitor.VISITORS) InstantiationUtils(io.micronaut.core.reflect.InstantiationUtils) Duration(java.time.Duration) Map(java.util.Map) PropertyMetadata(io.micronaut.inject.configuration.PropertyMetadata) Property(io.micronaut.context.annotation.Property) AnnotationMetadataWriter(io.micronaut.inject.annotation.AnnotationMetadataWriter) AnnotationMetadataHierarchy(io.micronaut.inject.annotation.AnnotationMetadataHierarchy) Provided(io.micronaut.context.annotation.Provided) Singleton(jakarta.inject.Singleton) Set(java.util.Set) Bean(io.micronaut.context.annotation.Bean) Stream(java.util.stream.Stream) AnnotationValue(io.micronaut.core.annotation.AnnotationValue) ProxyBeanDefinition(io.micronaut.inject.ProxyBeanDefinition) MethodElement(io.micronaut.inject.ast.MethodElement) SignatureVisitor(org.objectweb.asm.signature.SignatureVisitor) EachProperty(io.micronaut.context.annotation.EachProperty) BeanFactory(io.micronaut.inject.BeanFactory) MutableAnnotationMetadata(io.micronaut.inject.annotation.MutableAnnotationMetadata) JavaModelUtils(io.micronaut.inject.processing.JavaModelUtils) ClassWriter(org.objectweb.asm.ClassWriter) BeanRegistration(io.micronaut.context.BeanRegistration) Parameter(io.micronaut.context.annotation.Parameter) AnnotationMetadataProvider(io.micronaut.core.annotation.AnnotationMetadataProvider) AbstractExecutableMethod(io.micronaut.context.AbstractExecutableMethod) Qualifier(io.micronaut.context.Qualifier) Toggleable(io.micronaut.core.util.Toggleable) DefaultAnnotationMetadata(io.micronaut.inject.annotation.DefaultAnnotationMetadata) ConstructorElement(io.micronaut.inject.ast.ConstructorElement) Constructor(java.lang.reflect.Constructor) TreeSet(java.util.TreeSet) ParameterElement(io.micronaut.inject.ast.ParameterElement) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) GeneratorAdapter(org.objectweb.asm.commons.GeneratorAdapter) TypedElement(io.micronaut.inject.ast.TypedElement) ConfigurationProperties(io.micronaut.context.annotation.ConfigurationProperties) AbstractConstructorInjectionPoint(io.micronaut.context.AbstractConstructorInjectionPoint) Nullable(io.micronaut.core.annotation.Nullable) BeanElement(io.micronaut.inject.ast.beans.BeanElement) Argument(io.micronaut.core.type.Argument) IOException(java.io.IOException) VisitorContext(io.micronaut.inject.visitor.VisitorContext) AnnotationValueBuilder(io.micronaut.core.annotation.AnnotationValueBuilder) BeanDefinition(io.micronaut.inject.BeanDefinition) ValidatedBeanDefinition(io.micronaut.inject.ValidatedBeanDefinition) ElementQuery(io.micronaut.inject.ast.ElementQuery) BeanElementVisitor(io.micronaut.inject.visitor.BeanElementVisitor) MethodVisitor(org.objectweb.asm.MethodVisitor) BeanElementVisitorContext(io.micronaut.inject.visitor.BeanElementVisitorContext) BeanContext(io.micronaut.context.BeanContext) ArrayUtils(io.micronaut.core.util.ArrayUtils) FieldElement(io.micronaut.inject.ast.FieldElement) ConfigurationInject(io.micronaut.context.annotation.ConfigurationInject) Type(org.objectweb.asm.Type) ExecutableMethodsDefinition(io.micronaut.inject.ExecutableMethodsDefinition) DefaultScope(io.micronaut.context.annotation.DefaultScope) EachBean(io.micronaut.context.annotation.EachBean) ConfigurationBuilder(io.micronaut.context.annotation.ConfigurationBuilder) Locale(java.util.Locale) BeanResolutionContext(io.micronaut.context.BeanResolutionContext) NameUtils(io.micronaut.core.naming.NameUtils) AbstractInitializableBeanDefinition(io.micronaut.context.AbstractInitializableBeanDefinition) ClassVisitor(org.objectweb.asm.ClassVisitor) Method(java.lang.reflect.Method) AnyQualifier(io.micronaut.inject.qualifiers.AnyQualifier) ClassUtils(io.micronaut.core.reflect.ClassUtils) ConstructorInjectionPoint(io.micronaut.inject.ConstructorInjectionPoint) DefaultArgument(io.micronaut.core.type.DefaultArgument) Predicate(java.util.function.Predicate) Collection(java.util.Collection) Qualifiers(io.micronaut.inject.qualifiers.Qualifiers) Collectors(java.util.stream.Collectors) DisposableBeanDefinition(io.micronaut.inject.DisposableBeanDefinition) StringUtils(io.micronaut.core.util.StringUtils) List(java.util.List) AnnotationUtil(io.micronaut.core.annotation.AnnotationUtil) BeanElementBuilder(io.micronaut.inject.ast.beans.BeanElementBuilder) Annotation(java.lang.annotation.Annotation) Optional(java.util.Optional) NotNull(org.jetbrains.annotations.NotNull) BeanConstructor(io.micronaut.core.beans.BeanConstructor) Label(org.objectweb.asm.Label) ClassElement(io.micronaut.inject.ast.ClassElement) HashMap(java.util.HashMap) PrimitiveElement(io.micronaut.inject.ast.PrimitiveElement) ExecutableMethod(io.micronaut.inject.ExecutableMethod) HashSet(java.util.HashSet) Primary(io.micronaut.context.annotation.Primary) PropertyElement(io.micronaut.inject.ast.PropertyElement) Repeatable(java.lang.annotation.Repeatable) InitializingBeanDefinition(io.micronaut.inject.InitializingBeanDefinition) Any(io.micronaut.context.annotation.Any) ConfigurationReader(io.micronaut.context.annotation.ConfigurationReader) OutputStream(java.io.OutputStream) TypeVariableResolver(io.micronaut.core.type.TypeVariableResolver) Element(io.micronaut.inject.ast.Element) Iterator(java.util.Iterator) AdvisedBeanType(io.micronaut.inject.AdvisedBeanType) Value(io.micronaut.context.annotation.Value) MemberElement(io.micronaut.inject.ast.MemberElement) ReflectionUtils(io.micronaut.core.reflect.ReflectionUtils) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) NonNull(io.micronaut.core.annotation.NonNull) ParametrizedBeanFactory(io.micronaut.inject.ParametrizedBeanFactory) PropertySource(io.micronaut.context.annotation.PropertySource) CollectionUtils(io.micronaut.core.util.CollectionUtils) ConfigurationMetadataBuilder(io.micronaut.inject.configuration.ConfigurationMetadataBuilder) InjectScope(io.micronaut.context.annotation.InjectScope) AnnotationMetadata(io.micronaut.core.annotation.AnnotationMetadata) Comparator(java.util.Comparator) Collections(java.util.Collections) MethodElement(io.micronaut.inject.ast.MethodElement) ConstructorElement(io.micronaut.inject.ast.ConstructorElement) ParameterElement(io.micronaut.inject.ast.ParameterElement) TypedElement(io.micronaut.inject.ast.TypedElement) BeanElement(io.micronaut.inject.ast.beans.BeanElement) FieldElement(io.micronaut.inject.ast.FieldElement) ClassElement(io.micronaut.inject.ast.ClassElement) PrimitiveElement(io.micronaut.inject.ast.PrimitiveElement) PropertyElement(io.micronaut.inject.ast.PropertyElement) Element(io.micronaut.inject.ast.Element) MemberElement(io.micronaut.inject.ast.MemberElement) MethodElement(io.micronaut.inject.ast.MethodElement) AnnotationValue(io.micronaut.core.annotation.AnnotationValue) AnnotationMetadataHierarchy(io.micronaut.inject.annotation.AnnotationMetadataHierarchy) Annotation(java.lang.annotation.Annotation) MutableAnnotationMetadata(io.micronaut.inject.annotation.MutableAnnotationMetadata) DefaultAnnotationMetadata(io.micronaut.inject.annotation.DefaultAnnotationMetadata) AnnotationMetadata(io.micronaut.core.annotation.AnnotationMetadata)

Example 18 with MethodElement

use of io.micronaut.inject.ast.MethodElement in project micronaut-core by micronaut-projects.

the class AbstractBeanDefinitionBuilder method build.

/**
 * Build the bean definition writer.
 * @return The writer, possibly null if it wasn't possible to build it
 */
@Nullable
public BeanDefinitionWriter build() {
    if (exposedTypes != null) {
        final AnnotationClassValue[] annotationClassValues = Arrays.stream(exposedTypes).map(ce -> new AnnotationClassValue<>(ce.getName())).toArray(AnnotationClassValue[]::new);
        annotate(Bean.class, (builder) -> builder.member("typed", annotationClassValues));
    }
    final BeanDefinitionWriter beanDefinitionWriter = createBeanDefinitionWriter();
    if (typeArguments != null) {
        beanDefinitionWriter.visitTypeArguments(this.typeArguments);
    }
    if (constructorElement == null) {
        constructorElement = initConstructor(beanType);
    }
    if (constructorElement == null) {
        visitorContext.fail("Cannot create associated bean with no accessible primary constructor. Consider supply the constructor with createWith(..)", originatingElement);
        return null;
    } else {
        beanDefinitionWriter.visitBeanDefinitionConstructor(constructorElement, !constructorElement.isPublic(), visitorContext);
    }
    Map<ClassElement, List<MemberElement>> sortedInjections = new LinkedHashMap<>();
    List<MemberElement> allInjected = new ArrayList<>();
    allInjected.addAll(injectedFields);
    allInjected.addAll(injectedMethods);
    allInjected.sort(SORTER);
    for (MemberElement memberElement : allInjected) {
        final List<MemberElement> list = sortedInjections.computeIfAbsent(memberElement.getDeclaringType(), classElement -> new ArrayList<>());
        list.add(memberElement);
    }
    for (List<MemberElement> members : sortedInjections.values()) {
        members.sort((o1, o2) -> {
            if (o1 instanceof FieldElement && o2 instanceof MethodElement) {
                return 1;
            } else if (o1 instanceof MethodElement && o1 instanceof FieldElement) {
                return -1;
            }
            return 0;
        });
    }
    for (List<MemberElement> list : sortedInjections.values()) {
        for (MemberElement memberElement : list) {
            if (memberElement instanceof FieldElement) {
                InternalBeanElementField ibf = (InternalBeanElementField) memberElement;
                ibf.<InternalBeanElementField>with((element) -> visitField(beanDefinitionWriter, element, element));
            } else {
                InternalBeanElementMethod ibm = (InternalBeanElementMethod) memberElement;
                ibm.<InternalBeanElementMethod>with((element) -> beanDefinitionWriter.visitMethodInjectionPoint(ibm.getDeclaringType(), ibm, ibm.isRequiresReflection(), visitorContext));
            }
        }
    }
    for (BeanMethodElement executableMethod : executableMethods) {
        beanDefinitionWriter.visitExecutableMethod(beanType, executableMethod, visitorContext);
    }
    for (BeanMethodElement postConstructMethod : postConstructMethods) {
        if (postConstructMethod.getDeclaringType().equals(beanType)) {
            beanDefinitionWriter.visitPostConstructMethod(beanType, postConstructMethod, ((InternalBeanElementMethod) postConstructMethod).isRequiresReflection(), visitorContext);
        }
    }
    for (BeanMethodElement preDestroyMethod : preDestroyMethods) {
        if (preDestroyMethod.getDeclaringType().equals(beanType)) {
            beanDefinitionWriter.visitPreDestroyMethod(beanType, preDestroyMethod, ((InternalBeanElementMethod) preDestroyMethod).isRequiresReflection(), visitorContext);
        }
    }
    beanDefinitionWriter.visitBeanDefinitionEnd();
    return beanDefinitionWriter;
}
Also used : ElementQuery(io.micronaut.inject.ast.ElementQuery) Arrays(java.util.Arrays) ArrayUtils(io.micronaut.core.util.ArrayUtils) FieldElement(io.micronaut.inject.ast.FieldElement) BeanFieldElement(io.micronaut.inject.ast.beans.BeanFieldElement) ClassElement(io.micronaut.inject.ast.ClassElement) HashMap(java.util.HashMap) Internal(io.micronaut.core.annotation.Internal) ConstructorElement(io.micronaut.inject.ast.ConstructorElement) BeanMethodElement(io.micronaut.inject.ast.beans.BeanMethodElement) ParameterElement(io.micronaut.inject.ast.ParameterElement) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) PreDestroy(javax.annotation.PreDestroy) ElementFactory(io.micronaut.inject.ast.ElementFactory) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Nullable(io.micronaut.core.annotation.Nullable) Map(java.util.Map) ElementModifier(io.micronaut.inject.ast.ElementModifier) AnnotationClassValue(io.micronaut.core.annotation.AnnotationClassValue) Property(io.micronaut.context.annotation.Property) Element(io.micronaut.inject.ast.Element) Iterator(java.util.Iterator) Predicate(java.util.function.Predicate) Set(java.util.Set) IOException(java.io.IOException) Value(io.micronaut.context.annotation.Value) BeanParameterElement(io.micronaut.inject.ast.beans.BeanParameterElement) MemberElement(io.micronaut.inject.ast.MemberElement) Bean(io.micronaut.context.annotation.Bean) Consumer(java.util.function.Consumer) NonNull(io.micronaut.core.annotation.NonNull) VisitorContext(io.micronaut.inject.visitor.VisitorContext) List(java.util.List) BeanConstructorElement(io.micronaut.inject.ast.beans.BeanConstructorElement) AnnotationValueBuilder(io.micronaut.core.annotation.AnnotationValueBuilder) BeanElementBuilder(io.micronaut.inject.ast.beans.BeanElementBuilder) AnnotationValue(io.micronaut.core.annotation.AnnotationValue) MethodElement(io.micronaut.inject.ast.MethodElement) ConfigurationMetadataBuilder(io.micronaut.inject.configuration.ConfigurationMetadataBuilder) Annotation(java.lang.annotation.Annotation) PostConstruct(javax.annotation.PostConstruct) AnnotationMetadata(io.micronaut.core.annotation.AnnotationMetadata) Comparator(java.util.Comparator) Collections(java.util.Collections) MutableAnnotationMetadata(io.micronaut.inject.annotation.MutableAnnotationMetadata) ArrayList(java.util.ArrayList) FieldElement(io.micronaut.inject.ast.FieldElement) BeanFieldElement(io.micronaut.inject.ast.beans.BeanFieldElement) BeanMethodElement(io.micronaut.inject.ast.beans.BeanMethodElement) MethodElement(io.micronaut.inject.ast.MethodElement) ClassElement(io.micronaut.inject.ast.ClassElement) AnnotationClassValue(io.micronaut.core.annotation.AnnotationClassValue) LinkedHashMap(java.util.LinkedHashMap) BeanMethodElement(io.micronaut.inject.ast.beans.BeanMethodElement) ArrayList(java.util.ArrayList) List(java.util.List) MemberElement(io.micronaut.inject.ast.MemberElement) Nullable(io.micronaut.core.annotation.Nullable)

Aggregations

MethodElement (io.micronaut.inject.ast.MethodElement)18 ClassElement (io.micronaut.inject.ast.ClassElement)14 ParameterElement (io.micronaut.inject.ast.ParameterElement)12 Map (java.util.Map)12 AnnotationMetadata (io.micronaut.core.annotation.AnnotationMetadata)11 FieldElement (io.micronaut.inject.ast.FieldElement)11 List (java.util.List)11 ArrayList (java.util.ArrayList)10 Collections (java.util.Collections)10 Set (java.util.Set)10 NonNull (io.micronaut.core.annotation.NonNull)9 ElementQuery (io.micronaut.inject.ast.ElementQuery)9 HashMap (java.util.HashMap)9 Type (org.objectweb.asm.Type)9 GeneratorAdapter (org.objectweb.asm.commons.GeneratorAdapter)9 Internal (io.micronaut.core.annotation.Internal)8 ConstructorElement (io.micronaut.inject.ast.ConstructorElement)8 Arrays (java.util.Arrays)8 HashSet (java.util.HashSet)8 ArrayUtils (io.micronaut.core.util.ArrayUtils)7