Skip to content

Commit

Permalink
fix sundrio#350 sundrio#357: further refining null behavior, also add…
Browse files Browse the repository at this point in the history
…ing with fallback
  • Loading branch information
shawkins committed May 10, 2023
1 parent a014098 commit eeb48b2
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -318,18 +318,25 @@ private List<Statement> getStatements(Property property, List<ClassRef> alsoImpo
}

if (!descendants.isEmpty()) {
statements.add(new StringStatement(
"if (" + argumentName + "==null){ this." + fieldName + " = null; _visitables.remove(\"" + fieldName + "\");"
+ " return (" + returnType + ") this;}"));
for (Property descendant : descendants) {
ClassRef dunwraped = new ClassRefBuilder(
(ClassRef) combine(UNWRAP_COLLECTION_OF, UNWRAP_ARRAY_OF, UNWRAP_OPTIONAL_OF).apply(descendant.getTypeRef()))
.withArguments(new TypeRef[0]).build();
ClassRef builderRef = BUILDER_REF.apply(dunwraped);
statements.add(new StringStatement("if (" + argumentName + " instanceof " + dunwraped + "){ this." + fieldName
+ "= new " + builderRef + "((" + dunwraped + ")" + argumentName + "); _visitables.get(\"" + fieldName
+ "\").add(this." + fieldName + ");}"));

+ "\").clear(); _visitables.get(\"" + fieldName + "\").add(this." + fieldName + ");}"));
alsoImport.add(dunwraped);
alsoImport.add(builderRef);
}
statements.add(new StringStatement(
"VisitableBuilder<? extends " + ((ClassRef) type).getFullyQualifiedName()
+ ",?> builder = builderOf(" + argumentName + "); "
+ "_visitables.get(\"" + fieldName + "\").clear();_visitables.get(\"" + fieldName + "\").add(builder);"
+ "this." + fieldName + " = builder;"));
statements.add(new StringStatement("return (" + returnType + ") this;"));
return statements;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public void testGeneratedBuilderEquality() {
.withName("Goodgirl");
assertNotEquals(builder1, builder2);
}

@Test
public void testGeneratedBuilderNullInstance() {
Dog dog = new DogBuilder((Dog) null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,4 +314,36 @@ public void testExceptionOnWrongInstanceType() {
new CanvasBuilder(canvas)
.editOrAddValueInCircleNamedShapes("testShape").and().build();
}

@Test
public void testWithNullBuildable() {
Canvas canvas = new CanvasBuilder(new CanvasBuilder().withNewSquareCanvasShape(1, 1, 1).build())
.withCanvasShape(null).build();

Assert.assertNull(canvas.getCanvasShape());
}

@Test(expected = IllegalStateException.class)
public void testWithUnknownType() {
Canvas canvas = new CanvasBuilder()
.withCanvasShape(new Shape() {

@Override
public int getX() {
return 0;
}

@Override
public int getY() {
return 0;
}

@Override
public Optional<String> getNotes() {
return Optional.empty();
}
}).build();

Assert.assertNull(canvas.getCanvasShape());
}
}

0 comments on commit eeb48b2

Please sign in to comment.