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); return parseProperty(false);
} }
IElementType parseProperty(boolean local) { public IElementType parseProperty(boolean local) {
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) { if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) {
advance(); // VAL_KEYWORD or VAR_KEYWORD advance(); // VAL_KEYWORD or VAR_KEYWORD
} }
@@ -842,6 +842,7 @@ public class JetParsing extends AbstractJetParsing {
})); }));
parseReceiverType("property", propertyNameFollow, lastDot); parseReceiverType("property", propertyNameFollow, lastDot);
parseFunctionOrPropertyName(lastDot != -1, "property", propertyNameFollow);
myBuilder.restoreJoiningComplexTokensState(); myBuilder.restoreJoiningComplexTokensState();
@@ -982,7 +983,12 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.disableJoiningComplexTokens(); myBuilder.disableJoiningComplexTokens();
int lastDot = findLastBefore(RECEIVER_TYPE_TERMINATORS, TokenSet.create(LPAR), true); 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(); myBuilder.restoreJoiningComplexTokensState();
TokenSet valueParametersFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, RPAR); 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) { private void parseReceiverType(String title, TokenSet nameFollow, int lastDot) {
if (lastDot == -1) { // There's no explicit receiver type specified if (lastDot == -1) { // There's no explicit receiver type specified
parseAnnotations(false); parseAnnotations(false);
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
}
} }
else { else {
if (parseIdeTemplate()) { 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()) { if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name", nameFollow); expect(IDENTIFIER, "Expecting " + title + " name", nameFollow);
} }