• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007-2010 Júlio Vilmar Gesser.
3  * Copyright (C) 2011, 2013-2016 The JavaParser Team.
4  *
5  * This file is part of JavaParser.
6  *
7  * JavaParser can be used either under the terms of
8  * a) the GNU Lesser General Public License as published by
9  *     the Free Software Foundation, either version 3 of the License, or
10  *     (at your option) any later version.
11  * b) the terms of the Apache License
12  *
13  * You should have received a copy of both licenses in LICENCE.LGPL and
14  * LICENCE.APACHE. Please refer to those files for details.
15  *
16  * JavaParser is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU Lesser General Public License for more details.
20  */
21 
22 package com.github.javaparser.printer;
23 
24 import java.util.function.Function;
25 
26 import static com.github.javaparser.utils.Utils.EOL;
27 import static com.github.javaparser.utils.Utils.assertNotNull;
28 
29 /**
30  * Configuration options for the {@link PrettyPrinter}.
31  */
32 public class PrettyPrinterConfiguration {
33     public static final int DEFAULT_MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY = 5;
34 
35     private boolean orderImports = false;
36     private boolean printComments = true;
37     private boolean printJavadoc = true;
38     private boolean columnAlignParameters = false;
39     private boolean columnAlignFirstMethodChain = false;
40     private String indent = "    ";
41     private String endOfLineCharacter = EOL;
42     private Function<PrettyPrinterConfiguration, PrettyPrintVisitor> visitorFactory = PrettyPrintVisitor::new;
43     private int maxEnumConstantsToAlignHorizontally = DEFAULT_MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY;
44 
getIndent()45     public String getIndent() {
46         return indent;
47     }
48 
49     /**
50      * Set the string to use for indenting. For example: "\t", "    ", "".
51      */
setIndent(String indent)52     public PrettyPrinterConfiguration setIndent(String indent) {
53         this.indent = assertNotNull(indent);
54         return this;
55     }
56 
isOrderImports()57     public boolean isOrderImports() {
58         return orderImports;
59     }
60 
61     /**
62      * @deprecated this is always on.
63      */
64     @Deprecated
isNormalizeEolInComment()65     public boolean isNormalizeEolInComment() {
66         return true;
67     }
68 
69     /**
70      * @deprecated this is always on.
71      */
72     @Deprecated
setNormalizeEolInComment(boolean normalizeEolInComment)73     public PrettyPrinterConfiguration setNormalizeEolInComment(boolean normalizeEolInComment) {
74         return this;
75     }
76 
isPrintComments()77     public boolean isPrintComments() {
78         return printComments;
79     }
80 
isIgnoreComments()81     public boolean isIgnoreComments() {
82         return !printComments;
83     }
84 
isPrintJavadoc()85     public boolean isPrintJavadoc() {
86         return printJavadoc;
87     }
88 
isColumnAlignParameters()89     public boolean isColumnAlignParameters() {
90         return columnAlignParameters;
91     }
92 
isColumnAlignFirstMethodChain()93     public boolean isColumnAlignFirstMethodChain() {
94         return columnAlignFirstMethodChain;
95     }
96 
97     /**
98      * When true, all comments will be printed, unless printJavadoc is false, then only line and block comments will be
99      * printed.
100      */
setPrintComments(boolean printComments)101     public PrettyPrinterConfiguration setPrintComments(boolean printComments) {
102         this.printComments = printComments;
103         return this;
104     }
105 
106     /**
107      * When true, Javadoc will be printed.
108      */
setPrintJavadoc(boolean printJavadoc)109     public PrettyPrinterConfiguration setPrintJavadoc(boolean printJavadoc) {
110         this.printJavadoc = printJavadoc;
111         return this;
112     }
113 
setColumnAlignParameters(boolean columnAlignParameters)114     public PrettyPrinterConfiguration setColumnAlignParameters(boolean columnAlignParameters) {
115         this.columnAlignParameters = columnAlignParameters;
116         return this;
117     }
118 
setColumnAlignFirstMethodChain(boolean columnAlignFirstMethodChain)119     public PrettyPrinterConfiguration setColumnAlignFirstMethodChain(boolean columnAlignFirstMethodChain) {
120         this.columnAlignFirstMethodChain = columnAlignFirstMethodChain;
121         return this;
122     }
123 
getVisitorFactory()124     public Function<PrettyPrinterConfiguration, PrettyPrintVisitor> getVisitorFactory() {
125         return visitorFactory;
126     }
127 
128     /**
129      * Set the factory that creates the PrettyPrintVisitor. By changing this you can make the PrettyPrinter use a custom
130      * PrettyPrinterVisitor.
131      */
setVisitorFactory(Function<PrettyPrinterConfiguration, PrettyPrintVisitor> visitorFactory)132     public PrettyPrinterConfiguration setVisitorFactory(Function<PrettyPrinterConfiguration, PrettyPrintVisitor> visitorFactory) {
133         this.visitorFactory = assertNotNull(visitorFactory);
134         return this;
135     }
136 
getEndOfLineCharacter()137     public String getEndOfLineCharacter() {
138         return endOfLineCharacter;
139     }
140 
141     /**
142      * Set the character to append when a line should end. Example values: "\n", "\r\n", "".
143      */
setEndOfLineCharacter(String endOfLineCharacter)144     public PrettyPrinterConfiguration setEndOfLineCharacter(String endOfLineCharacter) {
145         this.endOfLineCharacter = assertNotNull(endOfLineCharacter);
146         return this;
147     }
148 
149     /**
150      * When true, orders imports by alphabetically.
151      */
setOrderImports(boolean orderImports)152     public PrettyPrinterConfiguration setOrderImports(boolean orderImports) {
153         this.orderImports = orderImports;
154         return this;
155     }
156 
getMaxEnumConstantsToAlignHorizontally()157     public int getMaxEnumConstantsToAlignHorizontally() {
158         return maxEnumConstantsToAlignHorizontally;
159     }
160 
161     /**
162      * By default enum constants get aligned like this:
163      * <pre>
164      *     enum X {
165      *        A, B, C, D
166      *     }
167      * </pre>
168      * until the amount of constants passes this value (5 by default).
169      * Then they get aligned like this:
170      * <pre>
171      *     enum X {
172      *        A,
173      *        B,
174      *        C,
175      *        D,
176      *        E,
177      *        F,
178      *        G
179      *     }
180      * </pre>
181      * Set it to a large number to always align horizontally.
182      * Set it to 1 or less to always align vertically.
183      */
setMaxEnumConstantsToAlignHorizontally(int maxEnumConstantsToAlignHorizontally)184     public PrettyPrinterConfiguration setMaxEnumConstantsToAlignHorizontally(int maxEnumConstantsToAlignHorizontally) {
185         this.maxEnumConstantsToAlignHorizontally = maxEnumConstantsToAlignHorizontally;
186         return this;
187     }
188 }
189