mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
pull up from anonymous: check for base class type instead of extends list
This commit is contained in:
+9
-3
@@ -61,15 +61,21 @@ public class MemberInfoStorage extends AbstractMemberInfoStorage<PsiMember, PsiC
|
||||
private void buildSubClassesMap(PsiClass aClass, Set<PsiClass> visited) {
|
||||
final PsiReferenceList extendsList = aClass.getExtendsList();
|
||||
if (extendsList != null) {
|
||||
buildSubClassesMapForList(extendsList.getReferencedTypes(), aClass, visited);
|
||||
buildSubClassesMapForList(aClass, visited, extendsList.getReferencedTypes());
|
||||
}
|
||||
final PsiReferenceList implementsList = aClass.getImplementsList();
|
||||
if (implementsList != null) {
|
||||
buildSubClassesMapForList(implementsList.getReferencedTypes(), aClass, visited);
|
||||
buildSubClassesMapForList(aClass, visited, implementsList.getReferencedTypes());
|
||||
}
|
||||
|
||||
if (aClass instanceof PsiAnonymousClass) {
|
||||
buildSubClassesMapForList(aClass, visited, ((PsiAnonymousClass)aClass).getBaseClassType());
|
||||
}
|
||||
}
|
||||
|
||||
private void buildSubClassesMapForList(final PsiClassType[] classesList, PsiClass aClass, Set<PsiClass> processed) {
|
||||
private void buildSubClassesMapForList(final PsiClass aClass,
|
||||
final Set<PsiClass> processed,
|
||||
final PsiClassType... classesList) {
|
||||
for (PsiClassType element : classesList) {
|
||||
PsiClass resolved = element.resolve();
|
||||
if (resolved != null && processed.add(resolved)) {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class Test {
|
||||
{
|
||||
I i = new I() {
|
||||
public void fo<caret>o() {}
|
||||
};
|
||||
}
|
||||
|
||||
interface I {}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
class Test {
|
||||
{
|
||||
I i = new I() {
|
||||
@Override
|
||||
public void foo() {}
|
||||
};
|
||||
}
|
||||
|
||||
interface I {
|
||||
void foo();
|
||||
}
|
||||
}
|
||||
@@ -207,6 +207,10 @@ public class PullUpTest extends LightRefactoringTestCase {
|
||||
doTest(false, new RefactoringTestUtil.MemberDescriptor("test", PsiMethod.class, true));
|
||||
}
|
||||
|
||||
public void testPullUpFromAnonymousToInterface() throws Exception {
|
||||
doTest(false, new RefactoringTestUtil.MemberDescriptor("foo", PsiMethod.class, true));
|
||||
}
|
||||
|
||||
private void doTest(RefactoringTestUtil.MemberDescriptor... membersToFind) {
|
||||
doTest(true, membersToFind);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user