package org.angularjs.lang.parser; import com.intellij.lang.ASTNode; import com.intellij.lang.Language; import com.intellij.lang.javascript.types.JSEmbeddedContentElementType; import com.intellij.lexer.Lexer; import com.intellij.psi.tree.ICompositeElementType; import com.intellij.psi.tree.IElementType; import org.angularjs.lang.AngularJSLanguage; import org.angularjs.lang.psi.AngularJSAsExpression; import org.angularjs.lang.psi.AngularJSFilterExpression; import org.angularjs.lang.psi.AngularJSMessageFormatExpression; import org.angularjs.lang.psi.AngularJSRepeatExpression; import org.jetbrains.annotations.NotNull; /** * @author Dennis.Ushakov */ public interface AngularJSElementTypes { IElementType REPEAT_EXPRESSION = new AngularJSElementType("REPEAT_EXPRESSION") { @NotNull @Override public ASTNode createCompositeNode() { return new AngularJSRepeatExpression(this); } }; IElementType FOR_EXPRESSION = new AngularJSElementType("REPEAT_EXPRESSION") { @NotNull @Override public ASTNode createCompositeNode() { return new AngularJSRepeatExpression(this); } }; IElementType FILTER_EXPRESSION = new AngularJSElementType("FILTER_EXPRESSION") { @NotNull @Override public ASTNode createCompositeNode() { return new AngularJSFilterExpression(this); } }; IElementType AS_EXPRESSION = new AngularJSElementType("AS_EXPRESSION") { @NotNull @Override public ASTNode createCompositeNode() { return new AngularJSAsExpression(this); } }; IElementType MESSAGE_FORMAT_EXPRESSION_NAME = new IElementType("MESSAGE_FORMAT_EXPRESSION_NAME", AngularJSLanguage.INSTANCE); IElementType MESSAGE_FORMAT_EXPRESSION = new AngularJSElementType("MESSAGE_FORMAT_EXPRESSION") { @NotNull @Override public ASTNode createCompositeNode() { return new AngularJSMessageFormatExpression(this); } }; IElementType MESSAGE_FORMAT_MESSAGE = new IElementType("MESSAGE_FORMAT_MESSAGE", AngularJSLanguage.INSTANCE); IElementType MESSAGE_FORMAT_OPTION = new IElementType("MESSAGE_FORMAT_OPTION", AngularJSLanguage.INSTANCE); IElementType MESSAGE_FORMAT_SELECTION_KEYWORD = new IElementType("MESSAGE_FORMAT_SELECTION_KEYWORD", AngularJSLanguage.INSTANCE); IElementType EMBEDDED_CONTENT = new JSEmbeddedContentElementType(AngularJSLanguage.INSTANCE, "ANG_") { @Override protected Lexer createStripperLexer(Language baseLanguage) { return null; } }; abstract class AngularJSElementType extends IElementType implements ICompositeElementType { public AngularJSElementType(@NotNull String debugName) { super(debugName, AngularJSLanguage.INSTANCE); } } }