Class OpenApiControllerVisitor

  • All Implemented Interfaces:
    io.micronaut.core.order.Ordered, io.micronaut.core.util.Toggleable, io.micronaut.inject.visitor.TypeElementVisitor<java.lang.Object,​io.micronaut.http.annotation.HttpMethodMapping>

    public class OpenApiControllerVisitor
    extends AbstractOpenApiEndpointVisitor
    implements io.micronaut.inject.visitor.TypeElementVisitor<java.lang.Object,​io.micronaut.http.annotation.HttpMethodMapping>
    A TypeElementVisitor the builds the Swagger model from Micronaut controllers at compile time.
    Since:
    1.0
    • Nested Class Summary

      • Nested classes/interfaces inherited from interface io.micronaut.inject.visitor.TypeElementVisitor

        io.micronaut.inject.visitor.TypeElementVisitor.VisitorKind
    • Constructor Summary

      Constructors 
      Constructor Description
      OpenApiControllerVisitor()  
      OpenApiControllerVisitor​(java.util.List<io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.tags.Tag>> additionalTags, java.util.List<io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.security.SecurityRequirement>> additionalSecurityRequirements, java.lang.String customUri)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected io.swagger.v3.oas.models.media.Schema bindArraySchemaAnnotationValue​(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.ArraySchema> schemaAnn)
      Binds the array schema for the given element.
      protected io.swagger.v3.oas.models.media.Schema bindSchemaAnnotationValue​(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element element, io.swagger.v3.oas.models.media.Schema schemaToBind, io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaAnn)
      Binds the schema for the given element.
      protected io.swagger.v3.oas.models.media.Schema bindSchemaForElement​(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.TypedElement element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)
      Binds the schema for the given element.
      protected java.util.List<io.swagger.v3.oas.models.tags.Tag> classTags​(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns the class tags.
      protected java.util.List<io.micronaut.http.MediaType> consumesMediaTypes​(io.micronaut.inject.ast.MethodElement element)
      Returns the consumes media types.
      protected java.lang.String description​(io.micronaut.inject.ast.MethodElement element)
      Returns the description for the element.
      protected io.micronaut.http.HttpMethod httpMethod​(io.micronaut.inject.ast.MethodElement element)
      Returns the HttpMethod of the element.
      protected boolean ignore​(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns true if the specified element should not be processed.
      protected boolean ignore​(io.micronaut.inject.ast.MethodElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns true if the specified element should not be processed.
      protected boolean isElementNotNullable​(io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.Element classElement)  
      protected java.util.List<io.swagger.v3.oas.models.security.SecurityRequirement> methodSecurityRequirements​(io.micronaut.inject.ast.MethodElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns the security requirements at method level.
      protected java.util.List<io.swagger.v3.oas.models.servers.Server> methodServers​(io.micronaut.inject.ast.MethodElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns the servers at method level.
      static java.lang.String prependIfMissing​(java.lang.String str, java.lang.String prefix)  
      protected void processJavaxValidationAnnotations​(io.micronaut.inject.ast.Element element, io.micronaut.inject.ast.ClassElement elementType, io.swagger.v3.oas.models.media.Schema schemaToBind)  
      protected <T,​A extends java.lang.annotation.Annotation>
      java.util.List<T>
      processOpenApiAnnotation​(io.micronaut.inject.ast.Element element, io.micronaut.inject.visitor.VisitorContext context, java.lang.Class<A> annotationType, java.lang.Class<T> modelType, java.util.List<T> tagList)
      Converts annotation to model.
      protected void processSchemaProperty​(io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.TypedElement element, io.micronaut.inject.ast.ClassElement elementType, io.micronaut.inject.ast.Element classElement, io.swagger.v3.oas.models.media.Schema parentSchema, io.swagger.v3.oas.models.media.Schema propertySchema)
      Processes a schema property.
      protected void processSecuritySchemes​(io.micronaut.inject.ast.ClassElement element, io.micronaut.inject.visitor.VisitorContext context)
      Processes SecurityScheme annotations.
      protected java.util.List<io.micronaut.http.MediaType> producesMediaTypes​(io.micronaut.inject.ast.MethodElement element)
      Returns the produces media types.
      protected io.swagger.v3.oas.models.media.Schema readSchema​(io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaValue, io.swagger.v3.oas.models.OpenAPI openAPI, io.micronaut.inject.visitor.VisitorContext context, io.micronaut.inject.ast.Element type, java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement> typeArgs, java.util.List<io.micronaut.http.MediaType> mediaTypes)
      Reads schema.
      protected io.swagger.v3.oas.models.media.Schema resolveSchema​(io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes)
      Resolves the schema for the given type element.
      protected io.swagger.v3.oas.models.media.Schema resolveSchema​(io.swagger.v3.oas.models.OpenAPI openAPI, io.micronaut.inject.ast.Element definingElement, io.micronaut.inject.ast.ClassElement type, io.micronaut.inject.visitor.VisitorContext context, java.util.List<io.micronaut.http.MediaType> mediaTypes, JavadocDescription fieldJavadoc, JavadocDescription classJavadoc)
      Resolves the schema for the given type element.
      protected java.util.Map<java.lang.CharSequence,​java.lang.Object> toValueMap​(java.util.Map<java.lang.CharSequence,​java.lang.Object> values, io.micronaut.inject.visitor.VisitorContext context)
      Convert the values to a map.
      protected java.util.List<io.micronaut.http.uri.UriMatchTemplate> uriMatchTemplates​(io.micronaut.inject.ast.MethodElement element, io.micronaut.inject.visitor.VisitorContext context)
      Returns the uri paths of the element.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface io.micronaut.core.order.Ordered

        getOrder
      • Methods inherited from interface io.micronaut.core.util.Toggleable

        isEnabled
      • Methods inherited from interface io.micronaut.inject.visitor.TypeElementVisitor

        finish, getClassType, getElementType, getSupportedAnnotationNames, getSupportedOptions, getVisitorKind, start, visitClass, visitConstructor, visitEnumConstant, visitField, visitMethod
    • Constructor Detail

      • OpenApiControllerVisitor

        public OpenApiControllerVisitor()
      • OpenApiControllerVisitor

        public OpenApiControllerVisitor​(java.util.List<io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.tags.Tag>> additionalTags,
                                        java.util.List<io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.security.SecurityRequirement>> additionalSecurityRequirements,
                                        java.lang.String customUri)
    • Method Detail

      • ignore

        protected boolean ignore​(io.micronaut.inject.ast.ClassElement element,
                                 io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns true if the specified element should not be processed.
        Specified by:
        ignore in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The ClassElement.
        context - The context.
        Returns:
        true if the specified element should not be processed.
      • ignore

        protected boolean ignore​(io.micronaut.inject.ast.MethodElement element,
                                 io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns true if the specified element should not be processed.
        Specified by:
        ignore in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The ClassElement.
        context - The context.
        Returns:
        true if the specified element should not be processed.
      • httpMethod

        protected io.micronaut.http.HttpMethod httpMethod​(io.micronaut.inject.ast.MethodElement element)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the HttpMethod of the element.
        Specified by:
        httpMethod in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        Returns:
        The HttpMethod of the element.
      • consumesMediaTypes

        protected java.util.List<io.micronaut.http.MediaType> consumesMediaTypes​(io.micronaut.inject.ast.MethodElement element)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the consumes media types.
        Specified by:
        consumesMediaTypes in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        Returns:
        The consumes media types.
      • producesMediaTypes

        protected java.util.List<io.micronaut.http.MediaType> producesMediaTypes​(io.micronaut.inject.ast.MethodElement element)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the produces media types.
        Specified by:
        producesMediaTypes in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        Returns:
        The produces media types.
      • uriMatchTemplates

        protected java.util.List<io.micronaut.http.uri.UriMatchTemplate> uriMatchTemplates​(io.micronaut.inject.ast.MethodElement element,
                                                                                           io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the uri paths of the element.
        Specified by:
        uriMatchTemplates in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        context - The context
        Returns:
        The uri paths of the element.
      • description

        protected java.lang.String description​(io.micronaut.inject.ast.MethodElement element)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the description for the element.
        Specified by:
        description in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        Returns:
        The description for the element.
      • classTags

        protected java.util.List<io.swagger.v3.oas.models.tags.Tag> classTags​(io.micronaut.inject.ast.ClassElement element,
                                                                              io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the class tags.
        Specified by:
        classTags in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The ClassElement.
        context - The context.
        Returns:
        The class tags.
      • methodServers

        protected java.util.List<io.swagger.v3.oas.models.servers.Server> methodServers​(io.micronaut.inject.ast.MethodElement element,
                                                                                        io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the servers at method level.
        Specified by:
        methodServers in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        context - The context.
        Returns:
        The servers.
      • methodSecurityRequirements

        protected java.util.List<io.swagger.v3.oas.models.security.SecurityRequirement> methodSecurityRequirements​(io.micronaut.inject.ast.MethodElement element,
                                                                                                                   io.micronaut.inject.visitor.VisitorContext context)
        Description copied from class: AbstractOpenApiEndpointVisitor
        Returns the security requirements at method level.
        Specified by:
        methodSecurityRequirements in class AbstractOpenApiEndpointVisitor
        Parameters:
        element - The MethodElement.
        context - The context.
        Returns:
        The security requirements.
      • toValueMap

        protected java.util.Map<java.lang.CharSequence,​java.lang.Object> toValueMap​(java.util.Map<java.lang.CharSequence,​java.lang.Object> values,
                                                                                          io.micronaut.inject.visitor.VisitorContext context)
        Convert the values to a map.
        Parameters:
        values - The values
        context - The visitor context
        Returns:
        The map
      • prependIfMissing

        public static java.lang.String prependIfMissing​(java.lang.String str,
                                                        java.lang.String prefix)
      • resolveSchema

        @Nullable
        protected io.swagger.v3.oas.models.media.Schema resolveSchema​(@Nullable
                                                                      io.micronaut.inject.ast.Element definingElement,
                                                                      io.micronaut.inject.ast.ClassElement type,
                                                                      io.micronaut.inject.visitor.VisitorContext context,
                                                                      java.util.List<io.micronaut.http.MediaType> mediaTypes)
        Resolves the schema for the given type element.
        Parameters:
        definingElement - The defining element
        type - The type element
        context - The context
        mediaTypes - An optional media type
        Returns:
        The schema or null if it cannot be resolved
      • resolveSchema

        @Nullable
        protected io.swagger.v3.oas.models.media.Schema resolveSchema​(io.swagger.v3.oas.models.OpenAPI openAPI,
                                                                      @Nullable
                                                                      io.micronaut.inject.ast.Element definingElement,
                                                                      io.micronaut.inject.ast.ClassElement type,
                                                                      io.micronaut.inject.visitor.VisitorContext context,
                                                                      java.util.List<io.micronaut.http.MediaType> mediaTypes,
                                                                      JavadocDescription fieldJavadoc,
                                                                      JavadocDescription classJavadoc)
        Resolves the schema for the given type element.
        Parameters:
        openAPI - The OpenAPI object
        definingElement - The defining element
        type - The type element
        context - The context
        mediaTypes - An optional media type
        fieldJavadoc - Field-level java doc
        classJavadoc - Class-level java doc
        Returns:
        The schema or null if it cannot be resolved
      • processSchemaProperty

        protected void processSchemaProperty​(io.micronaut.inject.visitor.VisitorContext context,
                                             io.micronaut.inject.ast.TypedElement element,
                                             io.micronaut.inject.ast.ClassElement elementType,
                                             @Nullable
                                             io.micronaut.inject.ast.Element classElement,
                                             io.swagger.v3.oas.models.media.Schema parentSchema,
                                             io.swagger.v3.oas.models.media.Schema propertySchema)
        Processes a schema property.
        Parameters:
        context - The visitor context
        element - The element
        elementType - The element type
        classElement - The class element
        parentSchema - The parent schema
        propertySchema - The property schema
      • isElementNotNullable

        protected boolean isElementNotNullable​(io.micronaut.inject.ast.Element element,
                                               @Nullable
                                               io.micronaut.inject.ast.Element classElement)
      • bindSchemaForElement

        protected io.swagger.v3.oas.models.media.Schema bindSchemaForElement​(io.micronaut.inject.visitor.VisitorContext context,
                                                                             io.micronaut.inject.ast.TypedElement element,
                                                                             io.micronaut.inject.ast.ClassElement elementType,
                                                                             io.swagger.v3.oas.models.media.Schema schemaToBind)
        Binds the schema for the given element.
        Parameters:
        context - The context
        element - The element
        elementType - The element type
        schemaToBind - The schema to bind
        Returns:
        The bound schema
      • processJavaxValidationAnnotations

        protected void processJavaxValidationAnnotations​(io.micronaut.inject.ast.Element element,
                                                         io.micronaut.inject.ast.ClassElement elementType,
                                                         io.swagger.v3.oas.models.media.Schema schemaToBind)
      • bindSchemaAnnotationValue

        protected io.swagger.v3.oas.models.media.Schema bindSchemaAnnotationValue​(io.micronaut.inject.visitor.VisitorContext context,
                                                                                  io.micronaut.inject.ast.Element element,
                                                                                  io.swagger.v3.oas.models.media.Schema schemaToBind,
                                                                                  io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaAnn)
        Binds the schema for the given element.
        Parameters:
        context - The context
        element - The element
        schemaToBind - The schema to bind
        schemaAnn - The schema annotation
        Returns:
        The bound schema
      • bindArraySchemaAnnotationValue

        protected io.swagger.v3.oas.models.media.Schema bindArraySchemaAnnotationValue​(io.micronaut.inject.visitor.VisitorContext context,
                                                                                       io.micronaut.inject.ast.Element element,
                                                                                       io.swagger.v3.oas.models.media.Schema schemaToBind,
                                                                                       io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.ArraySchema> schemaAnn)
        Binds the array schema for the given element.
        Parameters:
        context - The context
        element - The element
        schemaToBind - The schema to bind
        schemaAnn - The schema annotation
        Returns:
        The bound schema
      • readSchema

        protected io.swagger.v3.oas.models.media.Schema readSchema​(io.micronaut.core.annotation.AnnotationValue<io.swagger.v3.oas.annotations.media.Schema> schemaValue,
                                                                   io.swagger.v3.oas.models.OpenAPI openAPI,
                                                                   io.micronaut.inject.visitor.VisitorContext context,
                                                                   @Nullable
                                                                   io.micronaut.inject.ast.Element type,
                                                                   java.util.Map<java.lang.String,​io.micronaut.inject.ast.ClassElement> typeArgs,
                                                                   java.util.List<io.micronaut.http.MediaType> mediaTypes)
                                                            throws com.fasterxml.jackson.core.JsonProcessingException
        Reads schema.
        Parameters:
        schemaValue - annotation value
        openAPI - The OpenApi
        context - The VisitorContext
        type - type element
        typeArgs - type arguments
        mediaTypes - The media types of schema
        Returns:
        New schema instance
        Throws:
        com.fasterxml.jackson.core.JsonProcessingException - when Json parsing fails
      • processSecuritySchemes

        protected void processSecuritySchemes​(io.micronaut.inject.ast.ClassElement element,
                                              io.micronaut.inject.visitor.VisitorContext context)
        Processes SecurityScheme annotations.
        Parameters:
        element - The element
        context - The visitor context
      • processOpenApiAnnotation

        protected <T,​A extends java.lang.annotation.Annotation> java.util.List<T> processOpenApiAnnotation​(io.micronaut.inject.ast.Element element,
                                                                                                                 io.micronaut.inject.visitor.VisitorContext context,
                                                                                                                 java.lang.Class<A> annotationType,
                                                                                                                 java.lang.Class<T> modelType,
                                                                                                                 java.util.List<T> tagList)
        Converts annotation to model.
        Type Parameters:
        T - The model type.
        A - The annotation type.
        Parameters:
        element - The element to process.
        context - The context.
        annotationType - The annotation type.
        modelType - The model type.
        tagList - The initial list of models.
        Returns:
        A list of model objects.