From 608afc659e8103081b06a1d01fad42a046ce5cac Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 25 Jan 2012 14:48:59 +0400 Subject: [PATCH] IDEA-79290 Inline Local Variable does not qualify accesses to obscured types --- .../source/codeStyle/ReferenceAdjuster.java | 3 ++- .../refactoring/inlineLocal/Qualified.java | 17 +++++++++++++++++ .../inlineLocal/Qualified.java.after | 16 ++++++++++++++++ .../refactoring/inline/InlineLocalTest.java | 7 +++++-- 4 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineLocal/Qualified.java create mode 100644 java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ReferenceAdjuster.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ReferenceAdjuster.java index bbabfc85fc85..f223dd226219 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ReferenceAdjuster.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ReferenceAdjuster.java @@ -221,7 +221,8 @@ public class ReferenceAdjuster { private static boolean isSafeToShortenReference(final String referenceText, final PsiElement psiReference, final PsiClass refClass) { final PsiManager manager = refClass.getManager(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); - return manager.areElementsEquivalent(refClass, facade.getResolveHelper().resolveReferencedClass(referenceText, psiReference)); + final PsiResolveHelper helper = facade.getResolveHelper(); + return manager.areElementsEquivalent(refClass, helper.resolveReferencedClass(referenceText, psiReference)) && helper.resolveReferencedVariable(referenceText, psiReference) == null; } @NotNull diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualified.java b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java new file mode 100644 index 000000000000..dc626e01c64f --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java @@ -0,0 +1,17 @@ +public class A { + int f = 23; + + static class B { + static int f = 42; + } + + int foo() { + int r = B.f; + A B = this; + return r; + } + + public static void main(String[] args) { + System.out.println(new A().foo()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after new file mode 100644 index 000000000000..102be05d5e9a --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/Qualified.java.after @@ -0,0 +1,16 @@ +public class A { + int f = 23; + + static class B { + static int f = 42; + } + + int foo() { + A B = this; + return A.B.f; + } + + public static void main(String[] args) { + System.out.println(new A().foo()); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java index c0e4cb1784b3..e4bde4df16c0 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java @@ -4,8 +4,6 @@ import com.intellij.JavaTestUtil; import com.intellij.codeInsight.TargetElementUtilBase; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiLocalVariable; import com.intellij.psi.PsiReference; @@ -130,6 +128,11 @@ public class InlineLocalTest extends LightCodeInsightTestCase { doTest(true); } + public void testQualified() throws Exception { + doTest(true); + } + + private void doTest(final boolean inlineDef, String conflictMessage) throws Exception { try { doTest(inlineDef);