diff --git a/java/java-impl/src/com/intellij/codeInspection/duplicateExpressions/SideEffectCalculator.java b/java/java-impl/src/com/intellij/codeInspection/duplicateExpressions/SideEffectCalculator.java index 0807193889b3..d3973119b07f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/duplicateExpressions/SideEffectCalculator.java +++ b/java/java-impl/src/com/intellij/codeInspection/duplicateExpressions/SideEffectCalculator.java @@ -145,16 +145,16 @@ class SideEffectCalculator { PsiClass psiClass = method.getContainingClass(); if (psiClass == null) return true; - if (ClassUtils.isImmutableClass(psiClass) || - MethodUtils.isEquals(method) || + String className = psiClass.getQualifiedName(); + if (MethodUtils.isEquals(method) || MethodUtils.isHashCode(method) || MethodUtils.isToString(method) || MethodUtils.isCompareTo(method) || - MethodUtils.isComparatorCompare(method)) { + MethodUtils.isComparatorCompare(method) || + ClassUtils.isImmutableClass(psiClass) && !JAVA_IO_FILE.equals(className)) { // methods of File have or are sensitive to side effects return false; } - String className = psiClass.getQualifiedName(); if (JAVA_UTIL_OBJECTS.equals(className)) { return false; } diff --git a/java/java-tests/testData/inspection/duplicateExpressions/File.java b/java/java-tests/testData/inspection/duplicateExpressions/File.java new file mode 100644 index 000000000000..672431e17fd8 --- /dev/null +++ b/java/java-tests/testData/inspection/duplicateExpressions/File.java @@ -0,0 +1,18 @@ +import java.io.*; + +class C { + void testConstructor(String path) { + File a = new File(path); + File b = new File(path); + } + + void testMethods(String path) throws IOException { + File f = new File(path); + + boolean a = f.createNewFile(); + boolean b = f.createNewFile(); + + boolean c = f.delete(); + boolean d = f.delete(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateExpressionsTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateExpressionsTest.kt index 6122b3c937be..e7df4ffbee23 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateExpressionsTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DuplicateExpressionsTest.kt @@ -34,6 +34,7 @@ class DuplicateExpressionsTest : LightCodeInsightFixtureTestCase() { fun testMathRandom() = doTest(1) fun testVariable() = doTest(1) fun testLambda() = doTest(20) + fun testFile() = doTest(1) private fun doTest(threshold: Int = 50) { val oldThreshold = inspection.complexityThreshold