Skip to content

Commit

Permalink
Fix lost enum classes when it unnamed schemas for endpoint parameters (
Browse files Browse the repository at this point in the history
…#1382)

Co-authored-by: Sergio del Amo <sergio.delamo@softamo.com>
  • Loading branch information
altro3 and sdelamo committed Jan 25, 2024
1 parent 03ea986 commit d935d73
Show file tree
Hide file tree
Showing 14 changed files with 784 additions and 21 deletions.
3 changes: 0 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
projectVersion=6.5.0-SNAPSHOT
projectGroup=io.micronaut.openapi
micronautDocsVersion=2.0.0
groovyVersion=4.0.15
spockVersion=2.3-groovy-4.0

title=OpenAPI/Swagger Support
projectDesc=Configuration to integrate Micronaut and OpenAPI/Swagger
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ managed-freemarker = "2.3.32"
managed-pegdown = "1.6.0"
managed-evo-inflector = "1.3"

groovy = "4.0.17"
kotlin = "1.9.22"
ksp = "1.9.22-1.0.17"
jspecify = "0.3.0"
Expand All @@ -20,6 +21,7 @@ swagger-parser-v3 = "2.1.20"
javaparser = "3.25.8"
commons-codec = "1.16.0"

micronaut-docs = "2.0.0"
micronaut = "4.3.1"
micronaut-platform = "4.2.4"
micronaut-security = "4.5.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,15 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;

import io.micronaut.openapi.generator.Formatting.ReplaceDotsWithUnderscoreLambda;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.servers.Server;

import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -147,6 +148,8 @@ protected AbstractMicronautJavaCodegen() {
appName = artifactId;
generateSwaggerAnnotations = this instanceof JavaMicronautClientCodegen ? OPT_GENERATE_SWAGGER_ANNOTATIONS_FALSE : OPT_GENERATE_SWAGGER_ANNOTATIONS_SWAGGER_2;
generateOperationOnlyForFirstTag = this instanceof JavaMicronautServerCodegen;
openApiNullable = false;
inlineSchemaOption.put("RESOLVE_INLINE_ENUMS", "true");
// CHECKSTYLE:ON

// Set implemented features for user information
Expand Down Expand Up @@ -589,6 +592,41 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera
super.addOperationToGroup(super.sanitizeTag(tag), resourcePath, operation, co, operations);
}

@Override
public void preprocessOpenAPI(OpenAPI openAPI) {

if (openAPI.getPaths() != null) {
for (var path : openAPI.getPaths().values()) {
if (path.getParameters() == null || path.getParameters().isEmpty()) {
continue;
}

for (var op : path.readOperations()) {
if (op.getParameters() == null) {
op.setParameters(new ArrayList<>());
}
for (var param : path.getParameters()) {
var found = false;
for (var opParam : op.getParameters()) {
if (Objects.equals(opParam.getName(), param.getName())) {
found = true;
break;
}
}
if (!found) {
op.getParameters().add(param);
}
}
}
}
}

var inlineModelResolver = new MicronautInlineModelResolver(openAPI);
inlineModelResolver.flattenPaths();

super.preprocessOpenAPI(openAPI);
}

@Override
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
objs = super.postProcessOperationsWithModels(objs, allModels);
Expand Down Expand Up @@ -699,11 +737,6 @@ public CodegenModel fromModel(String name, Schema model) {
return codegenModel;
}

@Override
public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
return super.fromParameter(param, imports);
}

@Override
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import io.micronaut.openapi.generator.Formatting.ReplaceDotsWithUnderscoreLambda;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.examples.Example;
import io.swagger.v3.oas.models.media.ArraySchema;
Expand Down Expand Up @@ -197,6 +199,7 @@ protected AbstractMicronautKotlinCodegen() {
generateSwaggerAnnotations = this instanceof KotlinMicronautClientCodegen ? OPT_GENERATE_SWAGGER_ANNOTATIONS_FALSE : OPT_GENERATE_SWAGGER_ANNOTATIONS_SWAGGER_2;
generateOperationOnlyForFirstTag = this instanceof KotlinMicronautServerCodegen;
enumPropertyNaming = CodegenConstants.ENUM_PROPERTY_NAMING_TYPE.UPPERCASE;
inlineSchemaOption.put("RESOLVE_INLINE_ENUMS", "true");
// CHECKSTYLE:ON

// Set implemented features for user information
Expand Down Expand Up @@ -636,6 +639,41 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera
super.addOperationToGroup(super.sanitizeTag(tag), resourcePath, operation, co, operations);
}

@Override
public void preprocessOpenAPI(OpenAPI openAPI) {

if (openAPI.getPaths() != null) {
for (var path : openAPI.getPaths().values()) {
if (path.getParameters() == null || path.getParameters().isEmpty()) {
continue;
}

for (var op : path.readOperations()) {
if (op.getParameters() == null) {
op.setParameters(new ArrayList<>());
}
for (var param : path.getParameters()) {
var found = false;
for (var opParam : op.getParameters()) {
if (Objects.equals(opParam.getName(), param.getName())) {
found = true;
break;
}
}
if (!found) {
op.getParameters().add(param);
}
}
}
}
}

var inlineModelResolver = new MicronautInlineModelResolver(openAPI);
inlineModelResolver.flattenPaths();

super.preprocessOpenAPI(openAPI);
}

@Override
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
objs = super.postProcessOperationsWithModels(objs, allModels);
Expand Down

0 comments on commit d935d73

Please sign in to comment.