From b649b3a5117b15af1c5ba3b2572058cec03f1cbd Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 20 Jul 2016 18:04:39 +0200 Subject: [PATCH] pull up from anonymous: check for base class type instead of extends list --- .../util/classMembers/MemberInfoStorage.java | 12 +++++++++--- .../pullUp/PullUpFromAnonymousToInterface.java | 9 +++++++++ .../pullUp/PullUpFromAnonymousToInterface_after.java | 12 ++++++++++++ .../testSrc/com/intellij/refactoring/PullUpTest.java | 4 ++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface.java create mode 100644 java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/util/classMembers/MemberInfoStorage.java b/java/java-impl/src/com/intellij/refactoring/util/classMembers/MemberInfoStorage.java index 34fd3241e368..4cb8f4d30cf6 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/classMembers/MemberInfoStorage.java +++ b/java/java-impl/src/com/intellij/refactoring/util/classMembers/MemberInfoStorage.java @@ -61,15 +61,21 @@ public class MemberInfoStorage extends AbstractMemberInfoStorage 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 processed) { + private void buildSubClassesMapForList(final PsiClass aClass, + final Set processed, + final PsiClassType... classesList) { for (PsiClassType element : classesList) { PsiClass resolved = element.resolve(); if (resolved != null && processed.add(resolved)) { diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface.java b/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface.java new file mode 100644 index 000000000000..a057fcedcc30 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface.java @@ -0,0 +1,9 @@ +class Test { + { + I i = new I() { + public void foo() {} + }; + } + + interface I {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface_after.java b/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface_after.java new file mode 100644 index 000000000000..31a37f01bd24 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/PullUpFromAnonymousToInterface_after.java @@ -0,0 +1,12 @@ +class Test { + { + I i = new I() { + @Override + public void foo() {} + }; + } + + interface I { + void foo(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java index b2a1f6408d71..c74e41a21383 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java @@ -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); }