Added custom psi type for ide templates.

This commit is contained in:
Evgeny Gerashchenko
2012-02-08 21:12:12 +04:00
parent af9fcfd5e0
commit 3c14b1decd
5 changed files with 42 additions and 0 deletions
@@ -146,4 +146,6 @@ public interface JetNodeTypes {
JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
JetNodeType NAMESPACE_HEADER = new JetNodeType("NAMESPACE_HEADER", JetNamespaceHeader.class);
JetNodeType IDE_TEMPLATE_EXPRESSION = new JetNodeType("IDE_TEMPLATE_EXPRESSION", JetIdeTemplateExpression.class);
}
@@ -6,6 +6,7 @@ package org.jetbrains.jet.lang.parsing;
import com.intellij.lang.PsiBuilder;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeType;
import org.jetbrains.jet.lexer.JetKeywordToken;
@@ -1647,10 +1648,18 @@ public class JetParsing extends AbstractJetParsing {
* "<#<" expression ">#>"
*/
boolean parseIdeTemplate() {
@Nullable JetNodeType nodeType = IDE_TEMPLATE_EXPRESSION;
if (at(IDE_TEMPLATE_START)) {
PsiBuilder.Marker mark = null;
if (nodeType != null) {
mark = mark();
}
advance();
expect(IDENTIFIER, "Expecting identifier inside template");
expect(IDE_TEMPLATE_END, "Expecting IDE template end after identifier");
if (nodeType != null) {
mark.done(nodeType);
}
return true;
} else {
return false;
@@ -0,0 +1,24 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
/**
* @author Evgeny Gerashchenko
* @since 2/8/12
*/
public class JetIdeTemplateExpression extends JetExpression {
public JetIdeTemplateExpression(@NotNull ASTNode node) {
super(node);
}
@Override
public void accept(@NotNull JetVisitorVoid visitor) {
visitor.visitIdeTemplateExpression(this);
}
@Override
public <R, D> R accept(@NotNull JetVisitor<R, D> visitor, D data) {
return visitor.visitIdeTemplateExpression(this, data);
}
}
@@ -260,6 +260,10 @@ public class JetVisitor<R, D> extends PsiElementVisitor {
return visitExpression(expression, data);
}
public R visitIdeTemplateExpression(JetIdeTemplateExpression expression, D data) {
return null;
}
public R visitCatchSection(JetCatchClause catchClause, D data) {
return visitJetElement(catchClause, data);
}
@@ -258,6 +258,9 @@ public class JetVisitorVoid extends PsiElementVisitor {
visitExpression(expression);
}
public void visitIdeTemplateExpression(JetIdeTemplateExpression expression) {
}
public void visitCatchSection(JetCatchClause catchClause) {
visitJetElement(catchClause);
}