From a3b5e864db1890274859825ace325c2955652b8b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 23 Mar 2016 15:44:01 +0100 Subject: [PATCH] convert field to local: reject when field is used from javadoc (IDEA-153332) --- .../FieldCanBeLocalInspectionBase.java | 23 ++++++++++++++++--- .../convert2Local/beforeUsedInJavadoc.java | 17 ++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convert2Local/beforeUsedInJavadoc.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java index ca81169adc36..9f20f4c29476 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java @@ -31,6 +31,8 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; +import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.javadoc.PsiDocTagValue; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; @@ -135,6 +137,10 @@ public class FieldCanBeLocalInspectionBase extends BaseJavaBatchLocalInspectionT } } } + final PsiDocComment docComment = method.getDocComment(); + if (docComment != null) { + docComment.accept(this); + } //do not go inside method } @@ -145,15 +151,26 @@ public class FieldCanBeLocalInspectionBase extends BaseJavaBatchLocalInspectionT @Override public void visitReferenceExpression(PsiReferenceExpression expression) { - final PsiElement resolved = expression.resolve(); + excludeFieldCandidate(expression); + + super.visitReferenceExpression(expression); + } + + @Override + public void visitDocTagValue(PsiDocTagValue value) { + excludeFieldCandidate(value.getReference()); + super.visitDocTagValue(value); + } + + private void excludeFieldCandidate(PsiReference ref) { + if (ref == null) return; + final PsiElement resolved = ref.resolve(); if (resolved instanceof PsiField) { final PsiField field = (PsiField)resolved; if (aClass.equals(field.getContainingClass())) { candidates.remove(field); } } - - super.visitReferenceExpression(expression); } }); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convert2Local/beforeUsedInJavadoc.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convert2Local/beforeUsedInJavadoc.java new file mode 100644 index 000000000000..65e8b00ac9d9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/convert2Local/beforeUsedInJavadoc.java @@ -0,0 +1,17 @@ +// "Convert to local" "false" +class TestFieldConversion +{ + private static int someInt = 0; + + public TestFieldConversion() + { + int usingThatInt = someInt; + } + + /** + * Referencing that value here {@value #someInt} + */ + public void someMethod() { + + } +}