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 bc0e2f36089c..6e1a05ce07ad 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
@@ -741,8 +741,8 @@ public class DeclarationParser {
PsiBuilder.Marker pair = builder.mark();
if (mayBeSimple) {
- final PsiBuilder.Marker value = parseAnnotationValue(builder);
- if (value != null && builder.getTokenType() != JavaTokenType.EQ) {
+ parseAnnotationValue(builder);
+ if (builder.getTokenType() != JavaTokenType.EQ) {
pair.done(JavaElementType.NAME_VALUE_PAIR);
return false;
}
@@ -762,9 +762,9 @@ public class DeclarationParser {
return hasName;
}
- @Nullable
+ @NotNull
private static PsiBuilder.Marker parseAnnotationValue(final PsiBuilder builder) {
- final PsiBuilder.Marker result;
+ PsiBuilder.Marker result;
final IElementType tokenType = builder.getTokenType();
if (tokenType == JavaTokenType.AT) {
@@ -778,8 +778,10 @@ public class DeclarationParser {
}
if (result == null) {
- error(builder, JavaErrorMessages.message("expected.value"));
+ result = builder.mark();
+ result.error(JavaErrorMessages.message("expected.value"));
}
+
return result;
}
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java
new file mode 100644
index 000000000000..200c37e7fa32
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.java
@@ -0,0 +1,2 @@
+@Ann(0) class D {
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt
new file mode 100644
index 000000000000..9f1efdb6d2e4
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Errors.txt
@@ -0,0 +1,73 @@
+PsiJavaFile:Errors.java
+ PsiImportList
+
+ PsiClass:D
+ PsiModifierList:@Ann(0)
+ PsiAnnotation
+ PsiJavaToken:AT('@')
+ PsiJavaCodeReferenceElement:Ann
+ PsiIdentifier:Ann('Ann')
+ PsiReferenceParameterList
+
+ PsiAnnotationParameterList
+ PsiJavaToken:LPARENTH('(')
+ PsiNameValuePair
+ PsiErrorElement:Value expected
+
+ PsiErrorElement:',' or ')' expected
+
+ PsiJavaToken:LT('<')
+ PsiNameValuePair
+ PsiIdentifier:error('error')
+ PsiErrorElement:'=' expected
+
+ PsiWhiteSpace(' ')
+ PsiReferenceExpression:descr
+ PsiReferenceParameterList
+
+ PsiIdentifier:descr('descr')
+ PsiErrorElement:',' or ')' expected
+
+ PsiJavaToken:EQ('=')
+ PsiNameValuePair
+ PsiErrorElement:Identifier expected
+
+ PsiErrorElement:'=' expected
+
+ PsiBinaryExpression:"Cannot find method 'value'">0<
+ PsiBinaryExpression:"Cannot find method 'value'">0
+ PsiLiteralExpression:"Cannot find method 'value'"
+ PsiJavaToken:STRING_LITERAL('"Cannot find method 'value'"')
+ PsiJavaToken:GT('>')
+ PsiLiteralExpression:0
+ PsiJavaToken:INTEGER_LITERAL('0')
+ PsiJavaToken:LT('<')
+ PsiErrorElement:Expression expected
+
+ PsiErrorElement:',' or ')' expected
+
+ PsiJavaToken:DIV('/')
+ PsiNameValuePair
+ PsiIdentifier:error('error')
+ PsiErrorElement:'=' expected
+
+ PsiErrorElement:Value expected
+
+ PsiErrorElement:',' or ')' expected
+
+ PsiJavaToken:GT('>')
+ PsiJavaToken:RPARENTH(')')
+ PsiWhiteSpace(' ')
+ PsiKeyword:class('class')
+ PsiWhiteSpace(' ')
+ PsiIdentifier:D('D')
+ PsiTypeParameterList
+
+ PsiReferenceList
+
+ PsiReferenceList
+
+ PsiWhiteSpace(' ')
+ PsiJavaToken:LBRACE('{')
+ PsiWhiteSpace('\n')
+ PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple.java b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.java
similarity index 100%
rename from java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple.java
rename to java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.java
diff --git a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple.txt b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt
similarity index 97%
rename from java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple.txt
rename to java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt
index 3bf8f2a6e61e..7213017754c0 100644
--- a/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple.txt
+++ b/java/java-tests/testData/psi/parser-full/annotationParsing/annotation/Simple1.txt
@@ -1,4 +1,4 @@
-PsiJavaFile:Simple.java
+PsiJavaFile:Simple1.java
PsiImportList
PsiClass:TimeTravel
diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/annotationParsing/AnnotationParsingTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/annotationParsing/AnnotationParsingTest.java
index dcaf2e0cf4dd..640107cf62cf 100644
--- a/java/java-tests/testSrc/com/intellij/lang/java/parser/annotationParsing/AnnotationParsingTest.java
+++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/annotationParsing/AnnotationParsingTest.java
@@ -14,7 +14,7 @@ public class AnnotationParsingTest extends JavaParsingTestCase {
}
public void testMarker() { doTest(true); }
- public void testSimple() { doTest(true); }
+ public void testSimple1() { doTest(true); }
public void testSimple2() { doTest(true); }
public void testComplex() { doTest(true); }
public void testMultiple() { doTest(true); }
@@ -40,4 +40,6 @@ public class AnnotationParsingTest extends JavaParsingTestCase {
}
});
}
+
+ public void testErrors() { doTest(true); }
}