Allow components stream method to work with null fields (#85)

Co-authored-by: Madis Parn <madis.parn@topia.com>
This commit is contained in:
Madis Pärn
2022-01-22 09:56:39 +02:00
committed by GitHub
parent 13959dee2a
commit 3954499d4b
2 changed files with 30 additions and 4 deletions

View File

@@ -237,7 +237,6 @@ class InternalRecordBuilderProcessor {
codeBlockBuilder.add(";$]");
var methodName = getWithMethodName(component, metaData.withClassMethodPrefix());
var singleItemsMetaData = collectionBuilderUtils.singleItemsMetaData(component, STANDARD_FOR_SETTER);
var parameterSpecBuilder = ParameterSpec.builder(component.typeName(), component.name());
addConstructorAnnotations(component, parameterSpecBuilder);
var methodSpec = MethodSpec.methodBuilder(methodName)
@@ -598,8 +597,8 @@ class InternalRecordBuilderProcessor {
Adds a static method that converts a record instance into a stream of its component parts
public static Stream<Map.Entry<String, Object>> stream(MyRecord record) {
return Stream.of(Map.entry("p1", record.p1()),
Map.entry("p2", record.p2()));
return Stream.of(new AbstractMap.SimpleImmutableEntry<>("p1", record.p1()),
new AbstractMap.SimpleImmutableEntry<>("p2", record.p2()));
}
*/
var codeBuilder = CodeBlock.builder().add("return $T.of(", Stream.class);
@@ -608,7 +607,7 @@ class InternalRecordBuilderProcessor {
codeBuilder.add(",\n ");
}
var name = recordComponents.get(index).name();
codeBuilder.add("$T.entry($S, record.$L())", Map.class, name, name);
codeBuilder.add("new $T<>($S, record.$L())", AbstractMap.SimpleImmutableEntry.class, name, name);
});
codeBuilder.add(")");
var mapEntryTypeVariables = ParameterizedTypeName.get(Map.Entry.class, String.class, Object.class);

View File

@@ -15,6 +15,9 @@
*/
package io.soabase.recordbuilder.test;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -48,4 +51,28 @@ public class TestRecordInterface
Assertions.assertEquals(generic.i(), 101);
Assertions.assertEquals(generic.s(), now);
}
@Test
public void testBuilderStreamWithValues()
{
var stream = SimpleRecordBuilder.stream(SimpleRecordBuilder.builder()
.i(19)
.s("value")
.build())
.toList();
Assertions.assertEquals(stream, List.of(
Map.entry("i", 19),
Map.entry("s", "value")));
}
@Test
public void testBuilderStreamWithNulls()
{
var stream = SimpleRecordBuilder.stream(SimpleRecordBuilder.builder()
.build())
.toList();
Assertions.assertEquals(stream, List.of(
new SimpleImmutableEntry<>("i", 0),
new SimpleImmutableEntry<>("s", null)));
}
}