From 7bc2b6c529d85892889be0a3e477bd0a69d9cc9f Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 22 Apr 2019 13:57:50 +0700 Subject: [PATCH] Restore cast in possibly important context; fix ReplaceInefficientStreamCount tests GitOrigin-RevId: 84ef59c2941462b3060c31cfea85f90ee6d39af8 --- .../src/com/intellij/psi/util/RedundantCastUtil.java | 8 +++++++- .../inefficientStreamCount/afterStreamCount.java | 2 +- .../inefficientStreamCount/afterStreamCountField.java | 2 +- .../inefficientStreamCount/afterStreamCountParameter.java | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) 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 c5d87d650e5f..7c4659b86e99 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 @@ -766,7 +766,13 @@ public class RedundantCastUtil { PsiType castType = typeElement.getType(); if (castType instanceof PsiPrimitiveType) { if (opType instanceof PsiPrimitiveType) { - return !TypeConversionUtil.isSafeConversion(castType, opType); // let's suppose that casts losing precision are important + PsiElement parent = PsiUtil.skipParenthesizedExprUp(typeCast.getParent()); + if (parent instanceof PsiReturnStatement || parent instanceof PsiMethodCallExpression || parent instanceof PsiVariable || + parent instanceof PsiAssignmentExpression) { + return !TypeConversionUtil.isSafeConversion(castType, opType); // let's suppose that casts losing precision are important + } else { + return !castType.equals(opType); // cast might be necessary (e.g. ((double)1)/5) + } } final PsiPrimitiveType unboxedOpType = PsiPrimitiveType.getUnboxedType(opType); if (unboxedOpType != null && !unboxedOpType.equals(castType) ) { diff --git a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCount.java b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCount.java index 2a7cb1a6f942..0099a2a92e46 100644 --- a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCount.java +++ b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCount.java @@ -5,6 +5,6 @@ import java.util.Arrays; class Test { long cnt() { /*count*/ - return (long) Arrays.asList('d', 'e', 'f')./*stream*/size()/*after*/; + return Arrays.asList('d', 'e', 'f')./*stream*/size()/*after*/; } } \ No newline at end of file diff --git a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountField.java b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountField.java index eb0f3f1b5948..84287e83643f 100644 --- a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountField.java +++ b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountField.java @@ -4,5 +4,5 @@ import java.util.Arrays; class Test { /*count*/ - long cnt = (long) Arrays.asList('d', 'e', 'f')./*stream*/size()/*after*/; + long cnt = Arrays.asList('d', 'e', 'f')./*stream*/size()/*after*/; } \ No newline at end of file diff --git a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountParameter.java b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountParameter.java index 6a59cc5a2782..537e4113d46f 100644 --- a/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountParameter.java +++ b/java/java-tests/testData/inspection/inefficientStreamCount/afterStreamCountParameter.java @@ -7,6 +7,6 @@ public class Main { public static long test() { List s = new ArrayList<>(); /* unused parameter */ - return (long) s.size(); + return s.size(); } }