new inference: treat array initializer expr as "poly" context

This commit is contained in:
Anna Kozlova
2014-11-12 19:38:01 +01:00
parent d98a3da35a
commit fd9f90239d
2 changed files with 19 additions and 1 deletions
@@ -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) {
@@ -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> T bar() {return null;}" +
" void foo() {" +
" String[] a = new String[] {ba<caret>r()};" +
" }" +
"}");
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 {" +