inheritance 2 delegation: type parameters substitution (IDEA-53529)

This commit is contained in:
anna
2010-04-15 22:35:35 +04:00
parent a53fea8e8e
commit b9760871f9
6 changed files with 24 additions and 1 deletions
@@ -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 {
@@ -0,0 +1,8 @@
public class A {
public final MyIntf myDelegate = new MyIntf();
private class MyIntf implements Intf<Integer> {
public void method1(Integer t) {
}
}
}
@@ -0,0 +1,3 @@
public interface Intf<T> {
void method1(T t);
}
@@ -0,0 +1,4 @@
public class A implements Intf<Integer> {
public void method1(Integer t) {
}
}
@@ -0,0 +1,3 @@
public interface Intf<T> {
void method1(T t);
}
@@ -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,