Skip to content

Commit 20692aa

Browse files
authored
Properly handle mappings and import mappings after processOpts (#16216)
* make Java imports overridable * fix for other dateLibraries * complete core fix * adapt test - step 1/2 * add unit test * adapt test - step 2/2 * remove accidentally added file * final small clean-up
1 parent 35f5852 commit 20692aa

File tree

9 files changed

+66
-14
lines changed

9 files changed

+66
-14
lines changed

bin/configs/java-native-echo-api.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,8 @@ templateDir: modules/openapi-generator/src/main/resources/Java
66
additionalProperties:
77
artifactId: echo-api-native
88
hideGenerationTimestamp: "true"
9+
10+
typeMappings:
11+
OffsetDateTime: "Instant"
12+
importMappings:
13+
OffsetDateTime: "java.time.Instant"

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222

2323
import org.openapitools.codegen.api.TemplateDefinition;
2424
import org.openapitools.codegen.auth.AuthParser;
25+
import org.openapitools.codegen.config.GeneratorSettings;
2526

2627
import java.util.List;
2728

2829
public class ClientOptInput {
2930
private CodegenConfig config;
31+
private GeneratorSettings generatorSettings;
3032
private OpenAPI openAPI;
3133
private List<AuthorizationValue> auths;
3234
private List<TemplateDefinition> userDefinedTemplates;
@@ -36,6 +38,11 @@ public ClientOptInput openAPI(OpenAPI openAPI) {
3638
return this;
3739
}
3840

41+
public ClientOptInput generatorSettings(GeneratorSettings generatorSettings) {
42+
this.setGeneratorSettings(generatorSettings);
43+
return this;
44+
}
45+
3946
public ClientOptInput config(CodegenConfig codegenConfig) {
4047
this.setConfig(codegenConfig);
4148
return this;
@@ -92,6 +99,20 @@ public void setConfig(CodegenConfig config) {
9299
}
93100
}
94101

102+
@Deprecated
103+
public GeneratorSettings getGeneratorSettings() {
104+
return generatorSettings;
105+
}
106+
107+
@Deprecated
108+
private void setGeneratorSettings(GeneratorSettings generatorSettings) {
109+
this.generatorSettings = generatorSettings;
110+
// TODO: ClientOptInputs needs to be retired
111+
if (this.openAPI != null) {
112+
this.config.setOpenAPI(this.openAPI);
113+
}
114+
}
115+
95116
@Deprecated
96117
public OpenAPI getOpenAPI() {
97118
return openAPI;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.openapitools.codegen.api.TemplateDefinition;
3737
import org.openapitools.codegen.api.TemplatePathLocator;
3838
import org.openapitools.codegen.api.TemplateProcessor;
39+
import org.openapitools.codegen.config.GeneratorSettings;
3940
import org.openapitools.codegen.config.GlobalSettings;
4041
import org.openapitools.codegen.api.TemplatingEngineAdapter;
4142
import org.openapitools.codegen.api.TemplateFileType;
@@ -253,6 +254,10 @@ void configureGeneratorProperties() {
253254
}
254255

255256
config.processOpts();
257+
if (opts != null && opts.getGeneratorSettings() != null) {
258+
config.typeMapping().putAll(opts.getGeneratorSettings().getTypeMappings());
259+
config.importMapping().putAll(opts.getGeneratorSettings().getImportMappings());
260+
}
256261

257262
// normalize the spec
258263
try {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ public ClientOptInput toClientOptInput() {
753753

754754
ClientOptInput input = new ClientOptInput()
755755
.config(config)
756+
.generatorSettings(generatorSettings)
756757
.userDefinedTemplates(userDefinedTemplates);
757758

758759
return input.openAPI((OpenAPI)context.getSpecDocument());

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,26 @@ public void testGeneratedAuthClassesJersey() throws IOException {
244244
TestUtils.ensureContainsFile(files, output, "src/main/java/xyz/abcdef/auth/HttpSignatureAuth.java");
245245
}
246246

247+
@Test
248+
public void testImportMappingResult() throws IOException {
249+
File output = Files.createTempDirectory("test").toFile();
250+
251+
final CodegenConfigurator configurator = new CodegenConfigurator()
252+
.addTypeMapping("OffsetDateTime", "Instant")
253+
.addImportMapping("OffsetDateTime", "java.time.Instant")
254+
.setGeneratorName("java")
255+
.setInputSpec("src/test/resources/3_0/echo_api.yaml")
256+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
257+
258+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
259+
260+
DefaultGenerator generator = new DefaultGenerator();
261+
262+
List<File> files = generator.opts(clientOptInput).generate();
263+
264+
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/org/openapitools/client/api/QueryApi.java"), "import java.time.Instant;");
265+
}
266+
247267
@Test
248268
public void testSupportedSecuritySchemesJersey() throws Exception {
249269
final JavaClientCodegen codegen = new JavaClientCodegen();

samples/client/echo_api/java/native/docs/DataQuery.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
|------------ | ------------- | ------------- | -------------|
1010
|**suffix** | **String** | test suffix | [optional] |
1111
|**text** | **String** | Some text containing white spaces | [optional] |
12-
|**date** | **OffsetDateTime** | A date | [optional] |
12+
|**date** | **Instant** | A date | [optional] |
1313

1414

1515

samples/client/echo_api/java/native/docs/QueryApi.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public class Example {
181181
defaultClient.setBasePath("http://localhost:3000");
182182

183183
QueryApi apiInstance = new QueryApi(defaultClient);
184-
OffsetDateTime datetimeQuery = OffsetDateTime.now(); // OffsetDateTime |
184+
Instant datetimeQuery = new Instant(); // Instant |
185185
LocalDate dateQuery = LocalDate.now(); // LocalDate |
186186
String stringQuery = "stringQuery_example"; // String |
187187
try {
@@ -203,7 +203,7 @@ public class Example {
203203

204204
| Name | Type | Description | Notes |
205205
|------------- | ------------- | ------------- | -------------|
206-
| **datetimeQuery** | **OffsetDateTime**| | [optional] |
206+
| **datetimeQuery** | **Instant**| | [optional] |
207207
| **dateQuery** | **LocalDate**| | [optional] |
208208
| **stringQuery** | **String**| | [optional] |
209209

@@ -251,7 +251,7 @@ public class Example {
251251
defaultClient.setBasePath("http://localhost:3000");
252252

253253
QueryApi apiInstance = new QueryApi(defaultClient);
254-
OffsetDateTime datetimeQuery = OffsetDateTime.now(); // OffsetDateTime |
254+
Instant datetimeQuery = new Instant(); // Instant |
255255
LocalDate dateQuery = LocalDate.now(); // LocalDate |
256256
String stringQuery = "stringQuery_example"; // String |
257257
try {
@@ -275,7 +275,7 @@ public class Example {
275275

276276
| Name | Type | Description | Notes |
277277
|------------- | ------------- | ------------- | -------------|
278-
| **datetimeQuery** | **OffsetDateTime**| | [optional] |
278+
| **datetimeQuery** | **Instant**| | [optional] |
279279
| **dateQuery** | **LocalDate**| | [optional] |
280280
| **stringQuery** | **String**| | [optional] |
281281

samples/client/echo_api/java/native/src/main/java/org/openapitools/client/api/QueryApi.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import org.openapitools.client.model.DataQuery;
2121
import java.time.LocalDate;
22-
import java.time.OffsetDateTime;
22+
import java.time.Instant;
2323
import org.openapitools.client.model.Pet;
2424
import org.openapitools.client.model.StringEnumRef;
2525
import org.openapitools.client.model.TestQueryStyleDeepObjectExplodeTrueObjectAllOfQueryObjectParameter;
@@ -192,7 +192,7 @@ private HttpRequest.Builder testEnumRefStringRequestBuilder(StringEnumRef enumRe
192192
* @return String
193193
* @throws ApiException if fails to make API call
194194
*/
195-
public String testQueryDatetimeDateString(OffsetDateTime datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
195+
public String testQueryDatetimeDateString(Instant datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
196196
ApiResponse<String> localVarResponse = testQueryDatetimeDateStringWithHttpInfo(datetimeQuery, dateQuery, stringQuery);
197197
return localVarResponse.getData();
198198
}
@@ -206,7 +206,7 @@ public String testQueryDatetimeDateString(OffsetDateTime datetimeQuery, LocalDat
206206
* @return ApiResponse&lt;String&gt;
207207
* @throws ApiException if fails to make API call
208208
*/
209-
public ApiResponse<String> testQueryDatetimeDateStringWithHttpInfo(OffsetDateTime datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
209+
public ApiResponse<String> testQueryDatetimeDateStringWithHttpInfo(Instant datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
210210
HttpRequest.Builder localVarRequestBuilder = testQueryDatetimeDateStringRequestBuilder(datetimeQuery, dateQuery, stringQuery);
211211
try {
212212
HttpResponse<InputStream> localVarResponse = memberVarHttpClient.send(
@@ -243,7 +243,7 @@ public ApiResponse<String> testQueryDatetimeDateStringWithHttpInfo(OffsetDateTim
243243
}
244244
}
245245

246-
private HttpRequest.Builder testQueryDatetimeDateStringRequestBuilder(OffsetDateTime datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
246+
private HttpRequest.Builder testQueryDatetimeDateStringRequestBuilder(Instant datetimeQuery, LocalDate dateQuery, String stringQuery) throws ApiException {
247247

248248
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
249249

samples/client/echo_api/java/native/src/main/java/org/openapitools/client/model/DataQuery.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import com.fasterxml.jackson.annotation.JsonCreator;
2525
import com.fasterxml.jackson.annotation.JsonTypeName;
2626
import com.fasterxml.jackson.annotation.JsonValue;
27-
import java.time.OffsetDateTime;
27+
import java.time.Instant;
2828
import java.util.ArrayList;
2929
import java.util.Arrays;
3030
import java.util.List;
@@ -49,7 +49,7 @@ public class DataQuery extends Query {
4949
private String text;
5050

5151
public static final String JSON_PROPERTY_DATE = "date";
52-
private OffsetDateTime date;
52+
private Instant date;
5353

5454
public DataQuery() {
5555
}
@@ -104,7 +104,7 @@ public void setText(String text) {
104104
}
105105

106106

107-
public DataQuery date(OffsetDateTime date) {
107+
public DataQuery date(Instant date) {
108108
this.date = date;
109109
return this;
110110
}
@@ -117,14 +117,14 @@ public DataQuery date(OffsetDateTime date) {
117117
@JsonProperty(JSON_PROPERTY_DATE)
118118
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
119119

120-
public OffsetDateTime getDate() {
120+
public Instant getDate() {
121121
return date;
122122
}
123123

124124

125125
@JsonProperty(JSON_PROPERTY_DATE)
126126
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
127-
public void setDate(OffsetDateTime date) {
127+
public void setDate(Instant date) {
128128
this.date = date;
129129
}
130130

0 commit comments

Comments
 (0)