mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
inline method: don't ignore super expression conflict if containing class inherits target but the call is located inside static context (IDEA-152173)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
class A {
|
||||
void bar() {}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
void foo() {
|
||||
super.bar();
|
||||
}
|
||||
|
||||
static void err(B b) {
|
||||
b.fo<caret>o();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
class A {
|
||||
void bar() {}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
void foo() {
|
||||
super.bar();
|
||||
}
|
||||
|
||||
void err() {
|
||||
fo<caret>o();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
class A {
|
||||
void bar() {}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
void foo() {
|
||||
super.bar();
|
||||
}
|
||||
|
||||
void err() {
|
||||
super.bar();
|
||||
}
|
||||
}
|
||||
@@ -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><code>B</code></b>");
|
||||
}
|
||||
|
||||
public void testSuperCallWhenUnqualifiedInline() throws Exception {
|
||||
doTestInlineThisOnly();
|
||||
}
|
||||
|
||||
private void doTestInlineThisOnly() {
|
||||
@NonNls String fileName = "/refactoring/inlineMethod/" + getTestName(false) + ".java";
|
||||
configureByFile(fileName);
|
||||
|
||||
Reference in New Issue
Block a user