diff --git a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java index 803ddbb2f13a..237387fac737 100644 --- a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java @@ -384,7 +384,9 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor { if (!myIsInnerClassNeeded) return; PsiClass innerClass = myFactory.createClass(myInnerClassName); - final PsiJavaCodeReferenceElement baseClassReferenceElement = myFactory.createClassReferenceElement(myBaseClass); + final PsiSubstitutor superClassSubstitutor = TypeConversionUtil.getSuperClassSubstitutor(myBaseClass, myClass, PsiSubstitutor.EMPTY); + final PsiClassType superClassType = myFactory.createType(myBaseClass, superClassSubstitutor); + final PsiJavaCodeReferenceElement baseClassReferenceElement = myFactory.createReferenceElementByType(superClassType); if (!myBaseClass.isInterface()) { innerClass.getExtendsList().add(baseClassReferenceElement); } else { diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java new file mode 100644 index 000000000000..9414e4e2ee58 --- /dev/null +++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/A.java @@ -0,0 +1,8 @@ +public class A { + public final MyIntf myDelegate = new MyIntf(); + + private class MyIntf implements Intf { + public void method1(Integer t) { + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java new file mode 100644 index 000000000000..da4078c3e322 --- /dev/null +++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/after/Intf.java @@ -0,0 +1,3 @@ +public interface Intf { + void method1(T t); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java new file mode 100644 index 000000000000..377e4667ba55 --- /dev/null +++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/A.java @@ -0,0 +1,4 @@ +public class A implements Intf { + public void method1(Integer t) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java new file mode 100644 index 000000000000..da4078c3e322 --- /dev/null +++ b/java/java-tests/testData/refactoring/inheritanceToDelegation/typeParametersSubstitution/before/Intf.java @@ -0,0 +1,3 @@ +public interface Intf { + void method1(T t); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java index ec9beac919f4..e3b45d35ca2f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java @@ -119,6 +119,9 @@ public class InheritanceToDelegationTest extends MultiFileTestCase { new String[]{"getDate"}, ArrayUtil.EMPTY_STRING_ARRAY, false, false)); } + public void testTypeParametersSubstitution() throws Exception { + doTest(createPerformAction("A", "myDelegate", "MyIntf", "Intf", new int[]{}, ArrayUtil.EMPTY_STRING_ARRAY, true, false)); + } private PerformAction createPerformAction( final String className, final String fieldName, final String innerClassName,