Home | History | Annotate | Download | only in concretesyntaxmodel
      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