From fd9f90239d7e291340a214063bde8dba43dc5324 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 12 Nov 2014 19:25:25 +0100 Subject: [PATCH] new inference: treat array initializer expr as "poly" context --- .../graphInference/PsiPolyExpressionUtil.java | 5 ++++- .../daemon/lambda/PsiPolyExpressionUtilTest.java | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java index 8ea42cb61ea2..cc7a64dc7d96 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/PsiPolyExpressionUtil.java @@ -127,7 +127,10 @@ public class PsiPolyExpressionUtil { private static boolean isInAssignmentOrInvocationContext(PsiExpression expr) { final PsiElement context = PsiUtil.skipParenthesizedExprUp(expr.getParent()); - return context instanceof PsiExpressionList || context instanceof PsiConditionalExpression || isAssignmentContext(expr, context); + return context instanceof PsiExpressionList || + context instanceof PsiArrayInitializerExpression || + context instanceof PsiConditionalExpression || + isAssignmentContext(expr, context); } private static boolean isAssignmentContext(PsiExpression expr, PsiElement context) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/PsiPolyExpressionUtilTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/PsiPolyExpressionUtilTest.java index 71259d632ce2..8012ee51a960 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/PsiPolyExpressionUtilTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/PsiPolyExpressionUtilTest.java @@ -69,6 +69,21 @@ public class PsiPolyExpressionUtilTest extends LightCodeInsightFixtureTestCase { assertFalse(PsiPolyExpressionUtil.isPolyExpression(psiExpression)); } + public void testMethodCallInsideArrayCreation() throws Exception { + myFixture.configureByText("Foo.java", "import java.util.*;" + + "class Foo {" + + " T bar() {return null;}" + + " void foo() {" + + " String[] a = new String[] {bar()};" + + " }" + + "}"); + final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); + assertNotNull(elementAtCaret); + final PsiExpression psiExpression = PsiTreeUtil.getParentOfType(elementAtCaret, PsiMethodCallExpression.class); + assertInstanceOf(psiExpression, PsiMethodCallExpression.class); + assertTrue(PsiPolyExpressionUtil.isPolyExpression(psiExpression)); + } + public void testConditional() throws Exception { myFixture.configureByText("Foo.java", "import java.util.function.Supplier;" + "class Foo {" +