Compare commits
4 Commits
record-bui
...
jordanz/ch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfedb0a5e0 | ||
|
|
4924f7b3ea | ||
|
|
3e1d7d69d0 | ||
|
|
22f827d81a |
@@ -1,4 +1,4 @@
|
||||
[](https://github.com/Randgalt/record-builder/actions)
|
||||
[](https://github.com/Randgalt/record-builder/actions/workflows/maven_java17.yml)
|
||||
[](https://search.maven.org/search?q=g:io.soabase.record-builder%20a:record-builder)
|
||||
|
||||
# RecordBuilder
|
||||
|
||||
4
pom.xml
4
pom.xml
@@ -5,7 +5,7 @@
|
||||
<groupId>io.soabase.record-builder</groupId>
|
||||
<artifactId>record-builder</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>35</version>
|
||||
<version>36-SNAPSHOT</version>
|
||||
|
||||
<modules>
|
||||
<module>record-builder-core</module>
|
||||
@@ -80,7 +80,7 @@
|
||||
<url>https://github.com/randgalt/record-builder</url>
|
||||
<connection>scm:git:https://github.com/randgalt/record-builder.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:randgalt/record-builder.git</developerConnection>
|
||||
<tag>record-builder-35</tag>
|
||||
<tag>record-builder-1.16</tag>
|
||||
</scm>
|
||||
|
||||
<issueManagement>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>io.soabase.record-builder</groupId>
|
||||
<artifactId>record-builder</artifactId>
|
||||
<version>35</version>
|
||||
<version>36-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>io.soabase.record-builder</groupId>
|
||||
<artifactId>record-builder</artifactId>
|
||||
<version>35</version>
|
||||
<version>36-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ class InternalRecordBuilderProcessor {
|
||||
}
|
||||
|
||||
private List<RecordClassType> buildRecordComponents(TypeElement record) {
|
||||
var accessorAnnotations = record.getRecordComponents().stream().map(e -> e.getAccessor().getAnnotationMirrors()).collect(Collectors.toList());
|
||||
var accessorAnnotations = record.getRecordComponents().stream().map(e -> (e.getAccessor() != null) ? e.getAccessor().getAnnotationMirrors() : List.<AnnotationMirror>of()).collect(Collectors.toList());
|
||||
var canonicalConstructorAnnotations = ElementUtils.findCanonicalConstructor(record).map(constructor -> ((ExecutableElement) constructor).getParameters().stream().map(Element::getAnnotationMirrors).collect(Collectors.toList())).orElse(List.of());
|
||||
var recordComponents = record.getRecordComponents();
|
||||
return IntStream.range(0, recordComponents.size())
|
||||
@@ -938,11 +938,23 @@ class InternalRecordBuilderProcessor {
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addAnnotation(generatedRecordBuilderAnnotation)
|
||||
.returns(component.typeName())
|
||||
.addStatement("return $L", component.name());
|
||||
.addCode(checkReturnShim(component));
|
||||
addAccessorAnnotations(component, methodSpecBuilder, __ -> true);
|
||||
builder.addMethod(methodSpecBuilder.build());
|
||||
}
|
||||
|
||||
private CodeBlock checkReturnShim(RecordClassType component) {
|
||||
var codeBuilder = CodeBlock.builder();
|
||||
if (collectionBuilderUtils.isImmutableCollection(component)) {
|
||||
codeBuilder.add("return ");
|
||||
collectionBuilderUtils.addShimCall(codeBuilder, component);
|
||||
codeBuilder.add(";");
|
||||
} else {
|
||||
codeBuilder.addStatement("return $L", component.name());
|
||||
}
|
||||
return codeBuilder.build();
|
||||
}
|
||||
|
||||
private void add1SetterMethod(RecordClassType component) {
|
||||
/*
|
||||
For a single record component, add a setter similar to:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>io.soabase.record-builder</groupId>
|
||||
<artifactId>record-builder</artifactId>
|
||||
<version>35</version>
|
||||
<version>36-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Copyright 2019 Jordan Zimmerman
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package io.soabase.recordbuilder.test;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class TestCollectionsBuilder {
|
||||
|
||||
@Test
|
||||
void testCollectionsBuilderReturnNonNullEmptyCollections() {
|
||||
CollectionRecordBuilder<Object, Point> builder = CollectionRecordBuilder.builder();
|
||||
|
||||
Assertions.assertNotNull(builder.l());
|
||||
Assertions.assertTrue(builder.l().isEmpty());
|
||||
Assertions.assertNotNull(builder.c());
|
||||
Assertions.assertTrue(builder.c().isEmpty());
|
||||
Assertions.assertNotNull(builder.m());
|
||||
Assertions.assertTrue(builder.m().isEmpty());
|
||||
Assertions.assertNotNull(builder.s());
|
||||
Assertions.assertTrue(builder.s().isEmpty());
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>io.soabase.record-builder</groupId>
|
||||
<artifactId>record-builder</artifactId>
|
||||
<version>35</version>
|
||||
<version>36-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user