diff --git a/java/java-impl/src/com/intellij/lang/java/parser/DeclarationParser.java b/java/java-impl/src/com/intellij/lang/java/parser/DeclarationParser.java index 7cb23e6b852f..4fe2ca0b28ba 100644 --- a/java/java-impl/src/com/intellij/lang/java/parser/DeclarationParser.java +++ b/java/java-impl/src/com/intellij/lang/java/parser/DeclarationParser.java @@ -454,7 +454,14 @@ public class DeclarationParser { if (noLastParam) { error(builder, JavaErrorMessages.message("expected.identifier.or.type")); } - if (!expect(builder, JavaTokenType.RPARENTH)) { + if (builder.getTokenType() == JavaTokenType.RPARENTH) { + if (invalidElements != null) { + invalidElements.error(commaExpected ? JavaErrorMessages.message("expected.comma") : JavaErrorMessages.message("expected.parameter")); + } + invalidElements = null; + builder.advanceLexer(); + } + else { if (!noLastParam) { error(builder, JavaErrorMessages.message("expected.rparen")); } diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.java similarity index 100% rename from java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors.java rename to java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.java diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt similarity index 98% rename from java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors.txt rename to java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt index ae8e6697103d..e778448e7665 100644 --- a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors.txt +++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors0.txt @@ -1,4 +1,4 @@ -PsiJavaFile:Errors.java +PsiJavaFile:Errors0.java PsiImportList PsiComment(END_OF_LINE_COMMENT)('// illegal modifier combinations') diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java new file mode 100644 index 000000000000..05d4ce62e9bf --- /dev/null +++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.java @@ -0,0 +1,5 @@ +public class Testt { + @Configuration(afterTestClass=true) + public void after1() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt new file mode 100644 index 000000000000..fdd9015c8d0f --- /dev/null +++ b/java/java-tests/testData/psi/parser-full/declarationParsing/method/Errors2.txt @@ -0,0 +1,77 @@ +PsiJavaFile:Errors2.java + PsiImportList + + PsiClass:Testt + PsiModifierList:public + PsiKeyword:public('public') + PsiWhiteSpace(' ') + PsiKeyword:class('class') + PsiWhiteSpace(' ') + PsiIdentifier:Testt('Testt') + PsiTypeParameterList + + PsiReferenceList + + PsiReferenceList + + PsiWhiteSpace(' ') + PsiJavaToken:LBRACE('{') + PsiWhiteSpace('\n ') + PsiMethod:Configuration + PsiModifierList:@ + PsiAnnotation + PsiJavaToken:AT('@') + PsiErrorElement:Class reference expected + + PsiAnnotationParameterList + + PsiTypeParameterList + PsiJavaToken:LT('<') + PsiTypeParameter:caret + PsiIdentifier:caret('caret') + PsiElement(EXTENDS_BOUND_LIST) + + PsiJavaToken:GT('>') + PsiIdentifier:Configuration('Configuration') + PsiParameterList:(afterTestClass=true) + PsiJavaToken:LPARENTH('(') + PsiModifierList: + + PsiTypeElement:afterTestClass + PsiJavaCodeReferenceElement:afterTestClass + PsiIdentifier:afterTestClass('afterTestClass') + PsiReferenceParameterList + + PsiErrorElement:Identifier expected + + PsiErrorElement:',' expected + PsiJavaToken:EQ('=') + PsiJavaToken:TRUE_KEYWORD('true') + PsiJavaToken:RPARENTH(')') + PsiReferenceList + + PsiErrorElement:'{' or ';' expected + + PsiWhiteSpace('\n ') + PsiMethod:after1 + PsiModifierList:public + PsiKeyword:public('public') + PsiTypeParameterList + + PsiWhiteSpace(' ') + PsiTypeElement:void + PsiKeyword:void('void') + PsiWhiteSpace(' ') + PsiIdentifier:after1('after1') + PsiParameterList:() + PsiJavaToken:LPARENTH('(') + PsiJavaToken:RPARENTH(')') + PsiReferenceList + + PsiWhiteSpace(' ') + PsiCodeBlock + PsiJavaToken:LBRACE('{') + PsiWhiteSpace('\n ') + PsiJavaToken:RBRACE('}') + PsiWhiteSpace('\n') + PsiJavaToken:RBRACE('}') \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/MethodParsingTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/MethodParsingTest.java index dd9bf41ce672..6932fdcd2e56 100644 --- a/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/MethodParsingTest.java +++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/MethodParsingTest.java @@ -20,8 +20,9 @@ public class MethodParsingTest extends JavaParsingTestCase { public void testUnclosed6() { doTest(true); } public void testGenericMethod() { doTest(true); } public void testGenericMethodErrors() { doTest(true); } - public void testErrors() { doTest(true); } + public void testErrors0() { doTest(true); } public void testErrors1() { doTest(true); } + public void testErrors2() { doTest(true); } public void testCompletionHack() { doTest(true); } public void testCompletionHack1() { doTest(true); }