Navigation Menu

Skip to content

Commit

Permalink
Merged in MattGill1998/payara/PAYARA-3258-OpenAPI-Lists-Unimplemented…
Browse files Browse the repository at this point in the history
…-Interfaces-5.184-MAINTENANCE (pull request payara#560)

PAYARA-3258 Disabled Path Based Annotations For Interfaces 5.184
  • Loading branch information
Matt Gill authored and Pandrex247 committed Dec 11, 2018
2 parents 8b54192 + ca4c1f5 commit 6776d64
Showing 1 changed file with 30 additions and 13 deletions.
Expand Up @@ -46,6 +46,7 @@
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
Expand Down Expand Up @@ -130,8 +131,8 @@ public OpenApiWalker(OpenAPI api, Set<Class<?>> allowedClasses, Map<String, Set<
@Override
public void accept(ApiVisitor visitor) {
// OpenAPI necessary annotations
processAnnotations(OpenAPIDefinition.class, visitor::visitOpenAPI);
processAnnotations(Schema.class, visitor::visitSchema);
processAnnotations(OpenAPIDefinition.class, visitor::visitOpenAPI, true);
processAnnotations(Schema.class, visitor::visitSchema, true);

// JAX-RS methods
processAnnotations(GET.class, visitor::visitGET);
Expand All @@ -150,20 +151,20 @@ public void accept(ApiVisitor visitor) {
processAnnotations(FormParam.class, visitor::visitFormParam);

// All other OpenAPI annotations
processAnnotations(Schema.class, visitor::visitSchema);
processAnnotations(Server.class, visitor::visitServer, Servers.class, visitor::visitServers);
processAnnotations(Extension.class, visitor::visitExtension);
processAnnotations(Schema.class, visitor::visitSchema, true);
processAnnotations(Server.class, visitor::visitServer, Servers.class, visitor::visitServers, true);
processAnnotations(Extension.class, visitor::visitExtension, true);
processAnnotations(Operation.class, visitor::visitOperation);
processAnnotations(Callback.class, visitor::visitCallback, Callbacks.class, visitor::visitCallbacks);
processAnnotations(APIResponse.class, visitor::visitAPIResponse, APIResponses.class,
visitor::visitAPIResponses);
processAnnotations(Parameter.class, visitor::visitParameter);
processAnnotations(ExternalDocumentation.class, visitor::visitExternalDocumentation);
processAnnotations(Tag.class, visitor::visitTag, Tags.class, visitor::visitTags);
visitor::visitAPIResponses, true);
processAnnotations(Parameter.class, visitor::visitParameter, true);
processAnnotations(ExternalDocumentation.class, visitor::visitExternalDocumentation, true);
processAnnotations(Tag.class, visitor::visitTag, Tags.class, visitor::visitTags, true);
processAnnotations(SecurityScheme.class, visitor::visitSecurityScheme, SecuritySchemes.class,
visitor::visitSecuritySchemes);
visitor::visitSecuritySchemes, true);
processAnnotations(SecurityRequirement.class, visitor::visitSecurityRequirement, SecurityRequirements.class,
visitor::visitSecurityRequirements);
visitor::visitSecurityRequirements, true);

// JAX-RS response types
processAnnotations(Produces.class, visitor::visitProduces);
Expand All @@ -173,9 +174,14 @@ public void accept(ApiVisitor visitor) {

private <A extends Annotation, A2 extends Annotation, E extends AnnotatedElement> void processAnnotations(
Class<A> annotationClass, VisitorFunction<A, E> annotationFunction, Class<A2> altClass,
VisitorFunction<A2, E> altFunction) {
VisitorFunction<A2, E> altFunction, boolean allowInterfaces) {
for (Class<?> clazz : classes) {

// Don't read interfaces if the annotation should only be read from concrete classes
if (!allowInterfaces && (Modifier.isAbstract(clazz.getModifiers()) || clazz.isInterface())) {
continue;
}

processAnnotation(clazz, annotationClass, annotationFunction, altClass, altFunction,
new OpenApiContext(api, getResourcePath(clazz, resourceMapping)));

Expand All @@ -199,7 +205,18 @@ private <A extends Annotation, A2 extends Annotation, E extends AnnotatedElement

private <A extends Annotation, E extends AnnotatedElement> void processAnnotations(Class<A> annotationClass,
VisitorFunction<A, E> function) {
processAnnotations(annotationClass, function, null, null);
processAnnotations(annotationClass, function, false);
}

private <A extends Annotation, E extends AnnotatedElement> void processAnnotations(Class<A> annotationClass,
VisitorFunction<A, E> function, boolean allowInterfaces) {
processAnnotations(annotationClass, function, null, null, allowInterfaces);
}

private <A extends Annotation, A2 extends Annotation, E extends AnnotatedElement> void processAnnotations(
Class<A> annotationClass, VisitorFunction<A, E> annotationFunction, Class<A2> altClass,
VisitorFunction<A2, E> altFunction) {
processAnnotations(annotationClass, annotationFunction, altClass, altFunction, false);
}

@SuppressWarnings("unchecked")
Expand Down

0 comments on commit 6776d64

Please sign in to comment.