package glslplugin.annotation.impl;
import com.intellij.lang.annotation.Annotation;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.psi.tree.IElementType;
import glslplugin.GLSLHighlighter;
import glslplugin.annotation.Annotator;
import glslplugin.lang.elements.GLSLElementTypes;
import glslplugin.lang.elements.preprocessor.GLSLDefineDirective;
import glslplugin.lang.elements.preprocessor.GLSLRedefinedToken;
import glslplugin.lang.elements.reference.GLSLMacroReference;
import org.jetbrains.annotations.NotNull;
/**
*
* Created by abigail on 08/07/15.
*/
public class RedefinedTokenAnnotation extends Annotator<GLSLRedefinedToken> {
@Override
public void annotate(GLSLRedefinedToken identifier, AnnotationHolder holder) {
String definition;
final IElementType identifierType = identifier.getNode().getElementType();
if(identifierType instanceof GLSLElementTypes.RedefinedTokenElementType){
definition = ((GLSLElementTypes.RedefinedTokenElementType) identifierType).text;
}else{
GLSLMacroReference reference = identifier.getReference();
GLSLDefineDirective referent = (reference != null) ? reference.resolve() : null;
definition = (referent != null) ? referent.getBoundText() : null;
}
Annotation annotation = holder.createInfoAnnotation(identifier, definition);
annotation.setTextAttributes(GLSLHighlighter.GLSL_REDEFINED_TOKEN[0]);
}
@NotNull
@Override
public Class<GLSLRedefinedToken> getElementType() {
return GLSLRedefinedToken.class;
}
}