diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 5bcff8c6b2d..5597ab4b821 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -508,7 +508,7 @@ public class JetExpressionParsing extends AbstractJetParsing { parseParenthesizedExpression(); } else if (at(IDE_TEMPLATE_START)) { - parseIdeTemplate(); + myJetParsing.parseIdeTemplate(); } else if (at(HASH)) { parseTupleExpression(); @@ -1836,22 +1836,6 @@ public class JetExpressionParsing extends AbstractJetParsing { argument.done(VALUE_ARGUMENT); } - /* - * "<#<" expression ">#>" - */ - private void parseIdeTemplate() { - PsiBuilder.Marker placeholder = mark(); - - advance(); - if (at(IDE_TEMPLATE_END)) { - error("Expecting IDE template"); - } else { - parseExpression(); - } - expect(IDE_TEMPLATE_END, ""); - placeholder.done(PARENTHESIZED); - } - public void parseObjectLiteral() { PsiBuilder.Marker literal = mark(); PsiBuilder.Marker declaration = mark(); 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 7328c9f8f98..da31550a615 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -987,7 +987,10 @@ public class JetParsing extends AbstractJetParsing { private void parseReceiverType(String title, TokenSet nameFollow, int lastDot) { if (lastDot == -1) { // There's no explicit receiver type specified parseAnnotations(false); - expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow); + + if (!parseIdeTemplate()) { + expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow); + } } else { createTruncatedBuilder(lastDot).parseTypeRef(); @@ -1618,6 +1621,20 @@ public class JetParsing extends AbstractJetParsing { return true; } + /* + * "<#<" expression ">#>" + */ + boolean parseIdeTemplate() { + if (at(IDE_TEMPLATE_START)) { + advance(); + expect(IDENTIFIER, "Expecting identifier inside template"); + expect(IDE_TEMPLATE_END, "Expecting IDE template end after identifier"); + return true; + } else { + return false; + } + } + @Override protected JetParsing create(SemanticWhitespaceAwarePsiBuilder builder) { return createForTopLevel(builder);