From d6ec09cf71b1db5893da212ec9a3d6c3733aedc1 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 10 Aug 2010 17:27:43 +0400 Subject: [PATCH] New Java parser (incomplete parenthesized expression parsing fixed) --- .../com/intellij/lang/java/parser/ExpressionParser.java | 7 ++++++- .../testData/psi/parser-partial/expressions/Parenth2.txt | 5 +++++ .../lang/java/parser/partial/ExpressionParserTest.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt diff --git a/java/java-impl/src/com/intellij/lang/java/parser/ExpressionParser.java b/java/java-impl/src/com/intellij/lang/java/parser/ExpressionParser.java index c74f80356438..c07e78dc3be0 100644 --- a/java/java-impl/src/com/intellij/lang/java/parser/ExpressionParser.java +++ b/java/java-impl/src/com/intellij/lang/java/parser/ExpressionParser.java @@ -27,6 +27,7 @@ import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static com.intellij.lang.PsiBuilderUtil.expect; import static com.intellij.lang.java.parser.JavaParserUtil.*; @@ -502,7 +503,11 @@ public class ExpressionParser { error(builder, JavaErrorMessages.message("expected.expression")); } - JavaParserUtil.expectOrError(builder, JavaTokenType.RPARENTH, JavaErrorMessages.message("expected.rparen")); + if (!expect(builder, JavaTokenType.RPARENTH)) { + if (inner != null) { + error(builder, JavaErrorMessages.message("expected.rparen")); + } + } parenth.done(JavaElementType.PARENTH_EXPRESSION); return parenth; diff --git a/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt b/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt new file mode 100644 index 000000000000..9a1a35b4dd54 --- /dev/null +++ b/java/java-tests/testData/psi/parser-partial/expressions/Parenth2.txt @@ -0,0 +1,5 @@ +PsiJavaFile:Parenth2.java + PsiParenthesizedExpression:( + PsiJavaToken:LPARENTH('(') + PsiErrorElement:Expression expected + \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ExpressionParserTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ExpressionParserTest.java index fe8edea5dc46..70bedeb20fed 100644 --- a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ExpressionParserTest.java +++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ExpressionParserTest.java @@ -49,6 +49,7 @@ public class ExpressionParserTest extends JavaParsingTestCase { public void testParenth0() { doParserTest("(c)"); } public void testParenth1() { doParserTest("(this).f--"); } + public void testParenth2() { doParserTest("("); } public void testNewInExprList() { doParserTest("call(new)"); }