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 01cd203301b0..ee09678ff7c9 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -302,7 +302,8 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { final PsiElement element = info.getElement(); if (element != null) { final PsiClass targetContainingClass = PsiTreeUtil.getParentOfType(element, PsiClass.class); - if (targetContainingClass != null && !InheritanceUtil.isInheritorOrSelf(targetContainingClass, superClass, true)) { + if (targetContainingClass != null && + (!InheritanceUtil.isInheritorOrSelf(targetContainingClass, superClass, true) || PsiUtil.getEnclosingStaticElement(element, targetContainingClass) != null)) { targetContainingClasses.add(targetContainingClass); } } diff --git a/java/java-tests/testData/refactoring/inlineMethod/InaccessibleSuperCallWhenQualifiedInline.java b/java/java-tests/testData/refactoring/inlineMethod/InaccessibleSuperCallWhenQualifiedInline.java new file mode 100644 index 000000000000..402b898bfe2c --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/InaccessibleSuperCallWhenQualifiedInline.java @@ -0,0 +1,13 @@ +class A { + void bar() {} +} + +class B extends A { + void foo() { + super.bar(); + } + + static void err(B b) { + b.foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java b/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java new file mode 100644 index 000000000000..90b19419417f --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java @@ -0,0 +1,13 @@ +class A { + void bar() {} +} + +class B extends A { + void foo() { + super.bar(); + } + + void err() { + foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java.after b/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java.after new file mode 100644 index 000000000000..a0374627160c --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/SuperCallWhenUnqualifiedInline.java.after @@ -0,0 +1,13 @@ +class A { + void bar() {} +} + +class B extends A { + void foo() { + super.bar(); + } + + void err() { + super.bar(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java index ba6395fa993b..83180d7d423e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -304,6 +304,14 @@ public class InlineMethodTest extends LightRefactoringTestCase { doTestConflict("Inlined method is used in method reference with side effects in qualifier"); } + public void testInaccessibleSuperCallWhenQualifiedInline() throws Exception { + doTestConflict("Inlined method calls super.bar() which won't be accessed in class B"); + } + + public void testSuperCallWhenUnqualifiedInline() throws Exception { + doTestInlineThisOnly(); + } + private void doTestInlineThisOnly() { @NonNls String fileName = "/refactoring/inlineMethod/" + getTestName(false) + ".java"; configureByFile(fileName);