Skip to content

Commit

Permalink
Fix hashCode for additionalProperties, fix #336 (#347)
Browse files Browse the repository at this point in the history
* Add test case for #336

* Fix hashCode for `additionalProperties`, fix #336
  • Loading branch information
sschnabe committed Dec 25, 2023
1 parent f282b08 commit ec1f90e
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 1 deletion.
91 changes: 91 additions & 0 deletions gen/main/java/issue/_336/ServiceScopes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package issue._336;

@jakarta.annotation.Generated("org.openapitools.codegen.languages.MicronautCodegen")
@io.micronaut.serde.annotation.Serdeable
public class ServiceScopes {

@com.fasterxml.jackson.annotation.JsonProperty("foo")
@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
private java.lang.String foo;

@com.fasterxml.jackson.annotation.JsonProperty("bar")
@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
private java.lang.String bar;

private java.util.Map<java.lang.String, java.lang.String> additionalProperties;

// methods

@Override
public boolean equals(Object object) {
if (object == this) {
return true;
}
if (object == null || getClass() != object.getClass()) {
return false;
}
ServiceScopes other = (ServiceScopes) object;
return java.util.Objects.equals(this.additionalProperties, other.additionalProperties)
&& java.util.Objects.equals(foo, other.foo)
&& java.util.Objects.equals(bar, other.bar);
}

@Override
public int hashCode() {
return java.util.Objects.hash(this.additionalProperties, foo, bar);
}

@Override
public java.lang.String toString() {
return new java.lang.StringBuilder()
.append("ServiceScopes[")
.append("additionalProperties=").append(this.additionalProperties)
.append("foo=").append(foo).append(",")
.append("bar=").append(bar)
.append("]")
.toString();
}

// fluent

public ServiceScopes foo(java.lang.String newFoo) {
this.foo = newFoo;
return this;
}

public ServiceScopes bar(java.lang.String newBar) {
this.bar = newBar;
return this;
}

@com.fasterxml.jackson.annotation.JsonAnyGetter
public java.util.Map<java.lang.String, java.lang.String> getAdditionalProperties() {
return additionalProperties;
}

@com.fasterxml.jackson.annotation.JsonAnySetter
public void setAdditionalProperties(java.lang.String propertyKey, java.lang.String value) {
if (this.additionalProperties == null) {
this.additionalProperties = new java.util.HashMap<>();
}
this.additionalProperties.put(propertyKey, value);
}

// getter/setter

public java.lang.String getFoo() {
return foo;
}

public void setFoo(java.lang.String newFoo) {
this.foo = newFoo;
}

public java.lang.String getBar() {
return bar;
}

public void setBar(java.lang.String newBar) {
this.bar = newBar;
}
}
2 changes: 1 addition & 1 deletion src/main/resources/Micronaut/modelPojo.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public{{#sealed}}{{#interfaceModels}} final{{/interfaceModels}}{{/sealed}} class

@Override
public int hashCode() {
return java.util.Objects.hash({{#vendorExtensions.additionalPropertiesMap}}this.additionalProperties{{#vars}}, {{/vars}}{{/vendorExtensions.additionalPropertiesMap}}{{^allVars}}{{#discriminator}}{{discriminator.propertyGetter}}(){{/discriminator}}{{/allVars}}{{#allVars}}{{^isFile}}{{^isByteArray}}{{name}}{{/isByteArray}}{{/isFile}}{{#isByteArray}}java.util.Arrays.hashCode({{name}}){{/isByteArray}}{{#isFile}}java.util.Arrays.hashCode({{name}}){{/isFile}}{{^-last}}, {{/-last}}{{#-last}}{{#discriminator}}, {{discriminator.propertyGetter}}(){{/discriminator}}{{/-last}}{{/allVars}});
return java.util.Objects.hash({{#vendorExtensions.additionalPropertiesMap}}this.additionalProperties{{#hasVars}}, {{/hasVars}}{{/vendorExtensions.additionalPropertiesMap}}{{^allVars}}{{#discriminator}}{{discriminator.propertyGetter}}(){{/discriminator}}{{/allVars}}{{#allVars}}{{^isFile}}{{^isByteArray}}{{name}}{{/isByteArray}}{{/isFile}}{{#isByteArray}}java.util.Arrays.hashCode({{name}}){{/isByteArray}}{{#isFile}}java.util.Arrays.hashCode({{name}}){{/isFile}}{{^-last}}, {{/-last}}{{#-last}}{{#discriminator}}, {{discriminator.propertyGetter}}(){{/discriminator}}{{/-last}}{{/allVars}});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ void modelWithSuffix() {
generate(configurator("src/test/resources/openapi/issue-318.yaml", "issue._318").setModelNameSuffix("Dto"));
}

@DisplayName("model with additional properties and multiple properties generate invalid hashcode/equals")
@Test
void modelWithAdditionapPropertiesAndMultipleProperties() {
generate(configurator("src/test/resources/openapi/issue-336.yaml", "issue._336").setGenerateAliasAsModel(true));
}

static void generate(CodegenConfigurator configurator) {
var gen = new DefaultGenerator();
gen.setGenerateMetadata(false);
Expand Down
18 changes: 18 additions & 0 deletions src/test/resources/openapi/issue-336.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
openapi: 3.0.3
info:
title: Spec for <https://github.com/kokuwaio/micronaut-openapi-codegen/issues/336>
version: "1"
paths: {}
components:
schemas:
ServiceScopes:
type: object
properties:
foo:
type: string
bar:
type: string
additionalProperties:
$ref: "#/components/schemas/ServiceScopesEntry"
ServiceScopesEntry:
type: string

0 comments on commit ec1f90e

Please sign in to comment.