/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.jdt.javaeditor;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.SimpleName;
/**
* Semantic token
*/
public final class SemanticToken {
/** AST node */
private SimpleName fNode;
private Expression fLiteral;
/** Binding */
private IBinding fBinding;
/** Is the binding resolved? */
private boolean fIsBindingResolved = false;
/** AST root */
private CompilationUnit fRoot;
private boolean fIsRootResolved = false;
/**
* @return Returns the binding, can be <code>null</code>.
*/
public IBinding getBinding() {
if (!fIsBindingResolved) {
fIsBindingResolved = true;
if (fNode != null)
fBinding = fNode.resolveBinding();
}
return fBinding;
}
/**
* @return the AST node (a {@link org.eclipse.jdt.core.dom.SimpleName})
*/
public SimpleName getNode() {
return fNode;
}
/**
* @return the AST node (a <code>Boolean-, Character- or NumberLiteral</code>)
*/
public Expression getLiteral() {
return fLiteral;
}
/**
* @return the AST root
*/
public CompilationUnit getRoot() {
if (!fIsRootResolved) {
fIsRootResolved = true;
fRoot = (CompilationUnit)(fNode != null ? fNode : fLiteral).getRoot();
}
return fRoot;
}
/**
* Update this token with the given AST node.
* <p>
* NOTE: Allowed to be used by {@link SemanticHighlightingReconciler} only.
* </p>
*
* @param node
* the AST simple name
*/
void update(SimpleName node) {
clear();
fNode = node;
}
/**
* Update this token with the given AST node.
* <p>
* NOTE: Allowed to be used by {@link SemanticHighlightingReconciler} only.
* </p>
*
* @param literal
* the AST literal
*/
void update(Expression literal) {
clear();
fLiteral = literal;
}
/**
* Clears this token.
* <p>
* NOTE: Allowed to be used by {@link SemanticHighlightingReconciler} only.
* </p>
*/
void clear() {
fNode = null;
fLiteral = null;
fBinding = null;
fIsBindingResolved = false;
fRoot = null;
fIsRootResolved = false;
}
}