Name parsing extracted from parseFunction() and parseProperty()

This commit is contained in:
Andrey Breslav
2012-08-17 12:24:54 +04:00
parent 0796c98c81
commit d38d4e2e2b
@@ -812,7 +812,7 @@ public class JetParsing extends AbstractJetParsing {
return parseProperty(false);
}
IElementType parseProperty(boolean local) {
public IElementType parseProperty(boolean local) {
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) {
advance(); // VAL_KEYWORD or VAR_KEYWORD
}
@@ -842,6 +842,7 @@ public class JetParsing extends AbstractJetParsing {
}));
parseReceiverType("property", propertyNameFollow, lastDot);
parseFunctionOrPropertyName(lastDot != -1, "property", propertyNameFollow);
myBuilder.restoreJoiningComplexTokensState();
@@ -982,7 +983,12 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.disableJoiningComplexTokens();
int lastDot = findLastBefore(RECEIVER_TYPE_TERMINATORS, TokenSet.create(LPAR), true);
parseReceiverType("function", TokenSet.create(LT, LPAR, COLON, EQ), lastDot);
TokenSet functionNameFollow = TokenSet.create(LT, LPAR, COLON, EQ);
parseReceiverType("function", functionNameFollow, lastDot);
parseFunctionOrPropertyName(lastDot != -1, "function", functionNameFollow);
myBuilder.restoreJoiningComplexTokensState();
TokenSet valueParametersFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, RPAR);
@@ -1028,10 +1034,6 @@ 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);
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
}
}
else {
if (parseIdeTemplate()) {
@@ -1048,6 +1050,19 @@ public class JetParsing extends AbstractJetParsing {
}
}
}
}
/*
* IDENTIFIER
*/
private void parseFunctionOrPropertyName(boolean receiverFound, String title, TokenSet nameFollow) {
if (!receiverFound) {
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
}
}
else {
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name", nameFollow);
}