mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] fixes lambda expressions parsing (IDEA-163871)
This commit is contained in:
@@ -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 ||
|
||||
|
||||
@@ -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')
|
||||
+1
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user