[java] fixes lambda expressions parsing (IDEA-163871)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 11 Nov 2016 17:22:09 +0000 (18:22 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 11 Nov 2016 17:22:32 +0000 (18:22 +0100)
java/java-psi-impl/src/com/intellij/lang/java/parser/ExpressionParser.java
java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression23.txt [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ExpressionParserTest.java

index 2ac9a064dbb10a5a08580fe3e9648717c50faa5a..5690638c55eafa5391f94e489db96189f103a077 100644 (file)
@@ -848,7 +848,7 @@ public class ExpressionParser {
         PsiBuilder.Marker marker = builder.mark();
         builder.advanceLexer();
         ReferenceParser.TypeInfo typeInfo = myParser.getReferenceParser().parseTypeInfo(
-          builder, ReferenceParser.EAT_LAST_DOT | ReferenceParser.WILDCARD);
+          builder, ReferenceParser.EAT_LAST_DOT | ReferenceParser.ELLIPSIS | ReferenceParser.WILDCARD);
         if (typeInfo != null) {
           IElementType t = builder.getTokenType();
           if (t == JavaTokenType.IDENTIFIER ||
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression23.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression23.txt
new file mode 100644 (file)
index 0000000..31e6e35
--- /dev/null
@@ -0,0 +1,29 @@
+PsiJavaFile:LambdaExpression23.java
+  PsiLambdaExpression
+    PsiParameterList:(T... t)
+      PsiJavaToken:LPARENTH('(')
+      PsiParameter:t
+        PsiModifierList:
+          <empty list>
+        PsiTypeElement:T...
+          PsiTypeElement:T
+            PsiJavaCodeReferenceElement:T
+              PsiIdentifier:T('T')
+              PsiReferenceParameterList
+                <empty list>
+          PsiJavaToken:ELLIPSIS('...')
+        PsiWhiteSpace(' ')
+        PsiIdentifier:t('t')
+      PsiJavaToken:RPARENTH(')')
+    PsiWhiteSpace(' ')
+    PsiJavaToken:ARROW('->')
+    PsiWhiteSpace(' ')
+    PsiReferenceExpression:t.length
+      PsiReferenceExpression:t
+        PsiReferenceParameterList
+          <empty list>
+        PsiIdentifier:t('t')
+      PsiJavaToken:DOT('.')
+      PsiReferenceParameterList
+        <empty list>
+      PsiIdentifier:length('length')
\ No newline at end of file
index 6e9317499198db41be2c86a93c20a7aadc64eab8..11b58be4e142bb572f0ffa8053c387c2c6895166 100644 (file)
@@ -151,6 +151,7 @@ public class ExpressionParserTest extends JavaParsingTestCase {
   public void testLambdaExpression20() { doParserTest("(@A T) -> (null)"); }
   public void testLambdaExpression21() { doParserTest("(T @A() [] x) -> { }"); }
   public void testLambdaExpression22() { doParserTest("(T x @A() []) -> { }"); }
+  public void testLambdaExpression23() { doParserTest("(T... t) -> t.length"); }
   public void testAmbiguousLambdaExpression() { doParserTest("f( (x) < y , z > (w) -> v )"); }
 
   private void doParserTest(String text) {