From 6db335d5ad3ae61059339a7268ee81685565006a Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 18 Dec 2012 16:51:04 +0100 Subject: [PATCH] allow to infer expected type from cast expr (IDEA-97727) --- .../source/resolve/PsiResolveHelperImpl.java | 2 ++ .../generics/InferenceFromCast/expected.xml | 13 +++++++++++++ .../generics/InferenceFromCast/src/Test.java | 18 ++++++++++++++++++ .../codeInspection/RedundantCast15Test.java | 1 + 4 files changed, 34 insertions(+) create mode 100644 java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/expected.xml create mode 100644 java/java-tests/testData/inspection/redundantCast/generics/InferenceFromCast/src/Test.java 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());