1package com.github.javaparser;
2
3import static com.github.javaparser.GeneratedJavaParserConstants.*;
4import static com.github.javaparser.utils.Utils.EOL;
5
6/**
7 * Complements GeneratedJavaParserConstants
8 */
9public class TokenTypes {
10    public static boolean isWhitespace(int kind) {
11        return getCategory(kind).isWhitespace();
12    }
13
14    /**
15     * @deprecated use isEndOfLineToken
16     */
17    @Deprecated
18    public static boolean isEndOfLineCharacter(int kind) {
19        return isEndOfLineToken(kind);
20    }
21
22    public static boolean isEndOfLineToken(int kind) {
23        return getCategory(kind).isEndOfLine();
24    }
25
26    public static boolean isWhitespaceOrComment(int kind) {
27        return getCategory(kind).isWhitespaceOrComment();
28    }
29
30    public static boolean isSpaceOrTab(int kind) {
31        return getCategory(kind).isWhitespaceButNotEndOfLine();
32    }
33
34    public static boolean isComment(int kind) {
35        return getCategory(kind).isComment();
36    }
37
38    /**
39     * @deprecated use eolTokenKind
40     */
41    @Deprecated
42    public static int eolToken() {
43        return eolTokenKind();
44    }
45
46    /**
47     * @return the kind of EOL token to use on the platform you're running on.
48     */
49    public static int eolTokenKind() {
50        if (EOL.equals("\n")) {
51            return UNIX_EOL;
52        }
53        if (EOL.equals("\r\n")) {
54            return WINDOWS_EOL;
55        }
56        if (EOL.equals("\r")) {
57            return OLD_MAC_EOL;
58        }
59        throw new AssertionError("Unknown EOL character sequence");
60    }
61
62    /**
63     * @return the token kind for a single space.
64     */
65    public static int spaceTokenKind() {
66        return SPACE;
67    }
68
69    /**
70     * @deprecated use spaceTokenKind
71     */
72    @Deprecated
73    public static int spaceToken() {
74        return spaceTokenKind();
75    }
76
77    /**
78     * Category of a token, a little more detailed than
79     * <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.5">The JLS</a>.
80     */
81    public static JavaToken.Category getCategory(int kind) {
82        switch (kind) {
83            case WINDOWS_EOL:
84            case UNIX_EOL:
85            case OLD_MAC_EOL:
86                return JavaToken.Category.EOL;
87            case EOF:
88            case SPACE:
89            case CTRL_Z:
90                return JavaToken.Category.WHITESPACE_NO_EOL;
91            case SINGLE_LINE_COMMENT:
92            case JAVADOC_COMMENT:
93            case MULTI_LINE_COMMENT:
94                return JavaToken.Category.COMMENT;
95            case ABSTRACT:
96            case ASSERT:
97            case BOOLEAN:
98            case BREAK:
99            case BYTE:
100            case CASE:
101            case CATCH:
102            case CHAR:
103            case CLASS:
104            case CONST:
105            case CONTINUE:
106            case _DEFAULT:
107            case DO:
108            case DOUBLE:
109            case ELSE:
110            case ENUM:
111            case EXTENDS:
112            case FALSE:
113            case FINAL:
114            case FINALLY:
115            case FLOAT:
116            case FOR:
117            case GOTO:
118            case IF:
119            case IMPLEMENTS:
120            case IMPORT:
121            case INSTANCEOF:
122            case INT:
123            case INTERFACE:
124            case LONG:
125            case NATIVE:
126            case NEW:
127            case NULL:
128            case PACKAGE:
129            case PRIVATE:
130            case PROTECTED:
131            case PUBLIC:
132            case RETURN:
133            case SHORT:
134            case STATIC:
135            case STRICTFP:
136            case SUPER:
137            case SWITCH:
138            case SYNCHRONIZED:
139            case THIS:
140            case THROW:
141            case THROWS:
142            case TRANSIENT:
143            case TRUE:
144            case TRY:
145            case VOID:
146            case VOLATILE:
147            case WHILE:
148            case REQUIRES:
149            case TO:
150            case WITH:
151            case OPEN:
152            case OPENS:
153            case USES:
154            case MODULE:
155            case EXPORTS:
156            case PROVIDES:
157            case TRANSITIVE:
158                return JavaToken.Category.KEYWORD;
159            case LONG_LITERAL:
160            case INTEGER_LITERAL:
161            case DECIMAL_LITERAL:
162            case HEX_LITERAL:
163            case OCTAL_LITERAL:
164            case BINARY_LITERAL:
165            case FLOATING_POINT_LITERAL:
166            case DECIMAL_FLOATING_POINT_LITERAL:
167            case DECIMAL_EXPONENT:
168            case HEXADECIMAL_FLOATING_POINT_LITERAL:
169            case HEXADECIMAL_EXPONENT:
170            case CHARACTER_LITERAL:
171            case STRING_LITERAL:
172                return JavaToken.Category.LITERAL;
173            case IDENTIFIER:
174                return JavaToken.Category.IDENTIFIER;
175            case LPAREN:
176            case RPAREN:
177            case LBRACE:
178            case RBRACE:
179            case LBRACKET:
180            case RBRACKET:
181            case SEMICOLON:
182            case COMMA:
183            case DOT:
184            case AT:
185                return JavaToken.Category.SEPARATOR;
186            case ASSIGN:
187            case LT:
188            case BANG:
189            case TILDE:
190            case HOOK:
191            case COLON:
192            case EQ:
193            case LE:
194            case GE:
195            case NE:
196            case SC_OR:
197            case SC_AND:
198            case INCR:
199            case DECR:
200            case PLUS:
201            case MINUS:
202            case STAR:
203            case SLASH:
204            case BIT_AND:
205            case BIT_OR:
206            case XOR:
207            case REM:
208            case LSHIFT:
209            case PLUSASSIGN:
210            case MINUSASSIGN:
211            case STARASSIGN:
212            case SLASHASSIGN:
213            case ANDASSIGN:
214            case ORASSIGN:
215            case XORASSIGN:
216            case REMASSIGN:
217            case LSHIFTASSIGN:
218            case RSIGNEDSHIFTASSIGN:
219            case RUNSIGNEDSHIFTASSIGN:
220            case ELLIPSIS:
221            case ARROW:
222            case DOUBLECOLON:
223            case RUNSIGNEDSHIFT:
224            case RSIGNEDSHIFT:
225            case GT:
226                return JavaToken.Category.OPERATOR;
227            // The following are tokens that are only used internally by the lexer
228            case ENTER_JAVADOC_COMMENT:
229            case ENTER_MULTILINE_COMMENT:
230            case COMMENT_CONTENT:
231            case HEX_DIGITS:
232            case LETTER:
233            case UNICODE_ESCAPE:
234            case PART_LETTER:
235            default:
236                throw new AssertionError("Invalid token kind " + kind);
237        }
238    }
239}
240