Added custom psi type for ide templates.
This commit is contained in:
@@ -146,4 +146,6 @@ public interface JetNodeTypes {
|
|||||||
JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
|
JetNodeType WHEN_CONDITION_EXPRESSION = new JetNodeType("WHEN_CONDITION_WITH_EXPRESSION", JetWhenConditionWithExpression.class);
|
||||||
|
|
||||||
JetNodeType NAMESPACE_HEADER = new JetNodeType("NAMESPACE_HEADER", JetNamespaceHeader.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.lang.PsiBuilder;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import com.intellij.psi.tree.TokenSet;
|
import com.intellij.psi.tree.TokenSet;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.JetNodeType;
|
import org.jetbrains.jet.JetNodeType;
|
||||||
import org.jetbrains.jet.lexer.JetKeywordToken;
|
import org.jetbrains.jet.lexer.JetKeywordToken;
|
||||||
|
|
||||||
@@ -1647,10 +1648,18 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
* "<#<" expression ">#>"
|
* "<#<" expression ">#>"
|
||||||
*/
|
*/
|
||||||
boolean parseIdeTemplate() {
|
boolean parseIdeTemplate() {
|
||||||
|
@Nullable JetNodeType nodeType = IDE_TEMPLATE_EXPRESSION;
|
||||||
if (at(IDE_TEMPLATE_START)) {
|
if (at(IDE_TEMPLATE_START)) {
|
||||||
|
PsiBuilder.Marker mark = null;
|
||||||
|
if (nodeType != null) {
|
||||||
|
mark = mark();
|
||||||
|
}
|
||||||
advance();
|
advance();
|
||||||
expect(IDENTIFIER, "Expecting identifier inside template");
|
expect(IDENTIFIER, "Expecting identifier inside template");
|
||||||
expect(IDE_TEMPLATE_END, "Expecting IDE template end after identifier");
|
expect(IDE_TEMPLATE_END, "Expecting IDE template end after identifier");
|
||||||
|
if (nodeType != null) {
|
||||||
|
mark.done(nodeType);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
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);
|
return visitExpression(expression, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public R visitIdeTemplateExpression(JetIdeTemplateExpression expression, D data) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public R visitCatchSection(JetCatchClause catchClause, D data) {
|
public R visitCatchSection(JetCatchClause catchClause, D data) {
|
||||||
return visitJetElement(catchClause, data);
|
return visitJetElement(catchClause, data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,6 +258,9 @@ public class JetVisitorVoid extends PsiElementVisitor {
|
|||||||
visitExpression(expression);
|
visitExpression(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitIdeTemplateExpression(JetIdeTemplateExpression expression) {
|
||||||
|
}
|
||||||
|
|
||||||
public void visitCatchSection(JetCatchClause catchClause) {
|
public void visitCatchSection(JetCatchClause catchClause) {
|
||||||
visitJetElement(catchClause);
|
visitJetElement(catchClause);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user