Made parser aware of templates in function name position.

This commit is contained in:
Evgeny Gerashchenko
2012-02-01 16:15:49 +04:00
parent 89055ebf39
commit 7880ff4b61
2 changed files with 19 additions and 18 deletions
@@ -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();
@@ -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);