Skip to content

Commit f525c91

Browse files
committed
No Issue - Add a warn in the logs when elements have duplicated vars
Signed-off-by: Ricardo Zanini <[email protected]>
1 parent 6a148ec commit f525c91

File tree

3 files changed

+3500
-6
lines changed

3 files changed

+3500
-6
lines changed

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

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22

33
import java.io.File;
44
import java.net.URL;
5-
import java.util.List;
6-
import java.util.Locale;
7-
import java.util.Map;
8-
import java.util.Objects;
9-
import java.util.Optional;
10-
import java.util.TreeMap;
5+
import java.util.*;
116

7+
import org.openapitools.codegen.CodegenModel;
8+
import org.openapitools.codegen.CodegenProperty;
129
import org.openapitools.codegen.SupportingFile;
1310
import org.openapitools.codegen.config.GlobalSettings;
1411
import org.openapitools.codegen.languages.JavaClientCodegen;
@@ -18,6 +15,7 @@
1815
import org.slf4j.LoggerFactory;
1916

2017
import io.swagger.v3.oas.models.OpenAPI;
18+
import io.swagger.v3.oas.models.media.Schema;
2119
import io.swagger.v3.oas.models.servers.Server;
2220

2321
public class QuarkusJavaClientCodegen extends JavaClientCodegen {
@@ -129,6 +127,30 @@ public void postProcess() {
129127

130128
}
131129

130+
public CodegenModel fromModel(String name, Schema model) {
131+
CodegenModel codegenModel = super.fromModel(name, model);
132+
warnIfDuplicated(codegenModel);
133+
return codegenModel;
134+
}
135+
136+
private void warnIfDuplicated(CodegenModel m) {
137+
Set<String> propertyNames = new TreeSet<>();
138+
for (CodegenProperty element : m.allVars) {
139+
if (element.deprecated) {
140+
continue;
141+
}
142+
143+
// We can have baseName as `my-type` and `myType`, that are duplicates
144+
if (propertyNames.contains(element.name)) {
145+
LOGGER.warn(
146+
"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.",
147+
element.baseName, m.classFilename);
148+
} else {
149+
propertyNames.add(element.name);
150+
}
151+
}
152+
}
153+
132154
@Override
133155
public String toEnumVarName(String value, String datatype) {
134156

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)