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());