From e83b30812c7a8d08f9eb375e98263048a33315c2 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 7 Jun 2016 13:41:37 +0300 Subject: [PATCH] field can be local: don't evaluate runtime constants (IDEA-157179) --- .../FieldCanBeLocalInspectionBase.java | 5 ++--- .../dontSimplifyRuntimeConstants/expected.xml | 2 ++ .../dontSimplifyRuntimeConstants/src/Test.java | 15 +++++++++++++++ .../codeInspection/FieldCanBeLocalTest.java | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/expected.xml create mode 100644 java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/src/Test.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 bf71a48ece14..0921d210f2c7 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 @@ -37,7 +37,6 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.intellij.util.Processor; import com.siyeh.InspectionGadgetsBundle; import gnu.trove.THashSet; import org.jdom.Element; @@ -214,8 +213,8 @@ public class FieldCanBeLocalInspectionBase extends BaseJavaBatchLocalInspectionT Set ignored) { try { final Ref> writtenVariables = new Ref>(); - final ControlFlow - controlFlow = ControlFlowFactory.getInstance(body.getProject()).getControlFlow(body, AllVariablesControlFlowPolicy.getInstance()); + final ControlFlow controlFlow = ControlFlowFactory.getInstance(body.getProject()) + .getControlFlow(body, AllVariablesControlFlowPolicy.getInstance(), false, false); final List usedVars = ControlFlowUtil.getUsedVariables(controlFlow, 0, controlFlow.getSize()); for (PsiVariable usedVariable : usedVars) { if (usedVariable instanceof PsiField) { diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/expected.xml new file mode 100644 index 000000000000..4704d91e891d --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/expected.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/src/Test.java new file mode 100644 index 000000000000..15cc30ef6c28 --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/dontSimplifyRuntimeConstants/src/Test.java @@ -0,0 +1,15 @@ +class test { + private static final boolean DEBUG = false; + + private test field; + + private test(test field) { + this.field = field; + } + + private void method() { + if (DEBUG) { + field.method(); + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java index 66670ec1eef5..5173deabc857 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java @@ -41,6 +41,7 @@ public class FieldCanBeLocalTest extends InspectionTestCase { public void testFieldUsedForWritingInLambda() throws Exception {doTest();} public void testStaticQualifiedFieldAccessForWriting() throws Exception {doTest();} public void testFieldReferencedFromAnotherObject() throws Exception {doTest();} + public void testDontSimplifyRuntimeConstants() throws Exception {doTest();} public void testIgnoreAnnotated() throws Exception { final FieldCanBeLocalInspection inspection = new FieldCanBeLocalInspection(); doTestConfigured(inspection);