Skip to content

Commit 7ca49b4

Browse files
committed
Fix hashCode for additionalProperties
1 parent e8ae249 commit 7ca49b4

File tree

6 files changed

+68
-3
lines changed

6 files changed

+68
-3
lines changed

modules/openapi-generator/src/main/resources/Java/libraries/feign/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
280280
return HashCodeBuilder.reflectionHashCode(this);
281281
{{/useReflectionEqualsHashCode}}
282282
{{^useReflectionEqualsHashCode}}
283-
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}, additionalProperties{{/additionalPropertiesType}});
283+
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}{{#hasVars}}, {{/hasVars}}{{^hasVars}}{{#parent}}, {{/parent}}{{/hasVars}}additionalProperties{{/additionalPropertiesType}});
284284
{{/useReflectionEqualsHashCode}}
285285
}{{#vendorExtensions.x-jackson-optional-nullable-helpers}}
286286

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/pojoOverrides.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
return HashCodeBuilder.reflectionHashCode(this);
2929
{{/useReflectionEqualsHashCode}}
3030
{{^useReflectionEqualsHashCode}}
31-
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}});
31+
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}{{#hasVars}}, {{/hasVars}}{{^hasVars}}{{#parent}}, {{/parent}}{{/hasVars}}additionalProperties{{/additionalPropertiesType}});
3232
{{/useReflectionEqualsHashCode}}
3333
}{{#vendorExtensions.x-jackson-optional-nullable-helpers}}
3434

modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
321321
return HashCodeBuilder.reflectionHashCode(this);
322322
{{/useReflectionEqualsHashCode}}
323323
{{^useReflectionEqualsHashCode}}
324-
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}, additionalProperties{{/additionalPropertiesType}});
324+
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}{{#hasVars}}, {{/hasVars}}{{^hasVars}}{{#parent}}, {{/parent}}{{/hasVars}}additionalProperties{{/additionalPropertiesType}});
325325
{{/useReflectionEqualsHashCode}}
326326
}{{#vendorExtensions.x-jackson-optional-nullable-helpers}}
327327

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.openapitools.codegen.model.OperationsMap;
4242
import org.openapitools.codegen.testutils.ConfigAssert;
4343
import org.testng.annotations.DataProvider;
44+
import org.testng.annotations.Parameters;
4445
import org.testng.annotations.Test;
4546

4647
import java.io.File;
@@ -3476,4 +3477,33 @@ public void testEnumWithImplements() {
34763477

34773478
JavaFileAssert.assertThat(files.get("Type.java")).fileContains("Type implements java.io.Serializable {");
34783479
}
3480+
3481+
@DataProvider(name = "javaClientLibrariesForHashCodeTest")
3482+
public Object[][] javaClientLibraries() {
3483+
return new Object[][] {
3484+
{JavaClientCodegen.RESTTEMPLATE, "Objects.hash(additionalProperties)" },
3485+
{JavaClientCodegen.NATIVE, "Objects.hash(super.hashCode(), additionalProperties)"},
3486+
{JavaClientCodegen.OKHTTP_GSON, "Objects.hash(additionalProperties)" },
3487+
{JavaClientCodegen.MICROPROFILE, "Objects.hash(super.hashCode(), additionalProperties)" },
3488+
{JavaClientCodegen.JERSEY2, "Objects.hash(additionalProperties)" },
3489+
{JavaClientCodegen.JERSEY3, "Objects.hash(additionalProperties)" },
3490+
{JavaClientCodegen.FEIGN, "Objects.hash(additionalProperties)" },
3491+
};
3492+
}
3493+
3494+
@Test(dataProvider = "javaClientLibrariesForHashCodeTest")
3495+
public void testAdditionalPropertiesWithGnerateAliasAsModelGenerateCorrectHashCode(String library, String hashCode) {
3496+
final Path output = newTempFolder();
3497+
final CodegenConfigurator configurator = new CodegenConfigurator()
3498+
.setGeneratorName("java")
3499+
.setGenerateAliasAsModel(true)
3500+
.setLibrary(library)
3501+
.setInputSpec("src/test/resources/3_0/additionalProperties.yaml")
3502+
.setOutputDir(output.toString().replace("\\", "/"));
3503+
3504+
Map<String, File> files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate()
3505+
.stream().collect(Collectors.toMap(File::getName, Function.identity()));
3506+
3507+
JavaFileAssert.assertThat(files.get("SampleObject.java")).fileContains(hashCode);
3508+
}
34793509
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5383,4 +5383,19 @@ public void testEnumWithImplements() {
53835383

53845384
JavaFileAssert.assertThat(files.get("Type.java")).fileContains("Type implements java.io.Serializable {");
53855385
}
5386+
5387+
@Test
5388+
public void testAdditionalPropertiesWithGnerateAliasAsModelGenerateCorrectHashCode() {
5389+
final Path output = newTempFolder();
5390+
final CodegenConfigurator configurator = new CodegenConfigurator()
5391+
.setGeneratorName("spring")
5392+
.setGenerateAliasAsModel(true)
5393+
.setInputSpec("src/test/resources/3_0/additionalProperties.yaml")
5394+
.setOutputDir(output.toString().replace("\\", "/"));
5395+
5396+
Map<String, File> files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate()
5397+
.stream().collect(Collectors.toMap(File::getName, Function.identity()));
5398+
5399+
JavaFileAssert.assertThat(files.get("SampleObject.java")).fileContains(" return Objects.hash(additionalProperties)");
5400+
}
53865401
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
openapi: 3.0.0
2+
info:
3+
title: "test for additionalProperties"
4+
version: 1.0.0
5+
paths:
6+
/test:
7+
get:
8+
responses:
9+
"200":
10+
description: test
11+
content:
12+
application/json:
13+
schema:
14+
$ref: '#/components/schemas/SampleObject'
15+
components:
16+
schemas:
17+
SampleObject:
18+
type: object
19+
additionalProperties:
20+
type: object

0 commit comments

Comments
 (0)