[java, parser] more specific error in argument list IDEA-256731

GitOrigin-RevId: 66c114bf41f27833279eca995c831af0d43628bb
This commit is contained in:
Roman Ivanov
2022-11-18 11:08:49 +01:00
committed by intellij-monorepo-bot
parent 0478550d2a
commit ed25641608
11 changed files with 41 additions and 9 deletions

View File

@@ -948,7 +948,15 @@ public class ExpressionParser {
}
}
final boolean closed = expectOrError(builder, JavaTokenType.RPARENTH, "expected.rparen");
boolean closed = true;
if (!expect(builder, JavaTokenType.RPARENTH)) {
if (first) {
error(builder, JavaPsiBundle.message("expected.rparen"));
} else {
error(builder, JavaPsiBundle.message("expected.comma.or.rparen"));
}
closed = false;
}
list.done(JavaElementType.EXPRESSION_LIST);
if (!closed) {

View File

@@ -7,7 +7,7 @@ class Test {
try {
return cells.collect(Collectors.toMap(c -> c, null));
} finally {
System.out.println(<error descr="')' expected"><error descr="Expression expected">;</error></error><error descr="Unexpected token">)</error>;
System.out.println(<error descr="',' or ')' expected"><error descr="Expression expected">;</error></error><error descr="Unexpected token">)</error>;
}
});
}

View File

@@ -32,7 +32,7 @@ PsiJavaFile:ExprList2.java
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:1
PsiJavaToken:INTEGER_LITERAL('1')
PsiErrorElement:')' expected
PsiErrorElement:',' or ')' expected
<empty list>
PsiWhiteSpace('\n ')
PsiErrorElement:';' expected

View File

@@ -37,7 +37,7 @@ PsiJavaFile:ExprList3.java
<empty list>
PsiExpression(empty)
<empty list>
PsiErrorElement:')' expected
PsiErrorElement:',' or ')' expected
<empty list>
PsiWhiteSpace('\n ')
PsiErrorElement:';' expected

View File

@@ -8,5 +8,5 @@ PsiJavaFile:ExprList2.java
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:1
PsiJavaToken:INTEGER_LITERAL('1')
PsiErrorElement:')' expected
PsiErrorElement:',' or ')' expected
<empty list>

View File

@@ -13,5 +13,5 @@ PsiJavaFile:ExprList3.java
<empty list>
PsiExpression(empty)
<empty list>
PsiErrorElement:')' expected
PsiErrorElement:',' or ')' expected
<empty list>

View File

@@ -0,0 +1,23 @@
PsiJavaFile:New19.java
PsiNewExpression:new A(f
PsiKeyword:new('new')
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:A
PsiIdentifier:A('A')
PsiReferenceParameterList
<empty list>
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiReferenceExpression:f
PsiReferenceParameterList
<empty list>
PsiIdentifier:f('f')
PsiErrorElement:',' or ')' expected
<empty list>
PsiErrorElement:Unparsed tokens
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiIdentifier:o('o')
PsiJavaToken:RPARENTH(')')

View File

@@ -72,6 +72,7 @@ public class ExpressionParserTest extends JavaParsingTestCase {
public void testNew16() { doParserTest("new C<>()"); }
public void testNew17() { doParserTest("new Map<String, >()"); }
public void testNew18() { doParserTest("new int @A [2] @B"); }
public void testNew19() { doParserTest("new A(f; o)"); }
public void testExprList0() { doParserTest("f(1,2)"); }
public void testExprList1() { doParserTest("f("); }

View File

@@ -31,7 +31,7 @@ public class SuspiciousIndentAfterControlStatement {
public int get(Class baseClass) {
// "interesting" parse tree.
if (baseClass.equals(<error descr="')' expected"><error descr="Expression expected">.</error></error><error descr="')' expected"><error descr="Identifier expected">c</error></error>lass<error descr="Identifier expected"><error descr="Unexpected token">)</error></error><error descr="Unexpected token">)</error> {
if (baseClass.equals(<error descr="',' or ')' expected"><error descr="Expression expected">.</error></error><error descr="')' expected"><error descr="Identifier expected">c</error></error>lass<error descr="Identifier expected"><error descr="Unexpected token">)</error></error><error descr="Unexpected token">)</error> {
return 1;
}
return 0;

View File

@@ -22,7 +22,7 @@ public class ConstantOnRHS
class C {
void t() {
<error descr="Cannot resolve method 'method' in 'C'">method</error>(String.format("", <error descr="Expression expected">StringBuffer</error>)<error descr="',' or ')' expected">"</error>" +<EOLError descr="Expression expected"></EOLError>
<<error descr="')' expected"><error descr="Expression expected">/</error></error><error descr="Cannot resolve symbol 'plugin'">plugin</error>><error descr="Illegal line end in string literal">" +</error>
<<error descr="',' or ')' expected"><error descr="Expression expected">/</error></error><error descr="Cannot resolve symbol 'plugin'">plugin</error>><error descr="Illegal line end in string literal">" +</error>
<error descr="Not a statement">""</error><error descr="Unexpected token">)</error>;
}
}

View File

@@ -18,5 +18,5 @@ public class CachedNumberConstructorCallInspectionTest extends LightJavaInspecti
public void testSimple() { doStatementTest("new /*Number constructor call with primitive argument*/Integer/**/(1);"); }
public void testStringArgument() { doStatementTest("new /*Number constructor call with primitive argument*/Byte/**/(\"1\");"); }
public void testNoWarn() { doStatementTest("Long.valueOf(1L);"); }
public void testNoAssertionError() { doStatementTest("Integer i = new Integer(new String/*!'(' or '[' expected*//*!')' expected*/{/*!*//*!*/}/*!';' expected*//*!Unexpected token*/)/*!*//*!*/;"); }
public void testNoAssertionError() { doStatementTest("Integer i = new Integer(new String/*!'(' or '[' expected*//*!',' or ')' expected*/{/*!*//*!*/}/*!';' expected*//*!Unexpected token*/)/*!*//*!*/;"); }
}