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.printer.concretesyntaxmodel; |
23 | |
24 | import com.github.javaparser.GeneratedJavaParserConstants; |
25 | import com.github.javaparser.ast.Node; |
26 | import com.github.javaparser.ast.expr.IntegerLiteralExpr; |
27 | import com.github.javaparser.ast.observer.ObservableProperty; |
28 | import com.github.javaparser.printer.SourcePrinter; |
29 | |
30 | import static com.github.javaparser.utils.CodeGenerationUtils.f; |
31 | |
32 | public class CsmAttribute implements CsmElement { |
33 | public ObservableProperty getProperty() { |
34 | return property; |
35 | } |
36 | |
37 | private final ObservableProperty property; |
38 | |
39 | public CsmAttribute(ObservableProperty property) { |
40 | this.property = property; |
41 | } |
42 | |
43 | @Override |
44 | public void prettyPrint(Node node, SourcePrinter printer) { |
45 | Object value = property.getRawValue(node); |
46 | printer.print(PrintingHelper.printToString(value)); |
47 | } |
48 | |
49 | /** |
50 | * Obtain the token type corresponding to the specific value of the attribute. |
51 | * For example, to the attribute "Operator" different token could correspond like PLUS or MINUS. |
52 | * |
53 | * @param tokenText Operator's token text |
54 | */ |
55 | public int getTokenType(Node node, String text, String tokenText) { |
56 | switch (property) { |
57 | case IDENTIFIER: |
58 | return GeneratedJavaParserConstants.IDENTIFIER; |
59 | case TYPE: { |
60 | String expectedImage = "\"" + text.toLowerCase() + "\""; |
61 | for (int i=0;i<GeneratedJavaParserConstants.tokenImage.length;i++) { |
62 | if (GeneratedJavaParserConstants.tokenImage[i].equals(expectedImage)) { |
63 | return i; |
64 | } |
65 | } |
66 | throw new RuntimeException(f("Attribute '%s' does not corresponding to any expected value. Text: %s", property.camelCaseName(), text)); |
67 | } |
68 | case KEYWORD: |
69 | case OPERATOR: { |
70 | String expectedImage = "\"" + tokenText.toLowerCase() + "\""; |
71 | for (int i = 0; i < GeneratedJavaParserConstants.tokenImage.length; i++) { |
72 | if (GeneratedJavaParserConstants.tokenImage[i].equals(expectedImage)) { |
73 | return i; |
74 | } |
75 | } |
76 | throw new RuntimeException(f("Attribute '%s' does not corresponding to any expected value. Text: %s", property.camelCaseName(), tokenText)); |
77 | } |
78 | case VALUE: |
79 | if (node instanceof IntegerLiteralExpr) { |
80 | return GeneratedJavaParserConstants.INTEGER_LITERAL; |
81 | } |
82 | case NAME: |
83 | return GeneratedJavaParserConstants.IDENTIFIER; |
84 | } |
85 | throw new UnsupportedOperationException("getTokenType does not know how to handle property " |
86 | + property + " with text: " + text); |
87 | } |
88 | } |
89 |
Members