1 | /* |
---|---|
2 | * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser. |
3 | * Copyright (C) 2011, 2013-2020 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; |
23 | |
24 | import com.github.javaparser.utils.LineSeparator; |
25 | |
26 | import static com.github.javaparser.GeneratedJavaParserConstants.*; |
27 | |
28 | /** |
29 | * Complements GeneratedJavaParserConstants |
30 | */ |
31 | public class TokenTypes { |
32 | public static boolean isWhitespace(int kind) { |
33 | return getCategory(kind).isWhitespace(); |
34 | } |
35 | |
36 | public static boolean isEndOfLineToken(int kind) { |
37 | return getCategory(kind).isEndOfLine(); |
38 | } |
39 | |
40 | public static boolean isWhitespaceOrComment(int kind) { |
41 | return getCategory(kind).isWhitespaceOrComment(); |
42 | } |
43 | |
44 | /** |
45 | * @deprecated Use {@link #isWhitespaceButNotEndOfLine(int)} which more explicitly reflects that this also includes |
46 | * other whitespace e.g. {@code EOF} and {@code CTRL_Z} and a large number of other characters. |
47 | * See the grammar for details of exactly which characters are included as a "space" (. |
48 | * <pre>{@code |
49 | * <SPACE: [" ", "\t", "\f", "\u0085", "\u00A0", "\u1680", "\u180e", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", "\u2005", |
50 | * "\u2006", "\u2007", "\u2008", "\u2009", "\u200a", "\u200b", "\u200c", "\u200d", "\u2028", "\u2029", "\u202f", "\u205f", "\u2060", "\u3000", "\ufeff"]> |
51 | * }</pre> |
52 | */ |
53 | @Deprecated |
54 | public static boolean isSpaceOrTab(int kind) { |
55 | return isWhitespaceButNotEndOfLine(kind); |
56 | } |
57 | |
58 | public static boolean isWhitespaceButNotEndOfLine(int kind) { |
59 | return getCategory(kind).isWhitespaceButNotEndOfLine(); |
60 | } |
61 | |
62 | public static boolean isComment(int kind) { |
63 | return getCategory(kind).isComment(); |
64 | } |
65 | |
66 | /** |
67 | * @return the kind of EOL token to use on the platform you're running on. |
68 | */ |
69 | public static int eolTokenKind(LineSeparator lineSeparator) { |
70 | if (lineSeparator.equalsString(LineSeparator.LF)) { |
71 | return UNIX_EOL; |
72 | } |
73 | if (lineSeparator.equalsString(LineSeparator.CRLF)) { |
74 | return WINDOWS_EOL; |
75 | } |
76 | if (lineSeparator.equalsString(LineSeparator.CR)) { |
77 | return OLD_MAC_EOL; |
78 | } |
79 | throw new AssertionError("Unknown EOL character sequence"); |
80 | } |
81 | |
82 | public static int eolTokenKind() { |
83 | return eolTokenKind(LineSeparator.SYSTEM); |
84 | } |
85 | |
86 | /** |
87 | * @return the token kind for a single space. |
88 | */ |
89 | public static int spaceTokenKind() { |
90 | return SPACE; |
91 | } |
92 | |
93 | /** |
94 | * Category of a token, a little more detailed than |
95 | * <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.5">The JLS</a>. |
96 | * FIXME: It appears that {@code ...} {@code ELLIPSIS} and {@code ::} {@code DOUBLECOLON} are (wrongly) listed in the "operators" section, rather than "separators" |
97 | */ |
98 | public static JavaToken.Category getCategory(int kind) { |
99 | switch (kind) { |
100 | case WINDOWS_EOL: |
101 | case UNIX_EOL: |
102 | case OLD_MAC_EOL: |
103 | return JavaToken.Category.EOL; |
104 | case EOF: |
105 | case SPACE: |
106 | case CTRL_Z: |
107 | return JavaToken.Category.WHITESPACE_NO_EOL; |
108 | case SINGLE_LINE_COMMENT: |
109 | case JAVADOC_COMMENT: |
110 | case MULTI_LINE_COMMENT: |
111 | return JavaToken.Category.COMMENT; |
112 | case ABSTRACT: |
113 | case ASSERT: |
114 | case BOOLEAN: |
115 | case BREAK: |
116 | case BYTE: |
117 | case CASE: |
118 | case CATCH: |
119 | case CHAR: |
120 | case CLASS: |
121 | case CONST: |
122 | case CONTINUE: |
123 | case _DEFAULT: |
124 | case DO: |
125 | case DOUBLE: |
126 | case ELSE: |
127 | case ENUM: |
128 | case EXTENDS: |
129 | case FINAL: |
130 | case FINALLY: |
131 | case FLOAT: |
132 | case FOR: |
133 | case GOTO: |
134 | case IF: |
135 | case IMPLEMENTS: |
136 | case IMPORT: |
137 | case INSTANCEOF: |
138 | case INT: |
139 | case INTERFACE: |
140 | case LONG: |
141 | case NATIVE: |
142 | case NEW: |
143 | case PACKAGE: |
144 | case PRIVATE: |
145 | case PROTECTED: |
146 | case PUBLIC: |
147 | case RETURN: |
148 | case SHORT: |
149 | case STATIC: |
150 | case STRICTFP: |
151 | case SUPER: |
152 | case SWITCH: |
153 | case SYNCHRONIZED: |
154 | case THIS: |
155 | case THROW: |
156 | case THROWS: |
157 | case TRANSIENT: |
158 | case TRY: |
159 | case VOID: |
160 | case VOLATILE: |
161 | case WHILE: |
162 | case YIELD: |
163 | case REQUIRES: |
164 | case TO: |
165 | case WITH: |
166 | case OPEN: |
167 | case OPENS: |
168 | case USES: |
169 | case MODULE: |
170 | case EXPORTS: |
171 | case PROVIDES: |
172 | case TRANSITIVE: |
173 | return JavaToken.Category.KEYWORD; |
174 | case LONG_LITERAL: |
175 | case INTEGER_LITERAL: |
176 | case DECIMAL_LITERAL: |
177 | case HEX_LITERAL: |
178 | case OCTAL_LITERAL: |
179 | case BINARY_LITERAL: |
180 | case FLOATING_POINT_LITERAL: |
181 | case DECIMAL_FLOATING_POINT_LITERAL: |
182 | case DECIMAL_EXPONENT: |
183 | case HEXADECIMAL_FLOATING_POINT_LITERAL: |
184 | case HEXADECIMAL_EXPONENT: |
185 | case CHARACTER_LITERAL: |
186 | case STRING_LITERAL: |
187 | case TEXT_BLOCK_LITERAL: |
188 | case TRUE: |
189 | case FALSE: |
190 | case NULL: |
191 | return JavaToken.Category.LITERAL; |
192 | case IDENTIFIER: |
193 | return JavaToken.Category.IDENTIFIER; |
194 | case LPAREN: |
195 | case RPAREN: |
196 | case LBRACE: |
197 | case RBRACE: |
198 | case LBRACKET: |
199 | case RBRACKET: |
200 | case SEMICOLON: |
201 | case COMMA: |
202 | case DOT: |
203 | case AT: |
204 | return JavaToken.Category.SEPARATOR; |
205 | case ASSIGN: |
206 | case LT: |
207 | case BANG: |
208 | case TILDE: |
209 | case HOOK: |
210 | case COLON: |
211 | case EQ: |
212 | case LE: |
213 | case GE: |
214 | case NE: |
215 | case SC_OR: |
216 | case SC_AND: |
217 | case INCR: |
218 | case DECR: |
219 | case PLUS: |
220 | case MINUS: |
221 | case STAR: |
222 | case SLASH: |
223 | case BIT_AND: |
224 | case BIT_OR: |
225 | case XOR: |
226 | case REM: |
227 | case LSHIFT: |
228 | case PLUSASSIGN: |
229 | case MINUSASSIGN: |
230 | case STARASSIGN: |
231 | case SLASHASSIGN: |
232 | case ANDASSIGN: |
233 | case ORASSIGN: |
234 | case XORASSIGN: |
235 | case REMASSIGN: |
236 | case LSHIFTASSIGN: |
237 | case RSIGNEDSHIFTASSIGN: |
238 | case RUNSIGNEDSHIFTASSIGN: |
239 | case ELLIPSIS: |
240 | case ARROW: |
241 | case DOUBLECOLON: |
242 | case RUNSIGNEDSHIFT: |
243 | case RSIGNEDSHIFT: |
244 | case GT: |
245 | return JavaToken.Category.OPERATOR; |
246 | // The following are tokens that are only used internally by the lexer |
247 | case ENTER_JAVADOC_COMMENT: |
248 | case ENTER_MULTILINE_COMMENT: |
249 | case COMMENT_CONTENT: |
250 | case HEX_DIGITS: |
251 | case LETTER: |
252 | case UNICODE_ESCAPE: |
253 | case PART_LETTER: |
254 | case TEXT_BLOCK_CONTENT: |
255 | case ENTER_TEXT_BLOCK: |
256 | default: |
257 | throw new AssertionError("Invalid token kind " + kind); |
258 | } |
259 | } |
260 | } |
261 |
Members