Skip to content

Commit adf964d

Browse files
No Issue - Add a warn in the logs when elements have duplicated vars (#823)
* No Issue - Add a warn in the logs when elements have duplicated vars Signed-off-by: Ricardo Zanini <[email protected]> * Fix imports Signed-off-by: Ricardo Zanini <[email protected]> * Add the Override annotation Signed-off-by: Ricardo Zanini <[email protected]> --------- Signed-off-by: Ricardo Zanini <[email protected]>
1 parent 5eb1b18 commit adf964d

File tree

3 files changed

+3502
-0
lines changed

3 files changed

+3502
-0
lines changed

client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/QuarkusJavaClientCodegen.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@
77
import java.util.Map;
88
import java.util.Objects;
99
import java.util.Optional;
10+
import java.util.Set;
1011
import java.util.TreeMap;
12+
import java.util.TreeSet;
1113

14+
import org.openapitools.codegen.CodegenModel;
15+
import org.openapitools.codegen.CodegenProperty;
1216
import org.openapitools.codegen.SupportingFile;
1317
import org.openapitools.codegen.config.GlobalSettings;
1418
import org.openapitools.codegen.languages.JavaClientCodegen;
@@ -18,6 +22,7 @@
1822
import org.slf4j.LoggerFactory;
1923

2024
import io.swagger.v3.oas.models.OpenAPI;
25+
import io.swagger.v3.oas.models.media.Schema;
2126
import io.swagger.v3.oas.models.servers.Server;
2227

2328
public class QuarkusJavaClientCodegen extends JavaClientCodegen {
@@ -130,6 +135,31 @@ public void postProcess() {
130135

131136
}
132137

138+
@Override
139+
public CodegenModel fromModel(String name, Schema model) {
140+
CodegenModel codegenModel = super.fromModel(name, model);
141+
warnIfDuplicated(codegenModel);
142+
return codegenModel;
143+
}
144+
145+
private void warnIfDuplicated(CodegenModel m) {
146+
Set<String> propertyNames = new TreeSet<>();
147+
for (CodegenProperty element : m.allVars) {
148+
if (element.deprecated) {
149+
continue;
150+
}
151+
152+
// We can have baseName as `my-type` and `myType`, that are duplicates
153+
if (propertyNames.contains(element.name)) {
154+
LOGGER.warn(
155+
"Variable {} is duplicated in the OpenAPI spec file. Consider adding the 'deprecated' attribute to it or remove it from the file. Java class {} will fail to compile.",
156+
element.baseName, m.classFilename);
157+
} else {
158+
propertyNames.add(element.name);
159+
}
160+
}
161+
}
162+
133163
@Override
134164
public String toEnumVarName(String value, String datatype) {
135165

client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@
4545

4646
public class OpenApiClientGeneratorWrapperTest {
4747

48+
@Test
49+
void verifyFlink() throws URISyntaxException, FileNotFoundException {
50+
OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-flink.yaml");
51+
final List<File> generatedFiles = generatorWrapper.generate("org.acme.flink");
52+
assertNotNull(generatedFiles);
53+
assertFalse(generatedFiles.isEmpty());
54+
55+
final Optional<File> duplicatedVars = generatedFiles.stream()
56+
.filter(f -> f.getName().endsWith("AsynchronousOperationResultOperation.java")).findFirst();
57+
assertThat(duplicatedVars).isPresent();
58+
59+
CompilationUnit compilationUnit = StaticJavaParser.parse(duplicatedVars.orElseThrow());
60+
List<VariableDeclarator> vars = compilationUnit.findAll(VariableDeclarator.class);
61+
assertThat(vars).isNotEmpty();
62+
63+
// This openApi file has a duplicated field
64+
assertThat(vars.stream()
65+
.filter(v -> "failureCause".equals(v.getNameAsString())).count()).isEqualTo(4);
66+
}
67+
4868
@Test
4969
void verifySuffixPrefix() throws URISyntaxException {
5070
OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("suffix-prefix-openapi.json");

0 commit comments

Comments
 (0)