From 5dbbebe065f3a9c2dc946fa7f4e1c2ea27b5ac68 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 28 Apr 2014 13:28:39 +0200 Subject: [PATCH] extract superclass: process same name type parameters inside class members --- .../ExtractSuperClassUtil.java | 21 +++++++------------ .../sameTypeParameterName/after/Test.java | 9 ++++++++ .../after/TestSubclass.java | 2 ++ .../sameTypeParameterName/before/Test.java | 8 +++++++ .../refactoring/ExtractSuperClassTest.java | 4 ++++ 5 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/Test.java create mode 100644 java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/TestSubclass.java create mode 100644 java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/before/Test.java diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassUtil.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassUtil.java index bd2c7cbe260f..11815b222c82 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassUtil.java @@ -199,20 +199,13 @@ public class ExtractSuperClassUtil { for (final MemberInfo info : selectedMembers) { movedElements.add(info.getMember()); } - final PsiTypeParameterList typeParameterList = RefactoringUtil.createTypeParameterListWithUsedTypeParameters(null, - new Condition() { - @Override - public boolean value( - PsiTypeParameter parameter) { - return - findTypeParameterInDerived( - derivedClass, - parameter - .getName()) != - null; - } - }, PsiUtilCore - .toPsiElementArray(movedElements)); + final Condition filter = new Condition() { + @Override + public boolean value(PsiTypeParameter parameter) { + return findTypeParameterInDerived(derivedClass, parameter.getName()) == parameter; + } + }; + final PsiTypeParameterList typeParameterList = RefactoringUtil.createTypeParameterListWithUsedTypeParameters(null, filter, PsiUtilCore.toPsiElementArray(movedElements)); final PsiTypeParameterList originalTypeParameterList = superClass.getTypeParameterList(); assert originalTypeParameterList != null; final PsiTypeParameterList newList = typeParameterList != null ? (PsiTypeParameterList)originalTypeParameterList.replace(typeParameterList) : originalTypeParameterList; diff --git a/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/Test.java new file mode 100644 index 000000000000..83f27cd47c42 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/Test.java @@ -0,0 +1,9 @@ +public class Test { + interface A { + void foo(T t); + } + + interface B { + void bar(T t); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/TestSubclass.java b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/TestSubclass.java new file mode 100644 index 000000000000..8d40ecb0e639 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/after/TestSubclass.java @@ -0,0 +1,2 @@ +public class TestSubclass extends Test { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/before/Test.java b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/before/Test.java new file mode 100644 index 000000000000..acd2c140ab70 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractSuperClass/sameTypeParameterName/before/Test.java @@ -0,0 +1,8 @@ +public class Test { + interface A { + void foo(T t); + } + interface B { + void bar(T t); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java index 0e211e172ab7..2d89d8cf4106 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractSuperClassTest.java @@ -104,6 +104,10 @@ public class ExtractSuperClassTest extends RefactoringTestCase { doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("a", PsiField.class)); } + public void testSameTypeParameterName() throws Exception { + doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("A", PsiClass.class), new RefactoringTestUtil.MemberDescriptor("B", PsiClass.class)); + } + public void testExtendsLibraryClass() throws Exception { doTest("Test", "TestSubclass"); }