diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java index e711aa01b2b3..60466675af6d 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiTypesUtil.java @@ -224,6 +224,11 @@ public class PsiTypesUtil { return ((PsiArrayType)type).getComponentType(); } } + else if (gParent instanceof PsiArrayInitializerExpression) { + final PsiType expectedTypeByParent = getExpectedTypeByParent((PsiExpression)parent); + return expectedTypeByParent != null && expectedTypeByParent instanceof PsiArrayType + ? ((PsiArrayType)expectedTypeByParent).getComponentType() : null; + } } return null; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/ExpectedTypeByNestedArrayInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/ExpectedTypeByNestedArrayInitializer.java new file mode 100644 index 000000000000..a3842f212c4f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/redundantCast/ExpectedTypeByNestedArrayInitializer.java @@ -0,0 +1,15 @@ + +import java.util.function.IntFunction; + +class Test { + + public static void main(String[] args) { + Object[][] o = new Object[][] {{ + (IntFunction) integer -> Integer.toString(integer) + }}; + + Object[] o1 = new Object[] { + (IntFunction) integer -> Integer.toString(integer) + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java index 795091df050d..19feba36cefa 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaRedundantCastTest.java @@ -39,6 +39,7 @@ public class LambdaRedundantCastTest extends LightDaemonAnalyzerTestCase { public void testLambdaReturnExpressions() { doTest(); } public void testLambdaReturnExpressions1() { doTest(); } public void testPreventBadReturnTypeInReturnExpression() { doTest(); } + public void testExpectedTypeByNestedArrayInitializer() { doTest(); } private void doTest() { doTest(BASE_PATH + "/" + getTestName(false) + ".java", true, false);