From fbb0fd6132bc0967699c0abf489274c34d96c361 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 9 Jan 2014 15:50:54 +0100 Subject: [PATCH] IDEA-119021 Wrong accessibility warnings when inlining a static class to anonymous --- .../inline/InlineMethodProcessor.java | 2 ++ .../AvailableInSupers.java | 17 +++++++++++++++++ .../AvailableInSupers.java.after | 16 ++++++++++++++++ .../inline/InlineToAnonymousClassTest.java | 4 ++++ 4 files changed, 39 insertions(+) create mode 100644 java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java create mode 100644 java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index aaece25db719..c9649a026fbb 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -357,6 +357,8 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { result.put(memberContainer, inaccessibleReferenced); for (PsiMember member : referencedElements) { if (PsiTreeUtil.isAncestor(elementToInline, member, false)) continue; + if (elementToInline instanceof PsiClass && + InheritanceUtil.isInheritorOrSelf((PsiClass)elementToInline, member.getContainingClass(), true)) continue; if (!PsiUtil.isAccessible(usage.getProject(), member, usageElement, null)) { inaccessibleReferenced.add(member); } diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java new file mode 100644 index 000000000000..f6ff94e795b9 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java @@ -0,0 +1,17 @@ +class A { + protected int i; +} + +class B extends A {} + +class C { + C() { + B d = new D(); + } + + static class D extends B { + D() { + System.out.println(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java.after new file mode 100644 index 000000000000..545b1044140e --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/AvailableInSupers.java.after @@ -0,0 +1,16 @@ +class A { + protected int i; +} + +class B extends A {} + +class C { + C() { + B d = new B() { + { + System.out.println(i); + } + }; + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java index 0da3db206adb..8325a33d5f96 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java @@ -231,6 +231,10 @@ public class InlineToAnonymousClassTest extends LightRefactoringTestCase { public void testBraces() throws Exception { doTest(false, false); } + + public void testAvailableInSupers() throws Exception { + doTest(false, false); + } public void testNoInlineAbstract() throws Exception { doTestNoInline("Abstract classes cannot be inlined");