From c5914f53b9ee4e5b4344b13c956fc0f50f8170ae Mon Sep 17 00:00:00 2001 From: Nikita Eshkeev Date: Tue, 7 Apr 2020 22:52:10 +0300 Subject: [PATCH] [codeinsight] IDEA-236413 Java: incorrect text for unused public fields with Inject IDEA used did not use to check the visibility of a field and if there is the javax.inject.Inject or similar annotations added to the field IDEA used to always reported the the Private field is not used. This patch adds a new method that generates the error messages based on the visibility level of the field. Signed-off-by: Nikita Eshkeev GitOrigin-RevId: 89d7e2f783b1e54b239d15a2007d9e7376ffdbfa --- .../impl/analysis/PostHighlightingVisitor.java | 14 ++++++++++++-- .../src/messages/JavaErrorBundle.properties | 2 +- ...arkFieldsWhichAreExplicitlyWrittenAsUnused.java | 2 +- 3 files changed, 14 insertions(+), 4 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 162996bbd427..242626035c69 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 @@ -28,6 +28,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.PomNamedTarget; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; @@ -297,7 +298,7 @@ class PostHighlightingVisitor { final boolean readReferenced = myRefCountHolder.isReferencedForRead(field); if (!readReferenced && !UnusedSymbolUtil.isImplicitRead(project, field)) { - String message = JavaErrorBundle.message("private.field.is.not.used.for.reading", identifier.getText()); + String message = getNotUsedForReadingMessage(field, identifier); return suggestionsToMakeFieldUsed(field, identifier, message); } @@ -326,7 +327,7 @@ class PostHighlightingVisitor { } else if (UnusedSymbolUtil.isFieldUnused(myProject, myFile, field, progress, helper)) { if (UnusedSymbolUtil.isImplicitWrite(myProject, field)) { - String message = JavaErrorBundle.message("private.field.is.not.used.for.reading", identifier.getText()); + String message = getNotUsedForReadingMessage(field, identifier); HighlightInfo highlightInfo = UnusedSymbolUtil.createUnusedSymbolInfo(identifier, message, myDeadCodeInfoType); QuickFixAction.registerQuickFixAction(highlightInfo, QuickFixFactory.getInstance().createSafeDeleteFix(field), myDeadCodeKey); return highlightInfo; @@ -336,6 +337,15 @@ class PostHighlightingVisitor { return null; } + @NotNull + private static String getNotUsedForReadingMessage(@NotNull final PsiField field, @NotNull final PsiIdentifier identifier) { + final String visibility = VisibilityUtil.getVisibilityStringToDisplay(field); + + final String message = JavaErrorBundle.message("field.is.not.used.for.reading", visibility, identifier.getText()); + + return StringUtil.capitalize(message); + } + private HighlightInfo suggestionsToMakeFieldUsed(@NotNull PsiField field, @NotNull PsiIdentifier identifier, @NotNull String message) { HighlightInfo highlightInfo = UnusedSymbolUtil.createUnusedSymbolInfo(identifier, message, myDeadCodeInfoType); SpecialAnnotationsUtilBase.createAddToSpecialAnnotationFixes(field, annoName -> { diff --git a/java/java-psi-impl/src/messages/JavaErrorBundle.properties b/java/java-psi-impl/src/messages/JavaErrorBundle.properties index 3737c7b507ec..d2fa2c07c992 100644 --- a/java/java-psi-impl/src/messages/JavaErrorBundle.properties +++ b/java/java-psi-impl/src/messages/JavaErrorBundle.properties @@ -275,7 +275,7 @@ local.variable.is.not.used.for.reading=Variable ''{0}'' is assigned but never ac local.variable.is.not.assigned=Variable ''{0}'' is never assigned private.field.is.not.used=Private field ''{0}'' is never used field.is.not.used=Field ''{0}'' is never used -private.field.is.not.used.for.reading=Private field ''{0}'' is assigned but never accessed +field.is.not.used.for.reading={0} field ''{1}'' is assigned but never accessed private.field.is.not.assigned=Private field ''{0}'' is never assigned parameter.is.not.used=Parameter ''{0}'' is never used pattern.variable.is.not.used=Pattern variable ''{0}'' is never used diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/MarkFieldsWhichAreExplicitlyWrittenAsUnused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/MarkFieldsWhichAreExplicitlyWrittenAsUnused.java index eff890cf55e6..957d94e9887f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/MarkFieldsWhichAreExplicitlyWrittenAsUnused.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advFixture/MarkFieldsWhichAreExplicitlyWrittenAsUnused.java @@ -1,4 +1,4 @@ public class MarkFieldsWhichAreExplicitlyWrittenAsUnused { - public String implicitWrite; + public String implicitWrite; } \ No newline at end of file