From e29649134e68bd3c92b48d8ba3880e1a531c1cda Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 9 May 2022 15:12:44 +0200 Subject: [PATCH] Don't report local variables named 'ignored' as unused (IDEA-171371) GitOrigin-RevId: 40ad31afd1cb58fcdd9c48ba9970508ec052b562 --- .../daemon/impl/analysis/PostHighlightingVisitor.java | 2 +- .../codeInspection/deadCode/UnusedDeclarationInspection.java | 2 ++ java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java | 2 +- .../daemonCodeAnalyzer/advHighlighting/Unused.java | 5 +++++ .../deadCode/localVariables/src/PatternVariables.java | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java index 630aecf74192..9d329965ea2c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java @@ -261,7 +261,7 @@ class PostHighlightingVisitor { @Nullable private HighlightInfo processLocalVariable(@NotNull PsiLocalVariable variable, @NotNull PsiIdentifier identifier) { - if (variable instanceof PsiResourceVariable && PsiUtil.isIgnoredName(variable.getName())) return null; + if (PsiUtil.isIgnoredName(variable.getName())) return null; if (UnusedSymbolUtil.isImplicitUsage(myProject, variable)) return null; String message = null; diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index e355b414b651..c99f7c23d0a1 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -16,6 +16,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.psi.*; import com.intellij.psi.controlFlow.DefUseUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.TitledSeparator; import com.intellij.ui.components.JBLabel; @@ -294,6 +295,7 @@ public final class UnusedDeclarationInspection extends UnusedDeclarationInspecti for (DefUseUtil.Info varDefInfo : unusedDefs) { PsiElement parent = varDefInfo.getContext(); PsiVariable variable = varDefInfo.getVariable(); + if (PsiUtil.isIgnoredName(variable.getName())) continue; if (parent instanceof PsiDeclarationStatement || parent instanceof PsiForeachStatement || variable instanceof PsiResourceVariable || variable instanceof PsiPatternVariable) { if (!varDefInfo.isRead() && !SuppressionUtil.inspectionResultSuppressed(variable, UnusedDeclarationInspection.this)) { diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index c66de41f7c2f..63c98d794384 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -49,7 +49,7 @@ public final class PsiUtil extends PsiUtilCore { public static final int ACCESS_LEVEL_PRIVATE = 1; public static final Key VALID_VOID_TYPE_IN_CODE_FRAGMENT = Key.create("VALID_VOID_TYPE_IN_CODE_FRAGMENT"); - private static final Pattern IGNORED_NAMES = Pattern.compile("ignored?[A-Z]?[a-z]*\\d*"); + private static final Pattern IGNORED_NAMES = Pattern.compile("ignored?[A-Za-z\\d]*"); private PsiUtil() {} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java index 41c5b9cbf7f4..7aa496895444 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/Unused.java @@ -51,6 +51,11 @@ class PrivateClassTest { } } + void localVariables() { + String s = "unused"; + String ignored = "unused but ignored"; + } + class IncrementedButNeverAccessed { private int ffff; diff --git a/java/java-tests/testData/inspection/deadCode/localVariables/src/PatternVariables.java b/java/java-tests/testData/inspection/deadCode/localVariables/src/PatternVariables.java index 50d14bad2cb2..78c82bd87b1f 100644 --- a/java/java-tests/testData/inspection/deadCode/localVariables/src/PatternVariables.java +++ b/java/java-tests/testData/inspection/deadCode/localVariables/src/PatternVariables.java @@ -16,5 +16,6 @@ class PatternVariables { } var strings = getStrings(); // strings unused + final boolean ignored = new java.io.File(args[1]).delete(); // don't warn on variables named 'ignored' } } \ No newline at end of file