diff --git a/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java b/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java index 4b3fe021e..ffab5c938 100644 --- a/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java +++ b/jsonschema2pojo-ant/src/main/java/org/jsonschema2pojo/ant/Jsonschema2PojoTask.java @@ -96,6 +96,8 @@ public class Jsonschema2PojoTask extends Task implements GenerationConfig { private boolean useCommonsLang3 = false; + private boolean initializeEmptyCollections = true; + /** * Execute this task (it's expected that all relevant setters will have been * called by Ant to provide task configuration before this method @@ -405,7 +407,18 @@ public void setUseJodaDates(boolean useJodaDates) { public void setUseCommonsLang3(boolean useCommonsLang3) { this.useCommonsLang3 = useCommonsLang3; } - + + + /** + * Sets the 'initializeEmptyCollections' property of this class + * + * @param initializeEmptyCollections + * Whether to initialize collections with empty instance or null. + */ + public void setInitializeEmptyCollections(boolean initializeEmptyCollections) { + this.initializeEmptyCollections = initializeEmptyCollections; + } + @Override public boolean isGenerateBuilders() { return generateBuilders; @@ -533,4 +546,9 @@ public FileFilter getFileFilter() { return new AllFileFilter(); } + @Override + public boolean isInitializeEmptyCollections() { + return initializeEmptyCollections; + } + } diff --git a/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html b/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html index a90f97269..015522ff8 100644 --- a/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html +++ b/jsonschema2pojo-ant/src/site/Jsonschema2PojoTask.html @@ -170,6 +170,11 @@

Parameters

Whether to use primitives (long, double, boolean) instead of wrapper types where possible when generating bean properties (has the side-effect of making those. No (default false) + + initializeEmptyCollections + Whether to initialize collections with empty instance or null. + Yes (default true) +

Examples

diff --git a/jsonschema2pojo-cli/src/main/java/org/jsonschema2pojo/cli/Arguments.java b/jsonschema2pojo-cli/src/main/java/org/jsonschema2pojo/cli/Arguments.java index bb9ce4fee..56c9a3d68 100644 --- a/jsonschema2pojo-cli/src/main/java/org/jsonschema2pojo/cli/Arguments.java +++ b/jsonschema2pojo-cli/src/main/java/org/jsonschema2pojo/cli/Arguments.java @@ -100,6 +100,9 @@ public class Arguments implements GenerationConfig { @Parameter(names = { "-c3", "--commons-lang3" }, description = "Whether to use commons-lang 3.x imports instead of commons-lang 2.x imports when adding equals, hashCode and toString methods.") private boolean useCommonsLang3 = false; + @Parameter(names = { "-N", "--null-collections" }, description = "Initialize Set and List fields to null instead of an empty collection.") + private boolean omitInitializeEmptyCollections = false; + private static final int EXIT_OKAY = 0; private static final int EXIT_ERROR = 1; @@ -234,4 +237,9 @@ public FileFilter getFileFilter() { return new AllFileFilter(); } + @Override + public boolean isInitializeEmptyCollections() { + return !omitInitializeEmptyCollections; + } + } diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/DefaultGenerationConfig.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/DefaultGenerationConfig.java index 5908927bb..a0748f35d 100644 --- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/DefaultGenerationConfig.java +++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/DefaultGenerationConfig.java @@ -157,7 +157,7 @@ public boolean isRemoveOldOutput() { public boolean isUseJodaDates() { return false; } - + @Override public boolean isUseCommonsLang3() { return false; @@ -167,4 +167,12 @@ public boolean isUseCommonsLang3() { public FileFilter getFileFilter() { return new AllFileFilter(); } -} + + /** + * @return true + */ + @Override + public boolean isInitializeEmptyCollections() { + return true; + } +} \ No newline at end of file diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java index fbb8514e9..547f69deb 100644 --- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java +++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/GenerationConfig.java @@ -213,5 +213,11 @@ public interface GenerationConfig { * @return the file filter use when scanning for schema files. */ FileFilter getFileFilter(); - + + /** + * Gets the 'initializeEmptyCollections' configuration option. + * + * @return Whether to initialize collections with empty instance or null. + */ + boolean isInitializeEmptyCollections(); } diff --git a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/DefaultRule.java b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/DefaultRule.java index 52c378ad7..32108f296 100644 --- a/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/DefaultRule.java +++ b/jsonschema2pojo-core/src/main/java/org/jsonschema2pojo/rules/DefaultRule.java @@ -172,6 +172,8 @@ private JExpression getDefaultList(JType fieldType, JsonNode node) { invokeAsList.arg(getDefaultValue(listGenericType, defaultValue)); } newListImpl.arg(invokeAsList); + } else if (!ruleFactory.getGenerationConfig().isInitializeEmptyCollections()) { + return JExpr._null(); } return newListImpl; @@ -209,6 +211,8 @@ private JExpression getDefaultSet(JType fieldType, JsonNode node) { invokeAsList.arg(getDefaultValue(setGenericType, defaultValue)); } newSetImpl.arg(invokeAsList); + } else if (!ruleFactory.getGenerationConfig().isInitializeEmptyCollections()) { + return JExpr._null(); } return newSetImpl; diff --git a/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy b/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy index bee7c038f..a1accdcdb 100644 --- a/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy +++ b/jsonschema2pojo-gradle-plugin/src/main/groovy/org/jsonschema2pojo/gradle/JsonSchemaExtension.groovy @@ -49,6 +49,7 @@ public class JsonSchemaExtension implements GenerationConfig { boolean useJodaDates boolean useCommonsLang3 FileFilter fileFilter + boolean initializeEmptyCollections public JsonSchemaExtension() { // See DefaultGenerationConfig @@ -69,6 +70,7 @@ public class JsonSchemaExtension implements GenerationConfig { useJodaDates = false useCommonsLang3 = false fileFilter = new AllFileFilter() + initializeEmptyCollections = true } @Override diff --git a/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java b/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java index 55071a08b..8af5dd0bb 100644 --- a/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java +++ b/jsonschema2pojo-maven-plugin/src/main/java/org/jsonschema2pojo/maven/Jsonschema2PojoMojo.java @@ -309,6 +309,14 @@ public class Jsonschema2PojoMojo extends AbstractMojo implements GenerationConfi */ private boolean useCommonsLang3 = false; + /** + * Whether to initialize collections with empty instance or null. + * + * @parameter expression="${jsonschema2pojo.initializeEmptyCollections}" default="true" + * @since + */ + private boolean initializeEmptyCollections = true; + /** * List of file patterns to include. * @@ -513,6 +521,11 @@ public FileFilter getFileFilter() { return fileFilter; } + @Override + public boolean isInitializeEmptyCollections() { + return initializeEmptyCollections; + } + boolean filteringEnabled() { return !((includes == null || includes.length == 0) && (excludes == null || excludes.length == 0)); }