diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java index 1fb4917113f5..7a41a6d1470d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java @@ -961,6 +961,8 @@ public class PsiResolveHelperImpl implements PsiResolveHelper { if (expectedType == null) { return getFailedInferenceConstraint(typeParameter); } + } else if (parent instanceof PsiTypeCastExpression) { + expectedType = ((PsiTypeCastExpression)parent).getType(); } final PsiManager manager = typeParameter.getManager(); diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml new file mode 100644 index 000000000000..daab2afbcceb --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml @@ -0,0 +1,13 @@ + + + + Test.java + 5 + Casting <code>getComponent("bar")</code> to <code>Bar</code> is redundant + + + Test.java + 6 + Casting <code>getComponent("bar")</code> to <code>Bar</code> is redundant + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java new file mode 100644 index 000000000000..8552725dbec8 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java @@ -0,0 +1,18 @@ +class Test { + + { + f((Bar) getComponent("bar")); + f1((Bar) getComponent("bar")); + Bar b = (Bar) getComponent("bar"); + } + + private void f(J j) {} + + private void f1(J j) {} + + private T getComponent(String name) { + return null; + } + + static class Bar {} +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java index fdbe5494bbde..db20eca0956a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java @@ -43,6 +43,7 @@ public class RedundantCast15Test extends InspectionTestCase { public void testIDEA22899() throws Exception { doTest();} public void testRawCast1() throws Exception { doTest();} + public void testInferenceFromCast() throws Exception { doTest();} public void testTypeParameterAccessChecksJava7() throws Exception { ((JavaVersionServiceImpl)JavaVersionService.getInstance()).setTestVersion(JavaSdkVersion.JDK_1_7, getTestRootDisposable());