pull up from anonymous: check for base class type instead of extends list

This commit is contained in:
Anna.Kozlova
2016-07-20 18:23:02 +02:00
parent 5170b5d3ea
commit b649b3a511
4 changed files with 34 additions and 3 deletions
@@ -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);
}