diff --git a/pom.xml b/pom.xml
index 08be4dc..06ad918 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,7 @@
3.2.1
2.5.3
3.2.0
+ 3.0.0-M5
src/etc/header.txt
@@ -153,6 +154,12 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin-version}
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -352,6 +359,11 @@
org.apache.maven.plugins
maven-release-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java
index 5dad59d..8bd28fd 100644
--- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java
+++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/CollectionBuilderUtils.java
@@ -109,6 +109,10 @@ class CollectionBuilderUtils {
return Optional.empty();
}
+ boolean isImmutableCollection(RecordClassType component) {
+ return useImmutableCollections && (isList(component) || isMap(component) || isSet(component) || component.rawTypeName().equals(collectionType));
+ }
+
boolean isList(RecordClassType component) {
return component.rawTypeName().equals(listType);
}
diff --git a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java
index aff7b09..6ccd120 100644
--- a/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java
+++ b/record-builder-processor/src/main/java/io/soabase/recordbuilder/processor/InternalRecordBuilderProcessor.java
@@ -371,8 +371,10 @@ class InternalRecordBuilderProcessor {
private void addNullCheckCodeBlock(CodeBlock.Builder builder, int index) {
if (metaData.interpretNotNulls()) {
var component = recordComponents.get(index);
- if (!component.typeName().isPrimitive() && isNullAnnotated(component)) {
- builder.addStatement("$T.requireNonNull($L, $S)", Objects.class, component.name(), component.name() + " is required");
+ if (!collectionBuilderUtils.isImmutableCollection(component)) {
+ if (!component.typeName().isPrimitive() && isNullAnnotated(component)) {
+ builder.addStatement("$T.requireNonNull($L, $S)", Objects.class, component.name(), component.name() + " is required");
+ }
}
}
}
@@ -521,6 +523,16 @@ class InternalRecordBuilderProcessor {
*/
var codeBuilder = CodeBlock.builder();
+
+ IntStream.range(0, recordComponents.size()).forEach(index -> {
+ var recordComponent = recordComponents.get(index);
+ if (collectionBuilderUtils.isImmutableCollection(recordComponent)) {
+ codeBuilder.add("$[$L = ", recordComponent.name());
+ collectionBuilderUtils.add(codeBuilder, recordComponents.get(index));
+ codeBuilder.add(";\n$]");
+ }
+ });
+
addNullCheckCodeBlock(codeBuilder);
codeBuilder.add("$[return ");
if (metaData.useValidationApi()) {
@@ -531,7 +543,7 @@ class InternalRecordBuilderProcessor {
if (index > 0) {
codeBuilder.add(", ");
}
- collectionBuilderUtils.add(codeBuilder, recordComponents.get(index));
+ codeBuilder.add("$L", recordComponents.get(index).name());
});
codeBuilder.add(")");
if (metaData.useValidationApi()) {
diff --git a/record-builder-test/src/main/java/io/soabase/recordbuilder/test/FullRecord.java b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/FullRecord.java
index a46b5eb..70b75ff 100644
--- a/record-builder-test/src/main/java/io/soabase/recordbuilder/test/FullRecord.java
+++ b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/FullRecord.java
@@ -22,5 +22,5 @@ import java.util.List;
import java.util.Map;
@RecordBuilderFull
-public record FullRecord(@NotNull List numbers, @NotNull Map fullRecords) {
+public record FullRecord(@NotNull List numbers, @NotNull Map fullRecords, @NotNull String justAString) {
}
diff --git a/record-builder-test/src/main/java/io/soabase/recordbuilder/test/RequiredRecord.java b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/RequiredRecord.java
index 0e622bb..317e220 100644
--- a/record-builder-test/src/main/java/io/soabase/recordbuilder/test/RequiredRecord.java
+++ b/record-builder-test/src/main/java/io/soabase/recordbuilder/test/RequiredRecord.java
@@ -18,8 +18,9 @@ package io.soabase.recordbuilder.test;
import io.soabase.recordbuilder.core.RecordBuilder;
import javax.validation.constraints.NotNull;
+import java.util.List;
@RecordBuilder.Options(interpretNotNulls = true)
@RecordBuilder
-public record RequiredRecord(@NotNull String hey, @NotNull int i) implements RequiredRecordBuilder.With {
+public record RequiredRecord(@NotNull String hey, @NotNull int i, @NotNull List l) implements RequiredRecordBuilder.With {
}
diff --git a/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestRecordBuilderFull.java b/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestRecordBuilderFull.java
index b0a7ec3..afbccb0 100644
--- a/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestRecordBuilderFull.java
+++ b/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestRecordBuilderFull.java
@@ -20,11 +20,15 @@ import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
class TestRecordBuilderFull {
@Test
void testNonNull() {
- Assertions.assertThrows(NullPointerException.class, () -> FullRecordBuilder.builder().build());
+ var record = FullRecordBuilder.builder().justAString("").build();
+ Assertions.assertEquals(List.of(), record.numbers());
+ Assertions.assertEquals(Map.of(), record.fullRecords());
}
@Test
@@ -32,6 +36,7 @@ class TestRecordBuilderFull {
var record = FullRecordBuilder.builder()
.fullRecords(new HashMap<>())
.numbers(new ArrayList<>())
+ .justAString("")
.build();
Assertions.assertThrows(UnsupportedOperationException.class, () -> record.fullRecords().put(1, record));
Assertions.assertThrows(UnsupportedOperationException.class, () -> record.numbers().add(1));
diff --git a/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestValidation.java b/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestValidation.java
index 76c46b0..174d3d8 100644
--- a/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestValidation.java
+++ b/record-builder-test/src/test/java/io/soabase/recordbuilder/test/TestValidation.java
@@ -19,6 +19,7 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import javax.validation.ValidationException;
+import java.util.List;
class TestValidation {
@Test
@@ -33,7 +34,7 @@ class TestValidation {
@Test
void testNotNullsWithNewProperty() {
- var valid = RequiredRecordBuilder.builder().hey("hey").i(1).build();
+ var valid = RequiredRecordBuilder.builder().hey("hey").i(1).l(List.of()).build();
Assertions.assertThrows(NullPointerException.class, () -> valid.withHey(null));
}