diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 6ad6630245c..7dcf6c310b8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -980,8 +980,7 @@ public class JetParsing extends AbstractJetParsing { expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(RPAR, COLON, LBRACE, EQ)); if (at(COLON)) { - advance(); - + advance(); // COLON parseTypeRef(); } setterParameter.done(VALUE_PARAMETER); @@ -1730,20 +1729,23 @@ public class JetParsing extends AbstractJetParsing { private boolean parseFunctionParameterRest() { expect(IDENTIFIER, "Parameter name expected", PARAMETER_NAME_RECOVERY_SET); + boolean noErrors = true; + if (at(COLON)) { advance(); // COLON parseTypeRef(); } else { - error("Parameters must have type annotation"); - return false; + errorWithRecovery("Parameters must have type annotation", PARAMETER_NAME_RECOVERY_SET); + noErrors = false; } if (at(EQ)) { advance(); // EQ myExpressionParsing.parseExpression(); } - return true; + + return noErrors; } /* diff --git a/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.jet b/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.jet new file mode 100644 index 00000000000..bfe2ad9318e --- /dev/null +++ b/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.jet @@ -0,0 +1 @@ +class Test(val a = 12, val b : Int = 13) \ No newline at end of file diff --git a/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.txt b/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.txt new file mode 100644 index 00000000000..ebd52b9b83f --- /dev/null +++ b/compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.txt @@ -0,0 +1,41 @@ +JetFile: ValueParameterNoTypeRecovery.jet + NAMESPACE_HEADER + + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('Test') + TYPE_PARAMETER_LIST + + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + VALUE_PARAMETER + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('a') + PsiErrorElement:Parameters must have type annotation + + 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)(')') \ No newline at end of file