Skip to content

Commit 48ed1c9

Browse files
committed
Non-null Lists should be initialized
1 parent 034fc0d commit 48ed1c9

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

core/src/main/java/com/cosium/json_schema_to_java_record/JsonSchemaContent.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,17 @@ public TypeName writeJavaType(
156156
constructorBuilder.addParameter(parameterSpecBuilder.build());
157157

158158
if (!propertyType.isPrimitive() && required.contains(propertyName)) {
159-
compactConstructorBuilder.addStatement(
160-
"$T.requireNonNull($N)", Objects.class, propertyName);
159+
if (isList(propertyType)) {
160+
compactConstructorBuilder.addStatement(
161+
"$N = $T.ofNullable($N).orElseGet($T::of)",
162+
propertyName,
163+
Optional.class,
164+
propertyName,
165+
List.class);
166+
} else {
167+
compactConstructorBuilder.addStatement(
168+
"$T.requireNonNull($N)", Objects.class, propertyName);
169+
}
161170
}
162171
}
163172
typeBuilder
@@ -181,6 +190,18 @@ public TypeName writeJavaType(
181190
return className;
182191
}
183192

193+
private boolean isList(TypeName type) {
194+
ClassName className;
195+
if (type instanceof ClassName classNameCandidate) {
196+
className = classNameCandidate;
197+
} else if (type instanceof ParameterizedTypeName parameterizedTypeName) {
198+
className = parameterizedTypeName.rawType();
199+
} else {
200+
return false;
201+
}
202+
return className.canonicalName().equals(List.class.getCanonicalName());
203+
}
204+
184205
private void addJsonRelatedAnnotations(
185206
ParameterSpec.Builder parameterBuilder, String propertyName) {
186207

tests/src/test/java/com/cosium/json_schema_to_java_record_tests/case1/package-info.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
schemaRootFileLocations =
66
@JsonSchemaFileLocation(
77
moduleAndPackage = "com.cosium.json_schema_to_java_record_tests.case1",
8-
relativeName = "customer.json"),
8+
relativeName = "customers.json"),
99
schemaConfigurations = {
10+
@JsonSchemaConfiguration(
11+
schemaId = "customers",
12+
javaTypeQualifiedName = "com.cosium.json_schema_to_java_record_tests.case1.Customers"),
1013
@JsonSchemaConfiguration(
1114
schemaId = "customer",
1215
javaTypeQualifiedName = "com.cosium.json_schema_to_java_record_tests.case1.Customer"),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"$schema": "https://json-schema.org/draft/2020-12/schema",
3+
"$id": "customers",
4+
"type": "object",
5+
"properties": {
6+
"list": {
7+
"type": "array",
8+
"items": {
9+
"$ref": "classpath:/com/cosium/json_schema_to_java_record_tests/case1/customer.json"
10+
}
11+
}
12+
},
13+
"required": [
14+
"list"
15+
]
16+
}

0 commit comments

Comments
 (0)