Allow components stream method to work with null fields (#85)
Co-authored-by: Madis Parn <madis.parn@topia.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user