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