| /* |
| * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser. |
| * Copyright (C) 2011, 2013-2016 The JavaParser Team. |
| * |
| * This file is part of JavaParser. |
| * |
| * JavaParser can be used either under the terms of |
| * a) the GNU Lesser General Public License as published by |
| * the Free Software Foundation, either version 3 of the License, or |
| * (at your option) any later version. |
| * b) the terms of the Apache License |
| * |
| * You should have received a copy of both licenses in LICENCE.LGPL and |
| * LICENCE.APACHE. Please refer to those files for details. |
| * |
| * JavaParser is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| */ |
| |
| package com.github.javaparser.printer.concretesyntaxmodel; |
| |
| import com.github.javaparser.GeneratedJavaParserConstants; |
| import com.github.javaparser.ast.Node; |
| import com.github.javaparser.printer.SourcePrinter; |
| import com.github.javaparser.TokenTypes; |
| import com.github.javaparser.utils.Utils; |
| |
| import static com.github.javaparser.TokenTypes.isEndOfLineToken; |
| import static com.github.javaparser.TokenTypes.isSpaceOrTab; |
| |
| public class CsmToken implements CsmElement { |
| private final int tokenType; |
| private String content; |
| private TokenContentCalculator tokenContentCalculator; |
| |
| public interface TokenContentCalculator { |
| String calculate(Node node); |
| } |
| |
| public int getTokenType() { |
| return tokenType; |
| } |
| |
| public String getContent(Node node) { |
| if (tokenContentCalculator != null) { |
| return tokenContentCalculator.calculate(node); |
| } |
| return content; |
| } |
| |
| public CsmToken(int tokenType) { |
| this.tokenType = tokenType; |
| this.content = GeneratedJavaParserConstants.tokenImage[tokenType]; |
| if (content.startsWith("\"")) { |
| content = content.substring(1, content.length() - 1); |
| } |
| if (isEndOfLineToken(tokenType)) { |
| content = Utils.EOL; |
| } else if (isSpaceOrTab(tokenType)) { |
| content = " "; |
| } |
| } |
| |
| public CsmToken(int tokenType, String content) { |
| this.tokenType = tokenType; |
| this.content = content; |
| } |
| |
| public CsmToken(int tokenType, TokenContentCalculator tokenContentCalculator) { |
| this.tokenType = tokenType; |
| this.tokenContentCalculator = tokenContentCalculator; |
| } |
| |
| @Override |
| public void prettyPrint(Node node, SourcePrinter printer) { |
| if (isEndOfLineToken(tokenType)) { |
| printer.println(); |
| } else { |
| printer.print(getContent(node)); |
| } |
| } |
| |
| @Override |
| public String toString() { |
| return "token(" + content + ")"; |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) return true; |
| if (o == null || getClass() != o.getClass()) return false; |
| |
| CsmToken csmToken = (CsmToken) o; |
| |
| if (tokenType != csmToken.tokenType) return false; |
| if (content != null ? !content.equals(csmToken.content) : csmToken.content != null) return false; |
| return tokenContentCalculator != null ? tokenContentCalculator.equals(csmToken.tokenContentCalculator) : csmToken.tokenContentCalculator == null; |
| } |
| |
| @Override |
| public int hashCode() { |
| int result = tokenType; |
| result = 31 * result + (content != null ? content.hashCode() : 0); |
| result = 31 * result + (tokenContentCalculator != null ? tokenContentCalculator.hashCode() : 0); |
| return result; |
| } |
| |
| public boolean isWhiteSpace() { |
| return TokenTypes.isWhitespace(tokenType); |
| } |
| |
| public boolean isNewLine() { |
| return TokenTypes.isEndOfLineToken(tokenType); |
| } |
| } |