From 0c39d517a5d959941f51e98350612963cc8ca405 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 8 Nov 2010 21:40:48 +0300 Subject: [PATCH] IDEA-56188 (trailing comma in annotation value array initializer) --- .../lang/java/parser/DeclarationParser.java | 4 +++- .../annotations/ExtraCommaInList.txt | 21 +++++++++++++++++++ .../parser/partial/AnnotationParserTest.java | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt 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 ff9d1da681b8..47b60ef7d599 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 @@ -817,7 +817,9 @@ public class DeclarationParser { break; } else if (expect(builder, JavaTokenType.COMMA)) { - parseAnnotationValue(builder); + if (builder.getTokenType() != JavaTokenType.RBRACE) { + parseAnnotationValue(builder); + } } else { error(builder, JavaErrorMessages.message("expected.rbrace")); diff --git a/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt b/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt new file mode 100644 index 000000000000..c58fc1971df5 --- /dev/null +++ b/java/java-tests/testData/psi/parser-partial/annotations/ExtraCommaInList.txt @@ -0,0 +1,21 @@ +PsiJavaFile:ExtraCommaInList.java + PsiAnnotation + PsiJavaToken:AT('@') + PsiJavaCodeReferenceElement:Anno + PsiIdentifier:Anno('Anno') + PsiReferenceParameterList + + PsiAnnotationParameterList + PsiJavaToken:LPARENTH('(') + PsiNameValuePair + PsiArrayInitializerMemberValue:{0, 1,} + PsiJavaToken:LBRACE('{') + PsiLiteralExpression:0 + PsiJavaToken:INTEGER_LITERAL('0') + PsiJavaToken:COMMA(',') + PsiWhiteSpace(' ') + PsiLiteralExpression:1 + PsiJavaToken:INTEGER_LITERAL('1') + PsiJavaToken:COMMA(',') + PsiJavaToken:RBRACE('}') + PsiJavaToken:RPARENTH(')') diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/AnnotationParserTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/AnnotationParserTest.java index 6cad51311ea7..e0a38e2a58dd 100644 --- a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/AnnotationParserTest.java +++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/AnnotationParserTest.java @@ -33,6 +33,7 @@ public class AnnotationParserTest extends JavaParsingTestCase { public void testArray() { doParserTest("@Endorsers({\"Children\", \"Unscrupulous dentists\"})"); } public void testNested() { doParserTest("@Author(@Name(first=\"Eugene\", second=\"Wampirchik\"))"); } public void testQualifiedAnnotation() { doParserTest("@org.jetbrains.annotations.Nullable"); } + public void testExtraCommaInList() { doParserTest("@Anno({0, 1,})"); } public void testParameterizedAnnotation () { doParserTest("@Nullable"); } public void testFirstNameMissed() { doParserTest("@Anno(value1, param2=value2)"); }