Skip to content

Commit aefd7c4

Browse files
committed
Generated code with "direct return" when no setters required
Instead of generating code like: MyType myType = new MyType(...); return myType; Generate: return new MyType(...);
1 parent b780604 commit aefd7c4

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

jsonb-generator/src/main/java/io/avaje/jsonb/generator/ClassReader.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,9 @@ private void writeFromJsonImplementation(Append writer, String varName) {
480480
writer.append(" // unmappedField... ", varName).eol();
481481
unmappedField.writeFromJsonUnmapped(writer, varName);
482482
}
483-
writer.append(" return _$%s;", varName).eol();
483+
if (directLoad) {
484+
writer.append(" return _$%s;", varName).eol();
485+
}
484486
writer.append(" }").eol();
485487
}
486488

@@ -489,11 +491,28 @@ private boolean unmappedJsonNodeType() {
489491
}
490492

491493
private void writeJsonBuildResult(Append writer, String varName) {
492-
writer.append(" // build and return %s", shortName).eol();
494+
var buildFields = allFields.stream()
495+
.filter(FieldReader::includeFromJsonBuild)
496+
.collect(toList());
497+
498+
boolean directReturn = buildFields.isEmpty();
499+
if (!directReturn) {
500+
writer.append(" // build and return %s", shortName).eol();
501+
} else {
502+
writer.append(" // direct return").eol();
503+
writer.append(" return ");
504+
}
493505
if (constructor == null) {
494-
writer.append(" %s _$%s = new %s(", shortName, varName, shortName);
506+
if (directReturn) {
507+
writer.append("new %s(", shortName);
508+
} else {
509+
writer.append(" %s _$%s = new %s(", shortName, varName, shortName);
510+
}
495511
} else {
496-
writer.append(" %s _$%s = " + constructor.creationString(), shortName, varName);
512+
if (!directReturn) {
513+
writer.append(" %s _$%s = ", shortName, varName);
514+
}
515+
writer.append(constructor.creationString());
497516
final List<MethodReader.MethodParam> params = constructor.getParams();
498517
for (int i = 0, size = params.size(); i < size; i++) {
499518
if (i > 0) {
@@ -516,11 +535,12 @@ private void writeJsonBuildResult(Append writer, String varName) {
516535
}
517536
}
518537
writer.append(");").eol();
519-
for (final FieldReader allField : allFields) {
520-
if (allField.includeFromJson()) {
521-
frequencyMap.compute(allField.fieldName(), (k, v) -> v == null ? 0 : v + 1);
522-
allField.writeFromJsonSetter(writer, varName, "");
523-
}
538+
for (final FieldReader allField : buildFields) {
539+
frequencyMap.compute(allField.fieldName(), (k, v) -> v == null ? 0 : v + 1);
540+
allField.writeFromJsonSetter(writer, varName, "");
541+
}
542+
if (!directReturn) {
543+
writer.append(" return _$%s;", varName).eol();
524544
}
525545
}
526546

jsonb-generator/src/main/java/io/avaje/jsonb/generator/FieldReader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ boolean includeFromJson() {
130130
return deserialize;
131131
}
132132

133+
boolean includeFromJsonBuild() {
134+
return deserialize && !isCreatorParam && !property.isConstructorParam();
135+
}
136+
133137
boolean includeToJson() {
134138
return serialize;
135139
}

0 commit comments

Comments
 (0)