diff --git a/java/java-impl/src/com/intellij/lang/java/parser/ReferenceParser.java b/java/java-impl/src/com/intellij/lang/java/parser/ReferenceParser.java index 5208b8b8f6d4..8a5163f1cfa2 100644 --- a/java/java-impl/src/com/intellij/lang/java/parser/ReferenceParser.java +++ b/java/java-impl/src/com/intellij/lang/java/parser/ReferenceParser.java @@ -104,13 +104,17 @@ public class ReferenceParser { DeclarationParser.parseAnnotations(builder); } + final PsiBuilder.Marker bracket = builder.mark(); if (!expect(builder, JavaTokenType.LBRACKET)) { + bracket.drop(); break; } + if (!expect(builder, JavaTokenType.RBRACKET)) { + bracket.rollbackTo(); + break; + } + bracket.drop(); typeInfo.isArray = true; - if (!expectOrError(builder, JavaTokenType.RBRACKET, JavaErrorMessages.message("expected.rbracket"))) { - break; - } type = type.precede(); } diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java new file mode 100644 index 000000000000..533b0deb250a --- /dev/null +++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.java @@ -0,0 +1,3 @@ +class Test { + int[0]; +} \ No newline at end of file diff --git a/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt new file mode 100644 index 000000000000..4424416f614b --- /dev/null +++ b/java/java-tests/testData/psi/parser-full/declarationParsing/field/Errors.txt @@ -0,0 +1,31 @@ +PsiJavaFile:Errors.java + PsiImportList + + PsiClass:Test + PsiModifierList: + + PsiKeyword:class('class') + PsiWhiteSpace(' ') + PsiIdentifier:Test('Test') + PsiTypeParameterList + + PsiReferenceList + + PsiReferenceList + + PsiWhiteSpace(' ') + PsiJavaToken:LBRACE('{') + PsiWhiteSpace('\n ') + PsiModifierList: + + PsiTypeElement:int + PsiKeyword:int('int') + PsiErrorElement:Identifier expected + + PsiErrorElement:Unexpected token + PsiJavaToken:LBRACKET('[') + PsiJavaToken:INTEGER_LITERAL('0') + PsiJavaToken:RBRACKET(']') + PsiJavaToken:SEMICOLON(';') + PsiWhiteSpace('\n') + PsiJavaToken:RBRACE('}') \ No newline at end of file diff --git a/java/java-tests/testData/psi/parser-partial/references/Type3.txt b/java/java-tests/testData/psi/parser-partial/references/Type3.txt index 8f4c284f0e5f..2a9705d9b602 100644 --- a/java/java-tests/testData/psi/parser-partial/references/Type3.txt +++ b/java/java-tests/testData/psi/parser-partial/references/Type3.txt @@ -4,6 +4,5 @@ PsiJavaFile:Type3.java PsiKeyword:int('int') PsiJavaToken:LBRACKET('[') PsiJavaToken:RBRACKET(']') - PsiJavaToken:LBRACKET('[') - PsiErrorElement:']' expected - + PsiErrorElement:Unparsed tokens + PsiJavaToken:LBRACKET('[') \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/FieldParsingTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/FieldParsingTest.java index 15f8dfb1ed4d..f60cc67f98a7 100644 --- a/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/FieldParsingTest.java +++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/declarationParsing/FieldParsingTest.java @@ -22,4 +22,6 @@ public class FieldParsingTest extends JavaParsingTestCase { public void testMultiLineUnclosed1() { doTest(true); } public void testComplexInitializer() { doTest(true); } + + public void testErrors() { doTest(true); } } \ No newline at end of file