JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/printer/concretesyntaxmodel/CsmAttribute.java
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
22package com.github.javaparser.printer.concretesyntaxmodel;
23
24import com.github.javaparser.GeneratedJavaParserConstants;
25import com.github.javaparser.ast.Node;
26import com.github.javaparser.ast.expr.IntegerLiteralExpr;
27import com.github.javaparser.ast.observer.ObservableProperty;
28import com.github.javaparser.printer.SourcePrinter;
29
30import static com.github.javaparser.utils.CodeGenerationUtils.f;
31
32public 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 nodeSourcePrinter 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 nodeString textString 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 = 0i < GeneratedJavaParserConstants.tokenImage.lengthi++) {
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
MembersX
CsmAttribute:getTokenType
CsmAttribute:property
CsmAttribute:getTokenType:Block:Block:expectedImage
CsmAttribute:prettyPrint
CsmAttribute:CsmAttribute
CsmAttribute:prettyPrint:Block:value
CsmAttribute:getProperty
Members
X