Skip to content

Commit 7e89e1e

Browse files
authored
fix import mapping for return types (#14525) (#15719)
* importContainerType = true * add unit test * disable MyImportTest * build all samples, add import exceptions * simplify code * delete myImportTest * generate docs * extend comment * remove inline comment
1 parent 8b26d81 commit 7e89e1e

File tree

175 files changed

+162
-157
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+162
-157
lines changed

docs/generators/groovy.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
123123
<li>File</li>
124124
<li>Float</li>
125125
<li>Integer</li>
126+
<li>List</li>
126127
<li>Long</li>
127128
<li>Map</li>
128129
<li>Object</li>

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,23 @@ public Map<String, ModelsMap> updateAllModels(Map<String, ModelsMap> objs) {
659659
return objs;
660660
}
661661

662+
/**
663+
* Removes importToRemove from the imports of objs, if present.
664+
* This is useful to remove imports that are already present in operations-related template files, to avoid importing the same thing twice.
665+
*
666+
* @param objs imports will be removed from this objs' imports collection
667+
* @param importToRemove the import statement to be removed
668+
*/
669+
protected void removeImport(OperationsMap objs, String importToRemove) {
670+
List<Map<String, String>> imports = objs.getImports();
671+
for (Iterator<Map<String, String>> itr = imports.iterator(); itr.hasNext(); ) {
672+
String itrImport = itr.next().get("import");
673+
if (itrImport.equals(importToRemove)) {
674+
itr.remove();
675+
}
676+
}
677+
}
678+
662679
/**
663680
* Removes imports from the model that points to itself
664681
* Marks a self referencing property, if detected
@@ -5196,7 +5213,7 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
51965213
codegenParameter.dataType = codegenProperty.dataType;
51975214
}
51985215
if (!addSchemaImportsFromV3SpecLocations) {
5199-
if (ModelUtils.isSet(parameterSchema)) {
5216+
if (ModelUtils.isArraySchema(parameterSchema)) {
52005217
imports.add(codegenProperty.baseType);
52015218
}
52025219
}
@@ -7403,7 +7420,7 @@ protected LinkedHashMap<String, CodegenMediaType> getContent(Content content, Se
74037420
if (addSchemaImportsFromV3SpecLocations) {
74047421
addImports(imports, schemaProp.getImports(importContainerType, importBaseType, generatorMetadata.getFeatureSet()));
74057422
} else {
7406-
addImports(imports, schemaProp.getImports(false, importBaseType, generatorMetadata.getFeatureSet()));
7423+
addImports(imports, schemaProp.getImports(true, importBaseType, generatorMetadata.getFeatureSet()));
74077424
}
74087425
}
74097426
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtClientCodegen.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
import org.openapitools.codegen.meta.features.DocumentationFeature;
2525
import org.openapitools.codegen.meta.features.GlobalFeature;
2626
import org.openapitools.codegen.meta.features.SecurityFeature;
27+
import org.openapitools.codegen.model.ModelMap;
28+
import org.openapitools.codegen.model.OperationsMap;
2729

2830
import java.io.File;
31+
import java.util.List;
2932

3033
import static org.openapitools.codegen.utils.StringUtils.*;
3134

@@ -221,4 +224,11 @@ public String toApiFilename(String name) {
221224
public void setOptionalProjectFileFlag(boolean flag) {
222225
this.optionalProjectFileFlag = flag;
223226
}
227+
228+
@Override
229+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
230+
objs = super.postProcessOperationsWithModels(objs, allModels);
231+
removeImport(objs, "#include <QList>");
232+
return objs;
233+
}
224234
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTinyClientCodegen.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.openapitools.codegen.meta.features.*;
2424
import org.openapitools.codegen.meta.GeneratorMetadata;
2525
import org.openapitools.codegen.meta.Stability;
26+
import org.openapitools.codegen.model.ModelMap;
27+
import org.openapitools.codegen.model.OperationsMap;
2628
import org.openapitools.codegen.utils.ModelUtils;
2729

2830
import java.io.File;
@@ -340,5 +342,11 @@ public String toDefaultValue(Schema p) {
340342
return "null";
341343
}
342344

345+
@Override
346+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
347+
objs = super.postProcessOperationsWithModels(objs, allModels);
348+
removeImport(objs, "#include <list>");
349+
return objs;
350+
}
343351

344352
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GroovyClientCodegen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public GroovyClientCodegen() {
6868
languageSpecificPrimitives.add("ArrayList");
6969
languageSpecificPrimitives.add("File");
7070
languageSpecificPrimitives.add("Map");
71+
languageSpecificPrimitives.add("List");
7172

7273
// this must not be OS-specific
7374
sourceFolder = projectFolder + "/groovy";

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,19 @@
1919

2020
import io.swagger.v3.oas.models.media.ComposedSchema;
2121
import io.swagger.v3.oas.models.media.Schema;
22-
import org.apache.commons.lang3.StringUtils;
2322
import org.openapitools.codegen.*;
2423
import org.openapitools.codegen.languages.features.CXFServerFeatures;
2524
import org.openapitools.codegen.languages.features.GzipTestFeatures;
2625
import org.openapitools.codegen.languages.features.LoggingTestFeatures;
2726
import org.openapitools.codegen.languages.features.UseGenericResponseFeatures;
27+
import org.openapitools.codegen.model.ModelMap;
28+
import org.openapitools.codegen.model.OperationsMap;
2829
import org.openapitools.codegen.utils.ModelUtils;
2930
import org.slf4j.Logger;
3031
import org.slf4j.LoggerFactory;
3132

3233
import java.io.File;
33-
import java.util.Set;
34+
import java.util.List;
3435

3536
public class JavaCXFServerCodegen extends AbstractJavaJAXRSServerCodegen
3637
implements CXFServerFeatures, GzipTestFeatures, LoggingTestFeatures, UseGenericResponseFeatures {
@@ -263,6 +264,13 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
263264
}
264265
}
265266

267+
@Override
268+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
269+
objs = super.postProcessOperationsWithModels(objs, allModels);
270+
removeImport(objs, "java.util.List");
271+
return objs;
272+
}
273+
266274
@Override
267275
public String getHelp() {
268276
return "Generates a Java JAXRS Server application based on Apache CXF framework.";

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSCXFCDIServerCodegen.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919

2020
import org.openapitools.codegen.*;
2121
import org.openapitools.codegen.languages.features.BeanValidationFeatures;
22+
import org.openapitools.codegen.model.ModelMap;
23+
import org.openapitools.codegen.model.OperationsMap;
2224

2325
import java.io.File;
26+
import java.util.List;
2427

2528
/**
2629
* Generates a Java JAXRS Server according to JAXRS 2.0 specification, assuming an
@@ -98,6 +101,13 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
98101
model.imports.add("JsonProperty");
99102
}
100103

104+
@Override
105+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
106+
objs = super.postProcessOperationsWithModels(objs, allModels);
107+
removeImport(objs, "java.util.List");
108+
return objs;
109+
}
110+
101111
@Override
102112
public String getHelp() {
103113
return "Generates a Java JAXRS Server according to JAXRS 2.0 specification, assuming an "

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@
2121
import org.apache.commons.lang3.StringUtils;
2222
import org.openapitools.codegen.*;
2323
import org.openapitools.codegen.meta.features.DocumentationFeature;
24+
import org.openapitools.codegen.model.ModelMap;
25+
import org.openapitools.codegen.model.OperationsMap;
2426
import org.openapitools.codegen.meta.features.SecurityFeature;
2527

2628
import java.io.File;
29+
import java.util.List;
2730
import java.util.Map;
2831

2932
import static org.openapitools.codegen.languages.features.GzipFeatures.USE_GZIP_FEATURE;
@@ -314,4 +317,11 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
314317
}
315318
}
316319

320+
@Override
321+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
322+
objs = super.postProcessOperationsWithModels(objs, allModels);
323+
removeImport(objs, "java.util.List");
324+
return objs;
325+
}
326+
317327
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJerseyServerCodegen.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.openapitools.codegen.meta.features.DocumentationFeature;
2424
import org.openapitools.codegen.model.ModelMap;
2525
import org.openapitools.codegen.model.ModelsMap;
26+
import org.openapitools.codegen.model.OperationsMap;
2627

2728
import java.util.*;
2829

@@ -154,4 +155,11 @@ public ModelsMap postProcessModelsEnum(ModelsMap objs) {
154155
return objs;
155156
}
156157

158+
@Override
159+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
160+
objs = super.postProcessOperationsWithModels(objs, allModels);
161+
removeImport(objs, "java.util.List");
162+
return objs;
163+
}
164+
157165
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaPlayFrameworkCodegen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.*;
3333
import java.util.regex.Matcher;
3434
import java.util.regex.Pattern;
35-
import java.util.stream.Collectors;
3635

3736
import static org.openapitools.codegen.utils.CamelizeOption.LOWERCASE_FIRST_LETTER;
3837
import static org.openapitools.codegen.utils.StringUtils.camelize;
@@ -371,6 +370,8 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
371370
}
372371
}
373372

373+
removeImport(objs, "java.util.List");
374+
374375
return objs;
375376
}
376377

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaResteasyEapServerCodegen.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.openapitools.codegen.meta.features.DocumentationFeature;
2626
import org.openapitools.codegen.model.ModelMap;
2727
import org.openapitools.codegen.model.ModelsMap;
28+
import org.openapitools.codegen.model.OperationsMap;
2829

2930
import java.io.File;
3031
import java.util.HashMap;
@@ -152,6 +153,13 @@ public ModelsMap postProcessModelsEnum(ModelsMap objs) {
152153
return objs;
153154
}
154155

156+
@Override
157+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
158+
objs = super.postProcessOperationsWithModels(objs, allModels);
159+
removeImport(objs, "java.util.List");
160+
return objs;
161+
}
162+
155163
public void setUseBeanValidation(boolean useBeanValidation) {
156164
this.useBeanValidation = useBeanValidation;
157165
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaResteasyServerCodegen.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@
2323
import org.openapitools.codegen.meta.features.DocumentationFeature;
2424
import org.openapitools.codegen.model.ModelMap;
2525
import org.openapitools.codegen.model.ModelsMap;
26+
import org.openapitools.codegen.model.OperationsMap;
2627

2728
import java.io.File;
28-
import java.util.HashMap;
29-
import java.util.List;
30-
import java.util.Map;
29+
import java.util.*;
3130

3231
public class JavaResteasyServerCodegen extends AbstractJavaJAXRSServerCodegen implements JbossFeature {
3332

@@ -163,6 +162,13 @@ public ModelsMap postProcessModelsEnum(ModelsMap objs) {
163162
return objs;
164163
}
165164

165+
@Override
166+
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
167+
objs = super.postProcessOperationsWithModels(objs, allModels);
168+
removeImport(objs, "java.util.List");
169+
return objs;
170+
}
171+
166172
public void setGenerateJbossDeploymentDescriptor(boolean generateJbossDeploymentDescriptor) {
167173
this.generateJbossDeploymentDescriptor = generateJbossDeploymentDescriptor;
168174
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ public NimClientCodegen() {
124124

125125
defaultIncludes = new HashSet<>(
126126
Arrays.asList(
127-
"array"
127+
"array",
128+
"map"
128129
)
129130
);
130131

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,7 @@
2323

2424
import java.io.File;
2525
import java.net.URL;
26-
import java.util.ArrayList;
27-
import java.util.Arrays;
28-
import java.util.EnumSet;
29-
import java.util.HashMap;
30-
import java.util.HashSet;
31-
import java.util.List;
32-
import java.util.Locale;
33-
import java.util.Map;
34-
import java.util.Objects;
35-
import java.util.Set;
26+
import java.util.*;
3627
import java.util.regex.Matcher;
3728
import java.util.stream.Collectors;
3829

@@ -874,6 +865,8 @@ public void setIsVoid(boolean isVoid) {
874865
objs.put("tagDescription", escapeText(firstTag.getDescription()));
875866
}
876867

868+
removeImport(objs, "java.util.List");
869+
877870
return objs;
878871
}
879872

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,6 +1770,28 @@ public void testReferencedHeader2() throws Exception {
17701770
.containsWithName("NotNull");
17711771
}
17721772

1773+
@Test
1774+
public void testReturnTypeMapping() throws IOException {
1775+
File output = Files.createTempDirectory("test").toFile();
1776+
output.deleteOnExit();
1777+
1778+
final CodegenConfigurator configurator = new CodegenConfigurator()
1779+
.setGeneratorName("java")
1780+
.setInputSpec("src/test/resources/3_0/issue14525.yaml")
1781+
.addTypeMapping("array","Stack")
1782+
.addImportMapping("Stack","java.util.Stack")
1783+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
1784+
1785+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
1786+
DefaultGenerator generator = new DefaultGenerator();
1787+
generator.opts(clientOptInput).generate();
1788+
1789+
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/org/openapitools/client/api/DefaultApi.java"),
1790+
"import java.util.Stack;"
1791+
);
1792+
1793+
}
1794+
17731795
@Test
17741796
public void testNativeClientExplodedQueryParamWithArrayProperty() throws IOException {
17751797
Map<String, Object> properties = new HashMap<>();
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Demo app
4+
version: 1.0.0
5+
paths:
6+
/demo:
7+
get:
8+
summary: Demo
9+
operationId: demo
10+
responses:
11+
'200':
12+
description: Demo response
13+
content:
14+
application/json:
15+
schema:
16+
type: array
17+
items:
18+
type: string

samples/client/petstore/cpp-qt/client/PFXUserApi.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "PFXOauth.h"
1919

2020
#include "PFXUser.h"
21-
#include <QList>
2221
#include <QString>
2322

2423
#include <QObject>

samples/client/petstore/cpp-restsdk/client/include/CppRestPetstoreClient/api/PetApi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "CppRestPetstoreClient/model/ApiResponse.h"
2626
#include "CppRestPetstoreClient/HttpContent.h"
2727
#include "CppRestPetstoreClient/model/Pet.h"
28+
#include <vector>
2829
#include <cpprest/details/basic_types.h>
2930
#include <boost/optional.hpp>
3031

samples/client/petstore/cpp-tiny/lib/service/UserApi.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <list>
1010

1111
#include "User.h"
12-
#include <list>
1312

1413
namespace Tiny {
1514

samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/UserApi.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.openapitools.api;
22

33
import org.openapitools.api.ApiUtils
4-
import java.util.List
54
import org.openapitools.model.User
65

76
class UserApi {

0 commit comments

Comments
 (0)