From 3c14b1decde65d6959925d95d447eb0fc5627216 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 8 Feb 2012 21:12:12 +0400 Subject: [PATCH] Added custom psi type for ide templates. --- .../src/org/jetbrains/jet/JetNodeTypes.java | 2 ++ .../jet/lang/parsing/JetParsing.java | 9 +++++++ .../lang/psi/JetIdeTemplateExpression.java | 24 +++++++++++++++++++ .../jetbrains/jet/lang/psi/JetVisitor.java | 4 ++++ .../jet/lang/psi/JetVisitorVoid.java | 3 +++ 5 files changed, 42 insertions(+) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIdeTemplateExpression.java diff --git a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java index cc2f2d80824..86aef651fc3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java +++ b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java @@ -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); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 97f9459b3d0..fdd76c21431 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -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; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIdeTemplateExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIdeTemplateExpression.java new file mode 100644 index 00000000000..7b3d06e943f --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIdeTemplateExpression.java @@ -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 accept(@NotNull JetVisitor visitor, D data) { + return visitor.visitIdeTemplateExpression(this, data); + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java index f6e496a4344..bd0066d58c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -260,6 +260,10 @@ public class JetVisitor 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); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java index 915f216f8ec..b3782d51c8a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitorVoid.java @@ -258,6 +258,9 @@ public class JetVisitorVoid extends PsiElementVisitor { visitExpression(expression); } + public void visitIdeTemplateExpression(JetIdeTemplateExpression expression) { + } + public void visitCatchSection(JetCatchClause catchClause) { visitJetElement(catchClause); }