From 28e16cc2145d406b8277dde7b2f0dd960b477ef0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 17 Mar 2011 11:51:28 +0300 Subject: [PATCH] Parenthesis are mandatory after a constructor call (due to problems with 'new Foo?isValid()') --- grammar/src/expressions.grm | 2 +- .../jetbrains/jet/lang/parsing/JetExpressionParsing.java | 6 ++---- idea/testData/psi/ControlStructures.jet | 2 +- idea/testData/psi/ControlStructures.txt | 3 +++ idea/testData/psi/SimpleExpressions.jet | 6 +++--- idea/testData/psi/SimpleExpressions.txt | 9 +++++++++ idea/testData/resolve/ResolveOfInfixExpressions.jet | 6 +++--- 7 files changed, 22 insertions(+), 12 deletions(-) diff --git a/grammar/src/expressions.grm b/grammar/src/expressions.grm index ab8da2e35f5..91c31de989c 100644 --- a/grammar/src/expressions.grm +++ b/grammar/src/expressions.grm @@ -221,7 +221,7 @@ expressions ; constructorInvocation - : userType valueArguments? + : userType valueArguments ; arrayAccess diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 35c153f350a..971b240b7ec 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -1361,7 +1361,7 @@ public class JetExpressionParsing extends AbstractJetParsing { * "new" constructorInvocation // identical to new nunctionCall * * constructorInvocation - * : userType valueArguments? + * : userType valueArguments */ private void parseNew() { assert _at(NEW_KEYWORD); @@ -1370,10 +1370,8 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // NEW_KEYWORD myJetParsing.parseTypeRef(); + parseValueArgumentList(); - if (!eol() && at(LPAR)) { - parseValueArgumentList(); - } creation.done(NEW); } diff --git a/idea/testData/psi/ControlStructures.jet b/idea/testData/psi/ControlStructures.jet index 82abdd79e20..a06f5eb934c 100644 --- a/idea/testData/psi/ControlStructures.jet +++ b/idea/testData/psi/ControlStructures.jet @@ -1,6 +1,6 @@ fun a( - a : foo = throw new Foo, + a : foo = throw new Foo(), a : foo = return 10, a : foo = break, a : foo = break @la, diff --git a/idea/testData/psi/ControlStructures.txt b/idea/testData/psi/ControlStructures.txt index e8d12357fea..d2c6a510a04 100644 --- a/idea/testData/psi/ControlStructures.txt +++ b/idea/testData/psi/ControlStructures.txt @@ -31,6 +31,9 @@ JetFile: ControlStructures.jet USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('Foo') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') VALUE_PARAMETER diff --git a/idea/testData/psi/SimpleExpressions.jet b/idea/testData/psi/SimpleExpressions.jet index 4b8bd7bc992..c162d289cae 100644 --- a/idea/testData/psi/SimpleExpressions.jet +++ b/idea/testData/psi/SimpleExpressions.jet @@ -21,10 +21,10 @@ fun a( a : foo = typeof(10), a : foo = new Foo(bar), a : foo = new Foo(bar), - a : foo = new Foo, - a : foo = new Foo, + a : foo = new Foo(), + a : foo = new Foo(), a : foo = object Foo{}, - a : foo = throw new Foo, + a : foo = throw new Foo(), a : foo = return 10, a : foo = break, a : foo = break @la, diff --git a/idea/testData/psi/SimpleExpressions.txt b/idea/testData/psi/SimpleExpressions.txt index 9bb32f16610..4486beaee0e 100644 --- a/idea/testData/psi/SimpleExpressions.txt +++ b/idea/testData/psi/SimpleExpressions.txt @@ -435,6 +435,9 @@ JetFile: SimpleExpressions.jet USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('Foo') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') VALUE_PARAMETER @@ -464,6 +467,9 @@ JetFile: SimpleExpressions.jet REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('bar') PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') VALUE_PARAMETER @@ -514,6 +520,9 @@ JetFile: SimpleExpressions.jet USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('Foo') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') VALUE_PARAMETER diff --git a/idea/testData/resolve/ResolveOfInfixExpressions.jet b/idea/testData/resolve/ResolveOfInfixExpressions.jet index 46cee0fd1d3..77d50f12b84 100644 --- a/idea/testData/resolve/ResolveOfInfixExpressions.jet +++ b/idea/testData/resolve/ResolveOfInfixExpressions.jet @@ -22,7 +22,7 @@ import util.* new X() `plus`+ "1" new X() `plus`plus "sadfas" new X().`plus`plus("") - val x = new X + val x = new X() x `minus`- "" x `times`* "" x `div`/ "" @@ -51,7 +51,7 @@ import util.* fun tt(t : T) : T { val x : List = 0 x`java::java.util.List.get()`[1] - val foo = new Bar + val foo = new Bar() foo`!`[null, 1] foo`get2`[1, 1] foo`get1`[1] @@ -62,7 +62,7 @@ fun tt(t : T) : T { x`!`[null] = null (x`!`[null, 2]) = null (`not`!foo)[1]`:std::Char` - val y = new Bar + val y = new Bar() y`inc`++ `inc`++y `dec`--y