mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
push down: don't try to qualify with anonymous or local (IDEA-182514)
This commit is contained in:
+2
-2
@@ -192,12 +192,12 @@ public class JavaPushDownDelegate extends PushDownDelegate<MemberInfo, PsiMember
|
||||
final List<PsiReference> refsToRebind = new ArrayList<>();
|
||||
final PsiModifierList list = member.getModifierList();
|
||||
LOG.assertTrue(list != null);
|
||||
if (list.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
if (list.hasModifierProperty(PsiModifier.STATIC) && !PsiUtil.isLocalOrAnonymousClass(targetClass)) {
|
||||
for (final PsiReference reference : ReferencesSearch.search(member)) {
|
||||
final PsiElement element = reference.getElement();
|
||||
if (element instanceof PsiReferenceExpression) {
|
||||
final PsiExpression qualifierExpression = ((PsiReferenceExpression)element).getQualifierExpression();
|
||||
if (qualifierExpression instanceof PsiReferenceExpression && !(((PsiReferenceExpression)qualifierExpression).resolve() instanceof PsiClass)) {
|
||||
if (qualifierExpression instanceof PsiReferenceExpression && !(((PsiReferenceExpression)qualifierExpression).resolve() instanceof PsiClass) || qualifierExpression == null) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
class Foo {
|
||||
public static void f<caret>oo() {
|
||||
|
||||
}
|
||||
|
||||
void m() {
|
||||
class FooExt extends Foo {
|
||||
{
|
||||
foo();
|
||||
}
|
||||
}
|
||||
|
||||
class FooExt1 extends Foo {
|
||||
{
|
||||
foo();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
class Foo {
|
||||
|
||||
void m() {
|
||||
class FooExt extends Foo {
|
||||
{
|
||||
foo();
|
||||
}
|
||||
|
||||
public static void foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class FooExt1 extends Foo {
|
||||
{
|
||||
foo();
|
||||
}
|
||||
|
||||
public static void foo() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
@@ -127,6 +128,16 @@ public class PushDownTest extends LightRefactoringTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
public void testStaticToLocalWithReferenceUpdate() {
|
||||
doTest(conflicts -> {
|
||||
assertSameElements(conflicts.values(),
|
||||
Arrays.asList("Method <b><code>m()</code></b> uses method <b><code>foo()</code></b>, which is pushed down",
|
||||
"Method <b><code>m()</code></b> uses method <b><code>foo()</code></b>, which is pushed down",
|
||||
"Static method <b><code>foo()</code></b> can't be pushed to non-static class <b><code>FooExt1</code></b>",
|
||||
"Static method <b><code>foo()</code></b> can't be pushed to non-static class <b><code>FooExt</code></b>"));
|
||||
});
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user