Skip to content

Commit 64197db

Browse files
lorenzleutgebkobylynskyi
authored andcommitted
Add generation of immutable models
1 parent 1e8debd commit 64197db

File tree

15 files changed

+235
-1
lines changed

15 files changed

+235
-1
lines changed

docs/codegen-options.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
| `generateAsyncApi` | Boolean | False | If true, then wrap type into `java.util.concurrent.CompletableFuture` or `subscriptionReturnType` |
1515
| `generateDataFetchingEnvironmentArgumentInApis` | Boolean | False | If true, then `graphql.schema.DataFetchingEnvironment env` will be added as a last argument to all methods of root type resolvers and field resolvers. |
1616
| `generateEqualsAndHashCode` | Boolean | False | Specifies whether generated model classes should have equals and hashCode methods defined. |
17+
| `generateImmutableModels` | Boolean | False | Specifies whether generated model classes should be immutable. |
1718
| `generateToString` | Boolean | False | Specifies whether generated model classes should have toString method defined. |
1819
| `apiNamePrefix` | String | Empty | Sets the prefix for GraphQL api classes (query, mutation, subscription). |
1920
| `apiNameSuffix` | String | Resolver | Sets the suffix for GraphQL api classes (query, mutation, subscription). |
@@ -100,4 +101,4 @@ Sample content of the file:
100101
"Price.amount": "java.math.BigDecimal"
101102
}
102103
}
103-
```
104+
```

plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode
5959
private Boolean generateApis = MappingConfigConstants.DEFAULT_GENERATE_APIS;
6060
private String modelValidationAnnotation;
6161
private Boolean generateEqualsAndHashCode = MappingConfigConstants.DEFAULT_EQUALS_AND_HASHCODE;
62+
private Boolean generateImmutableModels = MappingConfigConstants.DEFAULT_GENERATE_IMMUTABLE_MODELS;
6263
private Boolean generateToString = MappingConfigConstants.DEFAULT_TO_STRING;
6364
private Boolean generateAsyncApi = MappingConfigConstants.DEFAULT_GENERATE_ASYNC_APIS;
6465
private Boolean generateParameterizedFieldsResolvers = MappingConfigConstants.DEFAULT_GENERATE_PARAMETERIZED_FIELDS_RESOLVERS;
@@ -100,6 +101,7 @@ public void generate() throws Exception {
100101
mappingConfig.setSubscriptionReturnType(subscriptionReturnType);
101102
mappingConfig.setCustomAnnotationsMapping(customAnnotationsMapping);
102103
mappingConfig.setGenerateEqualsAndHashCode(generateEqualsAndHashCode);
104+
mappingConfig.setGenerateImmutableModels(generateImmutableModels);
103105
mappingConfig.setGenerateToString(generateToString);
104106
mappingConfig.setGenerateAsyncApi(generateAsyncApi);
105107
mappingConfig.setGenerateParameterizedFieldsResolvers(generateParameterizedFieldsResolvers);
@@ -359,6 +361,17 @@ public void setGenerateEqualsAndHashCode(Boolean generateEqualsAndHashCode) {
359361
this.generateEqualsAndHashCode = generateEqualsAndHashCode;
360362
}
361363

364+
@Input
365+
@Optional
366+
@Override
367+
public Boolean getGenerateImmutableModels() {
368+
return generateImmutableModels;
369+
}
370+
371+
public void setGenerateImmutableModels(Boolean generateImmutableModels) {
372+
this.generateImmutableModels = generateImmutableModels;
373+
}
374+
362375
@Input
363376
@Optional
364377
@Override

plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenCo
5959
@Parameter(defaultValue = MappingConfigConstants.DEFAULT_EQUALS_AND_HASHCODE_STRING)
6060
private boolean generateEqualsAndHashCode;
6161

62+
@Parameter(defaultValue = MappingConfigConstants.DEFAULT_GENERATE_IMMUTABLE_MODELS_STRING)
63+
private boolean generateImmutableModels;
64+
6265
@Parameter(defaultValue = MappingConfigConstants.DEFAULT_TO_STRING_STRING)
6366
private boolean generateToString;
6467

@@ -157,6 +160,7 @@ public void execute() throws MojoExecutionException {
157160
mappingConfig.setModelValidationAnnotation(modelValidationAnnotation);
158161
mappingConfig.setCustomAnnotationsMapping(customAnnotationsMapping != null ? customAnnotationsMapping : new HashMap<>());
159162
mappingConfig.setGenerateEqualsAndHashCode(generateEqualsAndHashCode);
163+
mappingConfig.setGenerateImmutableModels(generateImmutableModels);
160164
mappingConfig.setGenerateToString(generateToString);
161165
mappingConfig.setSubscriptionReturnType(subscriptionReturnType);
162166
mappingConfig.setGenerateAsyncApi(generateAsyncApi);
@@ -364,6 +368,15 @@ public void setGenerateEqualsAndHashCode(boolean generateEqualsAndHashCode) {
364368
this.generateEqualsAndHashCode = generateEqualsAndHashCode;
365369
}
366370

371+
@Override
372+
public Boolean getGenerateImmutableModels() {
373+
return generateImmutableModels;
374+
}
375+
376+
public void setGenerateImmutableModels(boolean generateImmutableModels) {
377+
this.generateImmutableModels = generateImmutableModels;
378+
}
379+
367380
@Override
368381
public Boolean getGenerateToString() {
369382
return generateToString;

src/main/java/com/kobylynskyi/graphql/codegen/GraphQLCodegen.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ private void initDefaultValues(MappingConfig mappingConfig) {
9292
if (mappingConfig.getParametrizedInputSuffix() == null) {
9393
mappingConfig.setParametrizedInputSuffix(MappingConfigConstants.DEFAULT_PARAMETRIZED_INPUT_SUFIX);
9494
}
95+
if (mappingConfig.getGenerateImmutableModels() == null) {
96+
mappingConfig.setGenerateImmutableModels(MappingConfigConstants.DEFAULT_GENERATE_IMMUTABLE_MODELS);
97+
}
9598
if (mappingConfig.getGenerateToString() == null) {
9699
mappingConfig.setGenerateToString(MappingConfigConstants.DEFAULT_TO_STRING);
97100
}

src/main/java/com/kobylynskyi/graphql/codegen/mapper/InputDefinitionToDataModelMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public static Map<String, Object> map(MappingContext mappingContext, ExtendedInp
3232
dataModel.put(FIELDS, InputValueDefinitionToParameterMapper.map(mappingContext, definition.getValueDefinitions(), definition.getName()));
3333
dataModel.put(BUILDER, mappingContext.getGenerateBuilder());
3434
dataModel.put(EQUALS_AND_HASH_CODE, mappingContext.getGenerateEqualsAndHashCode());
35+
dataModel.put(IMMUTABLE_MODELS, mappingContext.getGenerateImmutableModels());
3536
dataModel.put(TO_STRING, mappingContext.getGenerateToString());
3637
dataModel.put(TO_STRING_FOR_REQUEST, mappingContext.getGenerateClient());
3738
return dataModel;

src/main/java/com/kobylynskyi/graphql/codegen/mapper/TypeDefinitionToDataModelMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.CLASS_NAME;
2121
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.EQUALS_AND_HASH_CODE;
2222
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.FIELDS;
23+
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.IMMUTABLE_MODELS;
2324
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.IMPLEMENTS;
2425
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.JAVA_DOC;
2526
import static com.kobylynskyi.graphql.codegen.model.DataModelFields.PACKAGE;
@@ -53,6 +54,7 @@ public static Map<String, Object> map(MappingContext mappingContext,
5354
dataModel.put(FIELDS, getFields(mappingContext, definition, document));
5455
dataModel.put(BUILDER, mappingContext.getGenerateBuilder());
5556
dataModel.put(EQUALS_AND_HASH_CODE, mappingContext.getGenerateEqualsAndHashCode());
57+
dataModel.put(IMMUTABLE_MODELS, mappingContext.getGenerateImmutableModels());
5658
dataModel.put(TO_STRING, mappingContext.getGenerateToString());
5759
dataModel.put(TO_STRING_FOR_REQUEST, mappingContext.getGenerateClient());
5860
return dataModel;

src/main/java/com/kobylynskyi/graphql/codegen/model/DataModelFields.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public final class DataModelFields {
1616
public static final String OPERATIONS = "operations";
1717
public static final String BUILDER = "builder";
1818
public static final String EQUALS_AND_HASH_CODE = "equalsAndHashCode";
19+
public static final String IMMUTABLE_MODELS = "immutableModels";
1920
public static final String TO_STRING = "toString";
2021
public static final String TO_STRING_FOR_REQUEST = "toStringForRequest";
2122
public static final String JAVA_DOC = "javaDoc";

src/main/java/com/kobylynskyi/graphql/codegen/model/GraphQLCodegenConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@ public interface GraphQLCodegenConfiguration {
134134
*/
135135
Boolean getGenerateEqualsAndHashCode();
136136

137+
/**
138+
* Specifies whether generated model classes should be immutable.
139+
*
140+
* @return <b>true</b> if generated model classes should be immutable.
141+
*/
142+
Boolean getGenerateImmutableModels();
143+
137144
/**
138145
* Specifies whether generated model classes should have toString method defined.
139146
*

src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class MappingConfig implements GraphQLCodegenConfiguration, Combinable<Ma
3939
private Boolean generateBuilder;
4040
private Boolean generateEqualsAndHashCode;
4141
private Boolean generateToString;
42+
private Boolean generateImmutableModels;
4243
private Boolean generateAsyncApi;
4344
private Boolean generateParameterizedFieldsResolvers;
4445
private Boolean generateExtensionFieldsResolvers;
@@ -90,6 +91,7 @@ public void combine(MappingConfig source) {
9091
this.subscriptionReturnType = source.subscriptionReturnType != null ? source.subscriptionReturnType : this.subscriptionReturnType;
9192
this.generateBuilder = source.generateBuilder != null ? source.generateBuilder : this.generateBuilder;
9293
this.generateEqualsAndHashCode = source.generateEqualsAndHashCode != null ? source.generateEqualsAndHashCode : this.generateEqualsAndHashCode;
94+
this.generateImmutableModels = source.generateImmutableModels != null ? source.generateImmutableModels : this.generateImmutableModels;
9395
this.generateToString = source.generateToString != null ? source.generateToString : this.generateToString;
9496
this.generateAsyncApi = source.generateAsyncApi != null ? source.generateAsyncApi : this.generateAsyncApi;
9597
this.generateParameterizedFieldsResolvers = source.generateParameterizedFieldsResolvers != null ? source.generateParameterizedFieldsResolvers : this.generateParameterizedFieldsResolvers;

src/main/java/com/kobylynskyi/graphql/codegen/model/MappingConfigConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class MappingConfigConstants {
1313
public static final String DEFAULT_BUILDER_STRING = "true";
1414
public static final boolean DEFAULT_EQUALS_AND_HASHCODE = false;
1515
public static final String DEFAULT_EQUALS_AND_HASHCODE_STRING = "false";
16+
public static final boolean DEFAULT_GENERATE_IMMUTABLE_MODELS = false;
17+
public static final String DEFAULT_GENERATE_IMMUTABLE_MODELS_STRING = "false";
1618
public static final boolean DEFAULT_TO_STRING = false;
1719
public static final String DEFAULT_TO_STRING_STRING = "false";
1820
public static final boolean DEFAULT_GENERATE_PARAMETERIZED_FIELDS_RESOLVERS = true;

0 commit comments

Comments
 (0)