From 051ec9b3bb5e5affe6d339fba95340d39917496a Mon Sep 17 00:00:00 2001 From: Artemiy Sartakov Date: Fri, 15 Jan 2021 15:54:27 +0700 Subject: [PATCH] FieldCanBeLocalInspection: do not report fields that have unknown types of usages (IDEA-258498) GitOrigin-RevId: 36ccd2c540a08614d34c97badee31b2d264cdd12 --- .../FieldCanBeLocalInspection.java | 2 +- .../NotConstantInitializer.java | 4 ++-- .../fieldCanBeLocal/Reflection.java | 20 +++++++++++++++++++ .../codeInspection/FieldCanBeLocalTest.java | 11 ++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/inspection/fieldCanBeLocal/Reflection.java diff --git a/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java index 472f2ff57bdd..b01a5e9599c3 100644 --- a/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspection.java @@ -78,7 +78,7 @@ public class FieldCanBeLocalInspection extends AbstractBaseJavaLocalInspectionTo final Map> refs = new HashMap<>(); for (PsiReference reference : references.findAll()) { final PsiElement element = reference.getElement(); - if (!(element instanceof PsiReferenceExpression)) break; + if (!(element instanceof PsiReferenceExpression)) continue FieldLoop; final PsiElement qualifier = ((PsiReferenceExpression)element).getQualifier(); if (qualifier != null && (!(qualifier instanceof PsiThisExpression) || ((PsiThisExpression)qualifier).getQualifier() != null) || !groupReferenceByCodeBlocks(refs, reference)) { diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/NotConstantInitializer.java b/java/java-tests/testData/inspection/fieldCanBeLocal/NotConstantInitializer.java index 374e46ae2b93..cf90e9c7a393 100644 --- a/java/java-tests/testData/inspection/fieldCanBeLocal/NotConstantInitializer.java +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/NotConstantInitializer.java @@ -1,10 +1,10 @@ import java.util.*; -public class Outer { +class Outer { private final int value = calcValue(); int myValue; - Set set = new HashSet(); + Set set = new HashSet(); int calcValue() { return set.size(); diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/Reflection.java b/java/java-tests/testData/inspection/fieldCanBeLocal/Reflection.java new file mode 100644 index 000000000000..33fb4199c366 --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/Reflection.java @@ -0,0 +1,20 @@ +import java.lang.reflect.Field; + +class Reflection { + void reflectionAccess(BeanWithWeirdFields someBean) throws NoSuchFieldException { + Field theField = someBean.getClass().getDeclaredField("UUID"); + } + + void testOther() { + BeanWithWeirdFields someBean = new BeanWithWeirdFields(); + System.out.println(someBean.UUID); + } + + static class BeanWithWeirdFields { + private String UUID; + + public void setUUID(String UUID) { + this.UUID = UUID; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/FieldCanBeLocalTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/FieldCanBeLocalTest.java index 161341261205..1c3c6585040f 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/FieldCanBeLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/FieldCanBeLocalTest.java @@ -3,7 +3,9 @@ package com.intellij.java.codeInspection; import com.intellij.JavaTestUtil; import com.intellij.codeInspection.varScopeCanBeNarrowed.FieldCanBeLocalInspection; +import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; +import org.jetbrains.annotations.NotNull; public class FieldCanBeLocalTest extends LightJavaCodeInsightFixtureTestCase { @Override @@ -11,6 +13,11 @@ public class FieldCanBeLocalTest extends LightJavaCodeInsightFixtureTestCase { return JavaTestUtil.getRelativeJavaTestDataPath() + "/inspection/fieldCanBeLocal"; } + @Override + protected @NotNull LightProjectDescriptor getProjectDescriptor() { + return JAVA_8; + } + private void doTest() { myFixture.enableInspections(new FieldCanBeLocalInspection()); myFixture.testHighlighting(getTestName(false) + ".java"); @@ -106,4 +113,8 @@ public class FieldCanBeLocalTest extends LightJavaCodeInsightFixtureTestCase { public void testConstructor() { doTest(); } + + public void testReflection() { + doTest(); + } }