package spoon.test.ctType.testclasses; //We have to declare own implementations of these well known classes, to have them on class path :-) interface List<E> {}; class ArrayList<E> implements List<E> {} class ListOfX extends ArrayList<X> {} class ListOfA1<A> extends ArrayList<A> {} class ListOfA3<A,B,C> extends ArrayList<B> {} public class SubtypeModel<A extends X> { void foo() { /* * Following code (including comments!) is part of model, which is used to test by CtTypeTest#testIsSubTypeOfonTypeReferences */ List listRaw = new ArrayList(); List<Object> listObject = new ArrayList<>(); List<?> listAll = new ArrayList<>(); List<X> listX = new ArrayList<>(); ListOfX listOfX = new ListOfX(); ListOfA1<X> listOfA1_X = new ListOfA1<>(); ListOfA3<O<A>,X,O<Y>> listOfA3_X = new ListOfA3<>(); List<Y> listY = new ArrayList<>(); List<? extends X> listExtendsX = new ArrayList<>(); List<? extends Y> listExtendsY = new ArrayList<>(); List<? super X> listSuperX = new ArrayList<>(); List<? super Y> listSuperY = new ArrayList<>(); X x = null; Y y = null; listExtendsX = listOfA3_X; x = y; // y = x; listRaw = listObject; listRaw = listAll; listRaw = listX; listRaw = listY; listRaw = listExtendsX; listRaw = listExtendsY; listRaw = listSuperX; listRaw = listSuperY; listObject = listRaw; // listObject = listAll; // listObject = listX; // listObject = listY; // listObject = listExtendsX; // listObject = listExtendsY; // listObject = listSuperX; // listObject = listSuperY; listAll = listRaw; listAll = listObject; listAll = listX; listAll = listY; listAll = listExtendsX; listAll = listExtendsY; listAll = listSuperX; listAll = listSuperY; listX = listRaw; // listX = listObject; // listX = listAll; // listX = listY; // listX = listExtendsX; // listX = listExtendsY; // listX = listSuperX; // listX = listSuperY; listY = listRaw; // listY = listObject; // listY = listAll; // listY = listX; // listY = listExtendsX; // listY = listExtendsY; // listY = listSuperX; // listY = listSuperY; listExtendsX = listRaw; // listExtendsX = listObject; // listExtendsX = listAll; listExtendsX = listX; listExtendsX = listOfX; listExtendsX = listOfA1_X; listExtendsX = listOfA3_X; listExtendsX = listY; listExtendsX = listExtendsY; // listExtendsX = listSuperX; // listExtendsX = listSuperY; listExtendsY = listRaw; // listExtendsY = listObject; // listExtendsY = listAll; // listExtendsY = listX; // listExtendsY = listOfX; listExtendsY = listY; // listExtendsY = listExtendsX; // listExtendsY = listSuperX; // listExtendsY = listSuperY; listSuperX = listRaw; listSuperX = listObject; // listSuperX = listAll; listSuperX = listX; // listSuperX = listY; // listSuperX = listExtendsX; // listSuperX = listExtendsY; // listSuperX = listSuperY; listSuperY = listRaw; listSuperY = listObject; // listSuperY = listAll; listSuperY = listX; listSuperY = listY; // listSuperY = listExtendsX; // listSuperY = listExtendsY; listSuperY = listSuperX; } }