KT-3025 Bad handling of missing expression in catch()

#KT-3025 Fixed
This commit is contained in:
Andrey Breslav
2012-11-07 16:00:28 +04:00
parent 4ca7d086c2
commit d8ef7210dc
4 changed files with 458 additions and 3 deletions
@@ -1425,9 +1425,29 @@ public class JetExpressionParsing extends AbstractJetParsing {
PsiBuilder.Marker catchBlock = mark();
advance(); // CATCH_KEYWORD
myJetParsing.parseValueParameterList(false, TokenSet.create(LBRACE, FINALLY_KEYWORD, CATCH_KEYWORD));
TokenSet recoverySet = TokenSet.create(LBRACE, FINALLY_KEYWORD, CATCH_KEYWORD);
if (atSet(recoverySet)) {
error("Expecting exception variable declaration");
}
else {
PsiBuilder.Marker parameters = mark();
expect(LPAR, "Expecting '('", recoverySet);
if (!atSet(recoverySet)) {
myJetParsing.parseValueParameter();
expect(RPAR, "Expecting ')'", recoverySet);
}
else {
error("Expecting exception variable declaration");
}
parameters.done(VALUE_PARAMETER_LIST);
}
myJetParsing.parseBlock();
if (at(LBRACE)) {
myJetParsing.parseBlock();
}
else {
error("Expecting a block: { ... }");
}
catchBlock.done(CATCH);
}
@@ -1702,7 +1702,7 @@ public class JetParsing extends AbstractJetParsing {
return parseValueParameter(true);
}
private void parseValueParameter() {
public void parseValueParameter() {
parseValueParameter(false);
}