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.printer.SourcePrinter;
     27 import com.github.javaparser.TokenTypes;
     28 import com.github.javaparser.utils.Utils;
     29 
     30 import static com.github.javaparser.TokenTypes.isEndOfLineToken;
     31 import static com.github.javaparser.TokenTypes.isSpaceOrTab;
     32 
     33 public class CsmToken implements CsmElement {
     34     private final int tokenType;
     35     private String content;
     36     private TokenContentCalculator tokenContentCalculator;
     37 
     38     public interface TokenContentCalculator {
     39         String calculate(Node node);
     40     }
     41 
     42     public int getTokenType() {
     43         return tokenType;
     44     }
     45 
     46     public String getContent(Node node) {
     47         if (tokenContentCalculator != null) {
     48             return tokenContentCalculator.calculate(node);
     49         }
     50         return content;
     51     }
     52 
     53     public CsmToken(int tokenType) {
     54         this.tokenType = tokenType;
     55         this.content = GeneratedJavaParserConstants.tokenImage[tokenType];
     56         if (content.startsWith("\"")) {
     57             content = content.substring(1, content.length() - 1);
     58         }
     59         if (isEndOfLineToken(tokenType)) {
     60             content = Utils.EOL;
     61         } else if (isSpaceOrTab(tokenType)) {
     62             content = " ";
     63         }
     64     }
     65 
     66     public CsmToken(int tokenType, String content) {
     67         this.tokenType = tokenType;
     68         this.content = content;
     69     }
     70 
     71     public CsmToken(int tokenType, TokenContentCalculator tokenContentCalculator) {
     72         this.tokenType = tokenType;
     73         this.tokenContentCalculator = tokenContentCalculator;
     74     }
     75 
     76     @Override
     77     public void prettyPrint(Node node, SourcePrinter printer) {
     78         if (isEndOfLineToken(tokenType)) {
     79             printer.println();
     80         } else {
     81             printer.print(getContent(node));
     82         }
     83     }
     84 
     85     @Override
     86     public String toString() {
     87         return "token(" + content + ")";
     88     }
     89 
     90     @Override
     91     public boolean equals(Object o) {
     92         if (this == o) return true;
     93         if (o == null || getClass() != o.getClass()) return false;
     94 
     95         CsmToken csmToken = (CsmToken) o;
     96 
     97         if (tokenType != csmToken.tokenType) return false;
     98         if (content != null ? !content.equals(csmToken.content) : csmToken.content != null) return false;
     99         return tokenContentCalculator != null ? tokenContentCalculator.equals(csmToken.tokenContentCalculator) : csmToken.tokenContentCalculator == null;
    100     }
    101 
    102     @Override
    103     public int hashCode() {
    104         int result = tokenType;
    105         result = 31 * result + (content != null ? content.hashCode() : 0);
    106         result = 31 * result + (tokenContentCalculator != null ? tokenContentCalculator.hashCode() : 0);
    107         return result;
    108     }
    109 
    110     public boolean isWhiteSpace() {
    111         return TokenTypes.isWhitespace(tokenType);
    112     }
    113 
    114     public boolean isNewLine() {
    115         return TokenTypes.isEndOfLineToken(tokenType);
    116     }
    117 }
    118