Made parser aware of templates in parameters, return type positions for all functions; of name, receiver positions for extension functions.
This commit is contained in:
@@ -965,7 +965,9 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
if (at(COLON)) {
|
if (at(COLON)) {
|
||||||
advance(); // COLON
|
advance(); // COLON
|
||||||
|
|
||||||
parseTypeRef();
|
if (!parseIdeTemplate()) {
|
||||||
|
parseTypeRef();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
parseTypeConstraintsGuarded(typeParameterListOccurred);
|
parseTypeConstraintsGuarded(typeParameterListOccurred);
|
||||||
@@ -992,16 +994,23 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
|
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
createTruncatedBuilder(lastDot).parseTypeRef();
|
if (parseIdeTemplate()) {
|
||||||
|
expect(DOT, "Expecting '.' after receiver template");
|
||||||
if (atSet(RECEIVER_TYPE_TERMINATORS)) {
|
|
||||||
advance(); // expectation
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
errorWithRecovery("Expecting '.' before a " + title + " name", nameFollow);
|
createTruncatedBuilder(lastDot).parseTypeRef();
|
||||||
|
|
||||||
|
if (atSet(RECEIVER_TYPE_TERMINATORS)) {
|
||||||
|
advance(); // expectation
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorWithRecovery("Expecting '.' before a " + title + " name", nameFollow);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(IDENTIFIER, "Expecting " + title + " name", nameFollow);
|
if (!parseIdeTemplate()) {
|
||||||
|
expect(IDENTIFIER, "Expecting " + title + " name", nameFollow);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1537,29 +1546,32 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
myBuilder.disableNewlines();
|
myBuilder.disableNewlines();
|
||||||
expect(LPAR, "Expecting '(", recoverySet);
|
expect(LPAR, "Expecting '(", recoverySet);
|
||||||
|
|
||||||
if (!at(RPAR) && !atSet(recoverySet)) {
|
if (!parseIdeTemplate()) {
|
||||||
while (true) {
|
if (!at(RPAR) && !atSet(recoverySet)) {
|
||||||
if (at(COMMA)) {
|
while (true) {
|
||||||
errorAndAdvance("Expecting a parameter declaration");
|
if (at(COMMA)) {
|
||||||
}
|
errorAndAdvance("Expecting a parameter declaration");
|
||||||
else if (at(RPAR)) {
|
|
||||||
error("Expecting a parameter declaration");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (isFunctionTypeContents) {
|
|
||||||
if (!tryParseValueParameter()) {
|
|
||||||
PsiBuilder.Marker valueParameter = mark();
|
|
||||||
parseModifierList(MODIFIER_LIST, false); // lazy, out, ref
|
|
||||||
parseTypeRef();
|
|
||||||
valueParameter.done(VALUE_PARAMETER);
|
|
||||||
}
|
}
|
||||||
} else {
|
else if (at(RPAR)) {
|
||||||
parseValueParameter();
|
error("Expecting a parameter declaration");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (isFunctionTypeContents) {
|
||||||
|
if (!tryParseValueParameter()) {
|
||||||
|
PsiBuilder.Marker valueParameter = mark();
|
||||||
|
parseModifierList(MODIFIER_LIST, false); // lazy, out, ref
|
||||||
|
parseTypeRef();
|
||||||
|
valueParameter.done(VALUE_PARAMETER);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
parseValueParameter();
|
||||||
|
}
|
||||||
|
if (!at(COMMA)) break;
|
||||||
|
advance(); // COMMA
|
||||||
}
|
}
|
||||||
if (!at(COMMA)) break;
|
|
||||||
advance(); // COMMA
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(RPAR, "Expecting ')'", recoverySet);
|
expect(RPAR, "Expecting ')'", recoverySet);
|
||||||
myBuilder.restoreNewlinesState();
|
myBuilder.restoreNewlinesState();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user