Skip to content

Commit a4189e3

Browse files
eamonnmcmanusgoogle-java-format Team
authored andcommitted
Make Token a sealed interface rather than a record with a Type enum.
I think this is a bit cleaner, and it will also make it possible to associate additional information with particular token types. I have something in mind for a new `CodeBlock` token. PiperOrigin-RevId: 894217353
1 parent b8454d0 commit a4189e3

File tree

6 files changed

+325
-274
lines changed

6 files changed

+325
-274
lines changed

core/src/main/java/com/google/googlejavaformat/java/javadoc/JavadocFormatter.java

Lines changed: 61 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,42 @@
1616

1717
import static com.google.common.base.Preconditions.checkState;
1818
import static com.google.googlejavaformat.java.javadoc.JavadocLexer.lex;
19-
import static com.google.googlejavaformat.java.javadoc.Token.Type.BR_TAG;
20-
import static com.google.googlejavaformat.java.javadoc.Token.Type.PARAGRAPH_OPEN_TAG;
2119
import static java.util.regex.Pattern.CASE_INSENSITIVE;
2220
import static java.util.regex.Pattern.compile;
2321
import static java.util.stream.Collectors.joining;
2422

2523
import com.google.common.base.CharMatcher;
2624
import com.google.common.collect.ImmutableList;
2725
import com.google.googlejavaformat.java.javadoc.JavadocLexer.LexException;
26+
import com.google.googlejavaformat.java.javadoc.Token.BeginJavadoc;
27+
import com.google.googlejavaformat.java.javadoc.Token.BlockquoteCloseTag;
28+
import com.google.googlejavaformat.java.javadoc.Token.BlockquoteOpenTag;
29+
import com.google.googlejavaformat.java.javadoc.Token.BrTag;
30+
import com.google.googlejavaformat.java.javadoc.Token.CodeCloseTag;
31+
import com.google.googlejavaformat.java.javadoc.Token.CodeOpenTag;
32+
import com.google.googlejavaformat.java.javadoc.Token.EndJavadoc;
33+
import com.google.googlejavaformat.java.javadoc.Token.FooterJavadocTagStart;
34+
import com.google.googlejavaformat.java.javadoc.Token.ForcedNewline;
35+
import com.google.googlejavaformat.java.javadoc.Token.HeaderCloseTag;
36+
import com.google.googlejavaformat.java.javadoc.Token.HeaderOpenTag;
37+
import com.google.googlejavaformat.java.javadoc.Token.HtmlComment;
38+
import com.google.googlejavaformat.java.javadoc.Token.ListCloseTag;
39+
import com.google.googlejavaformat.java.javadoc.Token.ListItemCloseTag;
40+
import com.google.googlejavaformat.java.javadoc.Token.ListItemOpenTag;
41+
import com.google.googlejavaformat.java.javadoc.Token.ListOpenTag;
42+
import com.google.googlejavaformat.java.javadoc.Token.Literal;
43+
import com.google.googlejavaformat.java.javadoc.Token.MoeBeginStripComment;
44+
import com.google.googlejavaformat.java.javadoc.Token.MoeEndStripComment;
45+
import com.google.googlejavaformat.java.javadoc.Token.OptionalLineBreak;
46+
import com.google.googlejavaformat.java.javadoc.Token.ParagraphCloseTag;
47+
import com.google.googlejavaformat.java.javadoc.Token.ParagraphOpenTag;
48+
import com.google.googlejavaformat.java.javadoc.Token.PreCloseTag;
49+
import com.google.googlejavaformat.java.javadoc.Token.PreOpenTag;
50+
import com.google.googlejavaformat.java.javadoc.Token.SnippetBegin;
51+
import com.google.googlejavaformat.java.javadoc.Token.SnippetEnd;
52+
import com.google.googlejavaformat.java.javadoc.Token.TableCloseTag;
53+
import com.google.googlejavaformat.java.javadoc.Token.TableOpenTag;
54+
import com.google.googlejavaformat.java.javadoc.Token.Whitespace;
2855
import java.util.List;
2956
import java.util.regex.Matcher;
3057
import java.util.regex.Pattern;
@@ -74,36 +101,39 @@ public static String formatJavadoc(String input, int blockIndent) {
74101
private static String render(List<Token> input, int blockIndent, boolean classicJavadoc) {
75102
JavadocWriter output = new JavadocWriter(blockIndent, classicJavadoc);
76103
for (Token token : input) {
77-
switch (token.type()) {
78-
case BEGIN_JAVADOC -> output.writeBeginJavadoc();
79-
case END_JAVADOC -> {
104+
switch (token) {
105+
case BeginJavadoc unused -> output.writeBeginJavadoc();
106+
case EndJavadoc unused -> {
80107
output.writeEndJavadoc();
81108
return output.toString();
82109
}
83-
case FOOTER_JAVADOC_TAG_START -> output.writeFooterJavadocTagStart(token);
84-
case SNIPPET_BEGIN -> output.writeSnippetBegin(token);
85-
case SNIPPET_END -> output.writeSnippetEnd(token);
86-
case LIST_OPEN_TAG -> output.writeListOpen(token);
87-
case LIST_CLOSE_TAG -> output.writeListClose(token);
88-
case LIST_ITEM_OPEN_TAG -> output.writeListItemOpen(token);
89-
case HEADER_OPEN_TAG -> output.writeHeaderOpen(token);
90-
case HEADER_CLOSE_TAG -> output.writeHeaderClose(token);
91-
case PARAGRAPH_OPEN_TAG -> output.writeParagraphOpen(standardizePToken(token));
92-
case BLOCKQUOTE_OPEN_TAG, BLOCKQUOTE_CLOSE_TAG -> output.writeBlockquoteOpenOrClose(token);
93-
case PRE_OPEN_TAG -> output.writePreOpen(token);
94-
case PRE_CLOSE_TAG -> output.writePreClose(token);
95-
case CODE_OPEN_TAG -> output.writeCodeOpen(token);
96-
case CODE_CLOSE_TAG -> output.writeCodeClose(token);
97-
case TABLE_OPEN_TAG -> output.writeTableOpen(token);
98-
case TABLE_CLOSE_TAG -> output.writeTableClose(token);
99-
case MOE_BEGIN_STRIP_COMMENT -> output.requestMoeBeginStripComment(token);
100-
case MOE_END_STRIP_COMMENT -> output.writeMoeEndStripComment(token);
101-
case HTML_COMMENT -> output.writeHtmlComment(token);
102-
case BR_TAG -> output.writeBr(standardizeBrToken(token));
103-
case WHITESPACE -> output.requestWhitespace();
104-
case FORCED_NEWLINE -> output.writeLineBreakNoAutoIndent();
105-
case LITERAL -> output.writeLiteral(token);
106-
case PARAGRAPH_CLOSE_TAG, LIST_ITEM_CLOSE_TAG, OPTIONAL_LINE_BREAK -> {}
110+
case FooterJavadocTagStart t -> output.writeFooterJavadocTagStart(t);
111+
case SnippetBegin t -> output.writeSnippetBegin(t);
112+
case SnippetEnd t -> output.writeSnippetEnd(t);
113+
case ListOpenTag t -> output.writeListOpen(t);
114+
case ListCloseTag t -> output.writeListClose(t);
115+
case ListItemOpenTag t -> output.writeListItemOpen(t);
116+
case HeaderOpenTag t -> output.writeHeaderOpen(t);
117+
case HeaderCloseTag t -> output.writeHeaderClose(t);
118+
case ParagraphOpenTag t -> output.writeParagraphOpen(standardizePToken(t));
119+
case BlockquoteOpenTag t -> output.writeBlockquoteOpenOrClose(t);
120+
case BlockquoteCloseTag t -> output.writeBlockquoteOpenOrClose(t);
121+
case PreOpenTag t -> output.writePreOpen(t);
122+
case PreCloseTag t -> output.writePreClose(t);
123+
case CodeOpenTag t -> output.writeCodeOpen(t);
124+
case CodeCloseTag t -> output.writeCodeClose(t);
125+
case TableOpenTag t -> output.writeTableOpen(t);
126+
case TableCloseTag t -> output.writeTableClose(t);
127+
case MoeBeginStripComment t -> output.requestMoeBeginStripComment(t);
128+
case MoeEndStripComment t -> output.writeMoeEndStripComment(t);
129+
case HtmlComment t -> output.writeHtmlComment(t);
130+
case BrTag t -> output.writeBr(standardizeBrToken(t));
131+
case Whitespace unused -> output.requestWhitespace();
132+
case ForcedNewline unused -> output.writeLineBreakNoAutoIndent();
133+
case Literal t -> output.writeLiteral(t);
134+
case ParagraphCloseTag unused -> {}
135+
case ListItemCloseTag unused -> {}
136+
case OptionalLineBreak unused -> {}
107137
}
108138
}
109139
throw new AssertionError();
@@ -126,8 +156,8 @@ private static Token standardize(Token token, Token standardToken) {
126156
return SIMPLE_TAG_PATTERN.matcher(token.value()).matches() ? standardToken : token;
127157
}
128158

129-
private static final Token STANDARD_BR_TOKEN = new Token(BR_TAG, "<br>");
130-
private static final Token STANDARD_P_TOKEN = new Token(PARAGRAPH_OPEN_TAG, "<p>");
159+
private static final Token STANDARD_BR_TOKEN = new BrTag("<br>");
160+
private static final Token STANDARD_P_TOKEN = new ParagraphOpenTag("<p>");
131161
private static final Pattern SIMPLE_TAG_PATTERN = compile("^<\\w+\\s*/?\\s*>", CASE_INSENSITIVE);
132162

133163
private static final Pattern ONE_CONTENT_LINE_PATTERN = compile(" */[*][*]\n *[*] (.*)\n *[*]/");

0 commit comments

Comments
 (0)