From 57fe714c3861891e04dcd18c6258f91bfddd8331 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 17 Jul 2017 14:17:36 +0200 Subject: [PATCH] [java] fixes NPE in type parser (EA-104664) --- .../com/intellij/lang/java/parser/ReferenceParser.java | 1 + .../psi/parser-partial/expressions/CorruptAnnoInCast.txt | 8 ++++++++ .../java/parser/partial/ExpressionParserTest.java | 1 + 3 files changed, 10 insertions(+) create mode 100644 java/java-tests/testData/psi/parser-partial/expressions/CorruptAnnoInCast.txt diff --git a/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java b/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java index d20ece2d3857..1471eaaff3c8 100644 --- a/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java +++ b/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java @@ -133,6 +133,7 @@ public class ReferenceParser { type.drop(); if (anno != null && isSet(flags, INCOMPLETE_ANNO)) { error(builder, JavaErrorMessages.message("expected.type")); + typeInfo.marker = anno; typeInfo.hasErrors = true; return typeInfo; } diff --git a/java/java-tests/testData/psi/parser-partial/expressions/CorruptAnnoInCast.txt b/java/java-tests/testData/psi/parser-partial/expressions/CorruptAnnoInCast.txt new file mode 100644 index 000000000000..643e7eb8459b --- /dev/null +++ b/java/java-tests/testData/psi/parser-partial/expressions/CorruptAnnoInCast.txt @@ -0,0 +1,8 @@ +PsiJavaFile:CorruptAnnoInCast.java + PsiParenthesizedExpression:( + PsiJavaToken:LPARENTH('(') + PsiErrorElement:Expression expected + + PsiErrorElement:Unparsed tokens + PsiJavaToken:AT('@') + PsiJavaToken:AND('&') \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java index 8573b5aa5e82..c58997590aec 100644 --- a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java +++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java @@ -105,6 +105,7 @@ public class ExpressionParserTest extends JavaParsingTestCase { public void testIncompleteCast() { doParserTest("f((ArrayList) )"); } public void testShiftRight() { doParserTest("x >>= 2"); } + public void testCorruptAnnoInCast() { doParserTest("(@&"); } public void testIllegalWildcard() { doParserTest("this.foo()"); } public void testIllegalBound() { doParserTest("C.foo()"); }