Skip to content

Commit

Permalink
refactor: encapsulate try-with-resources for printing lists in Defaul…
Browse files Browse the repository at this point in the history
…tJavaPrettyPrinter (#1956)
  • Loading branch information
pvojtechovsky authored and monperrus committed Apr 12, 2018
1 parent fc24d4a commit d2e24f7
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 155 deletions.
137 changes: 44 additions & 93 deletions src/main/java/spoon/reflect/visitor/DefaultJavaPrettyPrinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtCatch;
import spoon.reflect.code.CtCatchVariable;
import spoon.reflect.code.CtCodeElement;
import spoon.reflect.code.CtCodeSnippetExpression;
import spoon.reflect.code.CtCodeSnippetStatement;
import spoon.reflect.code.CtComment;
Expand Down Expand Up @@ -127,7 +126,6 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;

Expand Down Expand Up @@ -413,16 +411,15 @@ public <A extends Annotation> void visitCtAnnotation(CtAnnotation<A> annotation)
printer.writeSeparator("@");
scan(annotation.getAnnotationType());
if (annotation.getValues().size() > 0) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ",", true, false, ")")) {
for (Entry<String, CtExpression> e : annotation.getValues().entrySet()) {
lp.printSeparatorIfAppropriate();
elementPrinterHelper.printList(annotation.getValues().entrySet(),
null, false, "(", false, false, ",", true, false, ")",
e -> {
if ((annotation.getValues().size() == 1 && "value".equals(e.getKey())) == false) {
//it is not a default value attribute. We must print a attribute name too.
printer.writeIdentifier(e.getKey()).writeSpace().writeOperator("=").writeSpace();
}
elementPrinterHelper.writeAnnotationElement(annotation.getFactory(), e.getValue());
}
}
});
}
}

Expand Down Expand Up @@ -587,13 +584,9 @@ public void visitCtCatch(CtCatch catchBlock) {
printer.writeSpace().writeKeyword("catch").writeSpace().writeSeparator("(");
CtCatchVariable<? extends Throwable> parameter = catchBlock.getParameter();
if (parameter != null && parameter.getMultiTypes().size() > 1) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, null, false, true, "|", true, false, null)) {
for (int i = 0; i < parameter.getMultiTypes().size(); i++) {
lp.printSeparatorIfAppropriate();
CtTypeReference<?> type = parameter.getMultiTypes().get(i);
scan(type);
}
}
elementPrinterHelper.printList(parameter.getMultiTypes(),
null, false, null, false, true, "|", true, false, null,
type -> scan(type));
printer.writeSpace().writeIdentifier(parameter.getSimpleName());
} else {
scan(parameter);
Expand Down Expand Up @@ -734,12 +727,9 @@ public <T extends Enum<?>> void visitCtEnum(CtEnum<T> ctEnum) {
if (ctEnum.getEnumValues().size() == 0) {
printer.writeSeparator(";").writeln();
} else {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, null, false, false, ",", true, false, ";")) {
for (CtEnumValue<?> enumValue : ctEnum.getEnumValues()) {
lp.printSeparatorIfAppropriate();
scan(enumValue);
}
}
elementPrinterHelper.printList(ctEnum.getEnumValues(),
null, false, null, false, false, ",", true, false, ";",
enumValue -> scan(enumValue));
}

elementPrinterHelper.writeElementList(ctEnum.getTypeMembers());
Expand Down Expand Up @@ -1061,12 +1051,9 @@ public void visitCtPackageExport(CtPackageExport moduleExport) {

visitCtPackageReference(moduleExport.getPackageReference());
if (!moduleExport.getTargetExport().isEmpty()) {
try (ListPrinter lp = this.elementPrinterHelper.createListPrinter(false, " to", true, false, ",", true, false, null)) {
for (CtModuleReference moduleReference : moduleExport.getTargetExport()) {
lp.printSeparatorIfAppropriate();
scan(moduleReference);
}
}
this.elementPrinterHelper.printList(moduleExport.getTargetExport(),
null, false, " to", true, false, ",", true, false, null,
moduleReference -> scan(moduleReference));
}
printer.writeSeparator(";").writeln();
}
Expand All @@ -1076,12 +1063,9 @@ public void visitCtModuleRequirement(CtModuleRequirement moduleRequirement) {
printer.writeKeyword("requires").writeSpace();

if (!moduleRequirement.getRequiresModifiers().isEmpty()) {
try (ListPrinter lp = this.elementPrinterHelper.createListPrinter(false, null, false, false, " ", false, false, " ")) {
for (CtModuleRequirement.RequiresModifier modifier : moduleRequirement.getRequiresModifiers()) {
lp.printSeparatorIfAppropriate();
printer.writeKeyword(modifier.name().toLowerCase());
}
}
this.elementPrinterHelper.printList(moduleRequirement.getRequiresModifiers(),
null, false, null, false, false, " ", false, false, " ",
modifier -> printer.writeKeyword(modifier.name().toLowerCase()));
}

scan(moduleRequirement.getModuleReference());
Expand All @@ -1092,12 +1076,9 @@ public void visitCtModuleRequirement(CtModuleRequirement moduleRequirement) {
public void visitCtProvidedService(CtProvidedService moduleProvidedService) {
printer.writeKeyword("provides").writeSpace();
scan(moduleProvidedService.getServiceType());
try (ListPrinter lp = this.elementPrinterHelper.createListPrinter(false, " with", true, false, ",", true, false, null)) {
for (CtTypeReference implementations : moduleProvidedService.getImplementationTypes()) {
lp.printSeparatorIfAppropriate();
scan(implementations);
}
}
this.elementPrinterHelper.printList(moduleProvidedService.getImplementationTypes(),
null, false, " with", true, false, ",", true, false, null,
implementations -> scan(implementations));
printer.writeSeparator(";").writeln();
}

Expand Down Expand Up @@ -1186,12 +1167,9 @@ public void visitCtFor(CtFor forLoop) {
if (!forLoop.getForUpdate().isEmpty()) {
printer.writeSpace();
}
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, null, false, true, ",", true, false, null)) {
for (CtStatement s : forLoop.getForUpdate()) {
lp.printSeparatorIfAppropriate();
scan(s);
}
}
elementPrinterHelper.printList(forLoop.getForUpdate(),
null, false, null, false, true, ",", true, false, null,
s -> scan(s));
printer.writeSeparator(")");
elementPrinterHelper.writeIfOrLoopBlock(forLoop.getBody());
}
Expand Down Expand Up @@ -1237,13 +1215,9 @@ public <T> void visitCtInterface(CtInterface<T> intrface) {
}

if (intrface.getSuperInterfaces().size() > 0) {
printer.writeSpace().writeKeyword("extends").writeSpace();
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, null, false, true, ",", true, false, null)) {
for (CtTypeReference<?> ref : intrface.getSuperInterfaces()) {
lp.printSeparatorIfAppropriate();
scan(ref);
}
}
elementPrinterHelper.printList(intrface.getSuperInterfaces(),
"extends", false, null, false, true, ",", true, false, null,
ref -> scan(ref));
}
context.pushCurrentThis(intrface);
printer.writeSpace().writeSeparator("{").incTab();
Expand Down Expand Up @@ -1296,12 +1270,9 @@ public <T> void visitCtInvocation(CtInvocation<T> invocation) {
}
printer.writeIdentifier(invocation.getExecutable().getSimpleName());
}
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ",", true, false, ")")) {
for (CtExpression<?> e : invocation.getArguments()) {
lp.printSeparatorIfAppropriate();
scan(e);
}
}
elementPrinterHelper.printList(invocation.getArguments(),
null, false, "(", false, false, ",", true, false, ")",
e -> scan(e));
exitCtExpression(invocation);
}

Expand Down Expand Up @@ -1358,9 +1329,6 @@ public <T> void visitCtMethod(CtMethod<T> m) {
elementPrinterHelper.writeComment(m);
elementPrinterHelper.visitCtNamedElement(m, sourceCompilationUnit);
elementPrinterHelper.writeModifiers(m);
if (m.isDefaultMethod()) {
printer.writeKeyword("default").writeSpace();
}
elementPrinterHelper.writeFormalTypeParameters(m);
if (m.getFormalCtTypeParameters().size() > 0) {
printer.writeSpace();
Expand Down Expand Up @@ -1440,13 +1408,10 @@ public <T> void visitCtNewArray(CtNewArray<T> newArray) {
}
}
if (newArray.getDimensionExpressions().size() == 0) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "{", true, false, ",", true, true, "}")) {
for (CtExpression e : newArray.getElements()) {
lp.printSeparatorIfAppropriate();
scan(e);
}
elementPrinterHelper.writeComment(newArray, CommentOffset.INSIDE);
}
elementPrinterHelper.printList(newArray.getElements(),
null, false, "{", true, false, ",", true, true, "}",
e -> scan(e));
elementPrinterHelper.writeComment(newArray, CommentOffset.INSIDE);
}
elementPrinterHelper.writeComment(newArray, CommentOffset.AFTER);
exitCtExpression(newArray);
Expand Down Expand Up @@ -1495,12 +1460,9 @@ private <T> void printConstructorCall(CtConstructorCall<T> ctConstructorCall) {
scan(ctConstructorCall.getType());
}

try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ",", true, false, ")")) {
for (CtCodeElement exp : ctConstructorCall.getArguments()) {
lp.printSeparatorIfAppropriate();
scan(exp);
}
}
elementPrinterHelper.printList(ctConstructorCall.getArguments(),
null, false, "(", false, false, ",", true, false, ")",
exp -> scan(exp));
}

/**
Expand Down Expand Up @@ -1536,14 +1498,9 @@ private <T> boolean hasDeclaringTypeWithGenerics(CtTypeReference<T> reference) {
public <T> void visitCtLambda(CtLambda<T> lambda) {
enterCtExpression(lambda);

try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ",", false, false, ")")) {
if (lambda.getParameters().size() > 0) {
for (CtParameter<?> parameter : lambda.getParameters()) {
lp.printSeparatorIfAppropriate();
scan(parameter);
}
}
}
elementPrinterHelper.printList(lambda.getParameters(),
null, false, "(", false, false, ",", false, false, ")",
parameter -> scan(parameter));
printer.writeSpace();
printer.writeSeparator("->");
printer.writeSpace();
Expand Down Expand Up @@ -1707,12 +1664,9 @@ public void visitCtTryWithResource(CtTryWithResource tryWithResource) {
enterCtStatement(tryWithResource);
printer.writeKeyword("try").writeSpace();
if (tryWithResource.getResources() != null && !tryWithResource.getResources().isEmpty()) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, "(", false, false, ";", false, false, ")")) {
for (CtLocalVariable<?> r : tryWithResource.getResources()) {
lp.printSeparatorIfAppropriate();
scan(r);
}
}
elementPrinterHelper.printList(tryWithResource.getResources(),
null, false, "(", false, false, ";", false, false, ")",
r -> scan(r));
}
printer.writeSpace();
scan(tryWithResource.getBody());
Expand Down Expand Up @@ -1781,12 +1735,9 @@ private boolean printQualified(CtTypeReference<?> ref) {

@Override
public <T> void visitCtIntersectionTypeReference(CtIntersectionTypeReference<T> reference) {
try (ListPrinter lp = elementPrinterHelper.createListPrinter(false, null, false, true, "&", true, false, null)) {
for (CtTypeReference<?> bound : reference.getBounds()) {
lp.printSeparatorIfAppropriate();
scan(bound);
}
}
elementPrinterHelper.printList(reference.getBounds(),
null, false, null, false, true, "&", true, false, null,
bound -> scan(bound));
}

@Override
Expand Down
Loading

0 comments on commit d2e24f7

Please sign in to comment.