From 5c737f48bd23e4d84eaf1d8f6fed5b19270cfdc6 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 5 Aug 2013 13:59:02 +0200 Subject: [PATCH] redundant cast: always report casts in instanceOf checks for class types; exclude primitive types --- .../src/com/intellij/psi/util/RedundantCastUtil.java | 6 ++++-- .../generics/InstanceOfChecks/expected.xml | 8 ++++++++ .../generics/InstanceOfChecks/src/Test.java | 10 ++++++++++ .../intellij/codeInspection/RedundantCast15Test.java | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/expected.xml create mode 100644 java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/src/Test.java diff --git a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java index b8f693879bcc..4ab8bac48951 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/RedundantCastUtil.java @@ -21,7 +21,6 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy; import com.intellij.psi.tree.IElementType; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; @@ -494,7 +493,10 @@ public class RedundantCastUtil { } } else { - if (TypeConversionUtil.isAssignable(castTo, opType, false)) { + if (parent instanceof PsiInstanceOfExpression && opType instanceof PsiPrimitiveType) { + return; + } + if (parent instanceof PsiInstanceOfExpression || TypeConversionUtil.isAssignable(castTo, opType, false)) { addToResults(typeCast); } } diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/expected.xml b/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/expected.xml new file mode 100644 index 000000000000..bb05b01e2b27 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/expected.xml @@ -0,0 +1,8 @@ + + + + Test.java + 8 + Casting <code>o</code> to <code>List</code> is redundant + + diff --git a/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/src/Test.java b/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/src/Test.java new file mode 100644 index 000000000000..06750c302b89 --- /dev/null +++ b/java/java-tests/testData/inspection/redundantCast/generics/InstanceOfChecks/src/Test.java @@ -0,0 +1,10 @@ +import java.util.ArrayList; +import java.util.List; + +public class RedundantCast { + boolean redundantCasts(Object o) { + int p = 0; + if ((Number)p instanceof Integer) {} + return (List)o instanceof ArrayList; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java index 51f6caa51eee..936a0ed777d2 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/RedundantCast15Test.java @@ -47,6 +47,7 @@ public class RedundantCast15Test extends InspectionTestCase { public void testRawCast1() throws Exception { doTest();} public void testInferenceFromCast() throws Exception { doTest();} public void testGetClassProcessing() throws Exception { doTest();} + public void testInstanceOfChecks() throws Exception { doTest();} public void testTypeParameterAccessChecksJava7() throws Exception { IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_7, getModule(), getTestRootDisposable());