1 /* 2 * Copyright (C) 2007-2010 Jlio Vilmar Gesser. 3 * Copyright (C) 2011, 2013-2016 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 public class CsmAttribute implements CsmElement { 31 public ObservableProperty getProperty() { 32 return property; 33 } 34 35 private final ObservableProperty property; 36 37 public CsmAttribute(ObservableProperty property) { 38 this.property = property; 39 } 40 41 @Override 42 public void prettyPrint(Node node, SourcePrinter printer) { 43 Object value = property.getRawValue(node); 44 printer.print(PrintingHelper.printToString(value)); 45 } 46 47 /** 48 * Obtain the token type corresponding to the specific value of the attribute. 49 * For example, to the attribute "Operator" different token could correspond like PLUS or MINUS. 50 */ 51 public int getTokenType(Node node, String text) { 52 switch (property) { 53 case IDENTIFIER: 54 return GeneratedJavaParserConstants.IDENTIFIER; 55 case TYPE: 56 String expectedImage = "\"" + text.toLowerCase() + "\""; 57 for (int i=0;i<GeneratedJavaParserConstants.tokenImage.length;i++) { 58 if (GeneratedJavaParserConstants.tokenImage[i].equals(expectedImage)) { 59 return i; 60 } 61 } 62 throw new RuntimeException("Attribute 'type' does not corresponding to any expected value. Text: " + text); 63 case OPERATOR: 64 try { 65 return (Integer)(GeneratedJavaParserConstants.class.getDeclaredField(text).get(null)); 66 } catch (IllegalAccessException|NoSuchFieldException e) { 67 throw new RuntimeException("Attribute 'operator' does not corresponding to any expected value. Text: " + text, e); 68 } 69 case VALUE: 70 if (node instanceof IntegerLiteralExpr) { 71 return GeneratedJavaParserConstants.INTEGER_LITERAL; 72 } 73 case NAME: 74 return GeneratedJavaParserConstants.IDENTIFIER; 75 } 76 throw new UnsupportedOperationException("getTokenType does not know how to handle property " 77 + property + " with text: " + text); 78 } 79 } 80