From 621f1f76216a62bf1631fb337ba6c126c326a0cc Mon Sep 17 00:00:00 2001 From: Danny van Bruggen Date: Sat, 23 Feb 2019 16:12:11 +0100 Subject: [PATCH] Make toString's printer configuration accessible --- .../java/com/github/javaparser/ast/Node.java | 21 ++++++++++++++----- .../javaparser/ast/stmt/SwitchEntry.java | 1 + .../printer/ConcreteSyntaxModel.java | 2 +- .../printer/PrettyPrintVisitor.java | 11 +++++++++- .../javaparser/printer/PrettyPrinter.java | 5 +++-- .../printer/PrettyPrinterConfiguration.java | 9 ++++---- .../javaparser/printer/SourcePrinter.java | 9 ++++++-- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java index 4aa46bc89f..2614cf02d4 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/Node.java @@ -143,7 +143,7 @@ public enum Parsedness { return 0; }; - private static final PrettyPrinter toStringPrinter = new PrettyPrinter(new PrettyPrinterConfiguration()); + private static PrettyPrinterConfiguration toStringPrettyPrinterConfiguration = new PrettyPrinterConfiguration(); protected static final PrettyPrinterConfiguration prettyPrinterNoCommentsConfiguration = new PrettyPrinterConfiguration().setPrintComments(false); @@ -275,15 +275,18 @@ public final Node setBlockComment(String comment) { } /** - * Return the String representation of this node. - * - * @return the String representation of this node + * @return pretty printed source code for this node and its children. + * Formatting can be configured with Node.setToStringPrettyPrinterConfiguration. */ @Override public final String toString() { - return toStringPrinter.print(this); + return new PrettyPrinter(toStringPrettyPrinterConfiguration).print(this); } + /** + * @return pretty printed source code for this node and its children. + * Formatting can be configured with parameter prettyPrinterConfiguration. + */ public final String toString(PrettyPrinterConfiguration prettyPrinterConfiguration) { return new PrettyPrinter(prettyPrinterConfiguration).print(this); } @@ -652,6 +655,14 @@ public Node setParsed(Parsedness parsed) { return this; } + public static PrettyPrinterConfiguration getToStringPrettyPrinterConfiguration() { + return toStringPrettyPrinterConfiguration; + } + + public static void setToStringPrettyPrinterConfiguration(PrettyPrinterConfiguration toStringPrettyPrinterConfiguration) { + Node.toStringPrettyPrinterConfiguration = toStringPrettyPrinterConfiguration; + } + @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") public boolean replace(Node node, Node replacementNode) { if (node == null) diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchEntry.java b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchEntry.java index 05c34cb0ba..b268717532 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchEntry.java +++ b/javaparser-core/src/main/java/com/github/javaparser/ast/stmt/SwitchEntry.java @@ -218,6 +218,7 @@ public SwitchEntry setType(final Type type) { } @Override + @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") public boolean replace(Node node, Node replacementNode) { if (node == null) return false; diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java b/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java index 9866f589f2..218f5da5d9 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/ConcreteSyntaxModel.java @@ -949,7 +949,7 @@ public static void genericPrettyPrint(Node node, SourcePrinter printer) { public static String genericPrettyPrint(Node node) { SourcePrinter sourcePrinter = new SourcePrinter(); forClass(node.getClass()).prettyPrint(node, sourcePrinter); - return sourcePrinter.getSource(); + return sourcePrinter.toString(); } public static CsmElement forClass(Class nodeClazz) { diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java index 719ecfc337..51497e73c2 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java @@ -58,8 +58,17 @@ public PrettyPrintVisitor(PrettyPrinterConfiguration prettyPrinterConfiguration) printer = new SourcePrinter(configuration); } + /** + * @deprecated use toString() + */ + @Deprecated public String getSource() { - return printer.getSource(); + return printer.toString(); + } + + @Override + public String toString() { + return printer.toString(); } private void printModifiers(final NodeList modifiers) { diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinter.java index 510457c4d7..754153a692 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinter.java @@ -22,6 +22,7 @@ package com.github.javaparser.printer; import com.github.javaparser.ast.Node; +import com.github.javaparser.ast.visitor.VoidVisitor; /** * Pretty printer for AST nodes. @@ -38,8 +39,8 @@ public PrettyPrinter(PrettyPrinterConfiguration configuration) { } public String print(Node node) { - final PrettyPrintVisitor visitor = configuration.getVisitorFactory().apply(configuration); + final VoidVisitor visitor = configuration.getVisitorFactory().apply(configuration); node.accept(visitor, null); - return visitor.getSource(); + return visitor.toString(); } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java index db364e79ea..0a6ccbbace 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java @@ -21,10 +21,11 @@ package com.github.javaparser.printer; +import com.github.javaparser.ast.visitor.VoidVisitor; + import java.util.function.Function; import static com.github.javaparser.printer.PrettyPrinterConfiguration.IndentType.SPACES; -import static com.github.javaparser.printer.PrettyPrinterConfiguration.IndentType.TABS; import static com.github.javaparser.utils.Utils.EOL; import static com.github.javaparser.utils.Utils.assertNonNegative; import static com.github.javaparser.utils.Utils.assertNotNull; @@ -81,7 +82,7 @@ public enum IndentType { private int tabWidth = 4; private int indentSize = 4; private String endOfLineCharacter = EOL; - private Function visitorFactory = PrettyPrintVisitor::new; + private Function> visitorFactory = PrettyPrintVisitor::new; private int maxEnumConstantsToAlignHorizontally = DEFAULT_MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY; /** @@ -202,7 +203,7 @@ public PrettyPrinterConfiguration setColumnAlignFirstMethodChain(boolean columnA return this; } - public Function getVisitorFactory() { + public Function> getVisitorFactory() { return visitorFactory; } @@ -210,7 +211,7 @@ public Function getVisitorFactor * Set the factory that creates the PrettyPrintVisitor. By changing this you can make the PrettyPrinter use a custom * PrettyPrinterVisitor. */ - public PrettyPrinterConfiguration setVisitorFactory(Function visitorFactory) { + public PrettyPrinterConfiguration setVisitorFactory(Function> visitorFactory) { this.visitorFactory = assertNotNull(visitorFactory); return this; } diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java index 85172e221a..265378ebad 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java @@ -30,6 +30,9 @@ import static com.github.javaparser.Position.*; +/** + * A support class for code that outputs formatted source code. + */ public class SourcePrinter { private final String endOfLineCharacter; private final String indentation; @@ -216,9 +219,11 @@ public Position getCursor() { /** * @return the currently printed source code. + * @deprecated use toString() */ + @Deprecated public String getSource() { - return buf.toString(); + return toString(); } /** @@ -226,7 +231,7 @@ public String getSource() { */ @Override public String toString() { - return getSource(); + return buf.toString(); } /**