diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java index fd5b751fb7b0..f643d3f0b47c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java @@ -140,7 +140,7 @@ public final class RefClassImpl extends RefJavaElementImpl implements RefClass { if (uMethod.isConstructor()) { constructorSeen = true; final List parameters = uMethod.getUastParameters(); - if (!parameters.isEmpty()|| uMethod.getVisibility() != UastVisibility.PRIVATE) { + if (!parameters.isEmpty() || uMethod.getVisibility() != UastVisibility.PRIVATE) { utilityClass = false; } @@ -439,11 +439,6 @@ public final class RefClassImpl extends RefJavaElementImpl implements RefClass { return checkFlag(IS_ANNOTATION_MASK); } - @Override - public boolean isSuspicious() { - return !(isUtilityClass() && getOutReferences().isEmpty()) && super.isSuspicious(); - } - @Override public boolean isUtilityClass() { return checkFlag(IS_UTILITY_MASK); @@ -527,10 +522,10 @@ public final class RefClassImpl extends RefJavaElementImpl implements RefClass { if (super.isReferenced()) return true; if (isInterface()) { - if (!getDerivedReferences().isEmpty()) return true; + return !getDerivedReferences().isEmpty(); } else if (isAbstract()) { - if (!getSubClasses().isEmpty()) return true; + return !getSubClasses().isEmpty(); } return false; @@ -541,10 +536,10 @@ public final class RefClassImpl extends RefJavaElementImpl implements RefClass { if (super.hasSuspiciousCallers()) return true; if (isInterface()) { - if (!getDerivedReferences().isEmpty()) return true; + return !getDerivedReferences().isEmpty(); } else if (isAbstract()) { - if (!getSubClasses().isEmpty()) return true; + return !getSubClasses().isEmpty(); } return false; diff --git a/java/java-tests/testData/inspection/deadCode/utilityClass/expected.xml b/java/java-tests/testData/inspection/deadCode/utilityClass/expected.xml new file mode 100644 index 000000000000..d1c9756097b0 --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/utilityClass/expected.xml @@ -0,0 +1,13 @@ + + + + Example.java + 4 + Method is never used. + + + Example.java + 3 + No class references have been found. Class static initializer is not reachable. + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/deadCode/utilityClass/src/Example.java b/java/java-tests/testData/inspection/deadCode/utilityClass/src/Example.java new file mode 100644 index 000000000000..fe755e602329 --- /dev/null +++ b/java/java-tests/testData/inspection/deadCode/utilityClass/src/Example.java @@ -0,0 +1,5 @@ +package deadCode.utilityClass.src; + +public class Example { + public static void test() {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationInspectionTest.java index 384ea7476dfb..c6028fd0e11a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/UnusedDeclarationInspectionTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.codeInspection; import com.intellij.codeInspection.ex.EntryPointsManagerBase; @@ -267,6 +267,10 @@ public class UnusedDeclarationInspectionTest extends AbstractUnusedDeclarationTe doTest(); } + public void testUtilityClass() { + doTest(); + } + public void testJunitMethodSource() {doTest();} public void testImplicitClass() {