Better recovery for parameters without type
This commit is contained in:
@@ -980,8 +980,7 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(RPAR, COLON, LBRACE, EQ));
|
expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(RPAR, COLON, LBRACE, EQ));
|
||||||
|
|
||||||
if (at(COLON)) {
|
if (at(COLON)) {
|
||||||
advance();
|
advance(); // COLON
|
||||||
|
|
||||||
parseTypeRef();
|
parseTypeRef();
|
||||||
}
|
}
|
||||||
setterParameter.done(VALUE_PARAMETER);
|
setterParameter.done(VALUE_PARAMETER);
|
||||||
@@ -1730,20 +1729,23 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
private boolean parseFunctionParameterRest() {
|
private boolean parseFunctionParameterRest() {
|
||||||
expect(IDENTIFIER, "Parameter name expected", PARAMETER_NAME_RECOVERY_SET);
|
expect(IDENTIFIER, "Parameter name expected", PARAMETER_NAME_RECOVERY_SET);
|
||||||
|
|
||||||
|
boolean noErrors = true;
|
||||||
|
|
||||||
if (at(COLON)) {
|
if (at(COLON)) {
|
||||||
advance(); // COLON
|
advance(); // COLON
|
||||||
parseTypeRef();
|
parseTypeRef();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
error("Parameters must have type annotation");
|
errorWithRecovery("Parameters must have type annotation", PARAMETER_NAME_RECOVERY_SET);
|
||||||
return false;
|
noErrors = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (at(EQ)) {
|
if (at(EQ)) {
|
||||||
advance(); // EQ
|
advance(); // EQ
|
||||||
myExpressionParsing.parseExpression();
|
myExpressionParsing.parseExpression();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
return noErrors;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
class Test(val a = 12, val b : Int = 13)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
JetFile: ValueParameterNoTypeRecovery.jet
|
||||||
|
NAMESPACE_HEADER
|
||||||
|
<empty list>
|
||||||
|
CLASS
|
||||||
|
PsiElement(class)('class')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('Test')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
VALUE_PARAMETER
|
||||||
|
PsiElement(val)('val')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('a')
|
||||||
|
PsiErrorElement:Parameters must have type annotation
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(EQ)('=')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('12')
|
||||||
|
PsiElement(COMMA)(',')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
VALUE_PARAMETER
|
||||||
|
PsiElement(val)('val')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('b')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(COLON)(':')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Int')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(EQ)('=')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('13')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
Reference in New Issue
Block a user