package spoon.test.ctType.testclasses; import java.io.Serializable; import java.util.List; public class ErasureModelA<A, B extends Exception, C extends B, D extends List<B>> { A paramA; B paramB; C paramC; D paramD; public <I, J extends C> ErasureModelA(I paramI, J paramJ, D paramD) { } public <I, J extends C> void method(I paramI, J paramJ, D paramD) { } public <I, J extends C> void method2(I paramI, J paramJ, D paramD) { } public <I, J extends C, K extends ErasureModelA<A,B,C,D>&Serializable> void method3(I paramI, J paramJ, D paramD, K paramK) { } public <I> void wildCardMethod(I paramI, ErasureModelA<? extends I, B, C, D> extendsI) { } // simple case public void list(List<Object> x, List<List<Object>> y, List<String> z) { } static class ModelB<A2,B2 extends Exception, C2 extends B2, D2 extends List<B2>> extends ErasureModelA<A2,B2,C2,D2> { A2 paramA2; B2 paramB2; C2 paramC2; D2 paramD2; public <I, J extends C2> ModelB(I paramI, J paramJ, D2 paramD2) { super(paramI, paramJ, paramD2); } @Override public <I, J extends C2> void method(I paramI, J paramJ, D2 paramD2) { } } static class ModelC extends ErasureModelA<Integer, RuntimeException, IllegalArgumentException, List<RuntimeException>> { public ModelC(Float paramI, IllegalArgumentException paramJ, ModelC paramK) { super(paramI, paramJ, null); } public void method(Float paramI, IllegalArgumentException paramJ, ModelC paramK) { } } }