diff --git a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java index 528af900d4dc..89c81fba339e 100644 --- a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java @@ -611,6 +611,13 @@ public class RedundantCastUtil { LOG.assertTrue(initializer != null, operand.getText()); opType = initializer.getType(); + if (initializer instanceof PsiMethodCallExpression) { + JavaResolveResult newResult = ((PsiMethodCallExpression)initializer).resolveMethodGenerics(); + if (newResult instanceof MethodCandidateInfo && ((MethodCandidateInfo)newResult).getInferenceErrorMessage() != null) { + return; + } + } + if (opType != null) { if (operand instanceof PsiConditionalExpression) { if (!isApplicableForConditionalBranch(opType, ((PsiConditionalExpression)operand).getThenExpression())) return; diff --git a/java/java-tests/testData/inspection/redundantCast/lambda/InferenceIncompatibilityWithoutCast.java b/java/java-tests/testData/inspection/redundantCast/lambda/InferenceIncompatibilityWithoutCast.java new file mode 100644 index 000000000000..2976878c00f8 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/lambda/InferenceIncompatibilityWithoutCast.java @@ -0,0 +1,36 @@ + +import java.util.*; + +import java.util.function.Predicate; + +class MyTest { + private final Set set; + + public MyTest() { + set = (Set) newSet(); + } + + private static > Set newSet() { + return null; + } + + static Predicate eq(Predicate predicate) { + return predicate::test; + } + + static void test(Predicate predicate) { + class X { + void test2() { + Predicate not = (Predicate)eq(predicate); + } + } + } +} +class Repro { + public interface MembersInjector { } + static MembersInjector create(Class cls) { return null; } + public static void main(String[] args) { + Class[] parameterTypes = new Class[1]; + MembersInjector injector = (MembersInjector) create(parameterTypes[0]); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java index 15a5eb4aedc3..ff0591a4272e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/RedundantCast18Test.java @@ -47,4 +47,5 @@ public class RedundantCast18Test extends LightDaemonAnalyzerTestCase { public void testFieldInitializer() { doTest();} public void testDiamondWithUpperBounds() { doTest();} public void testBinaryConversions() { doTest();} + public void testInferenceIncompatibilityWithoutCast() { doTest();} } \ No newline at end of file