blob: 4643958aeaf9f1fac376c4fdca805f2cc6c6008d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.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 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;
}
}