/// <summary> /// Creates 2 types, List[Fruit] and List[Apple], where: /// <code> /// class List[A] /// class Fruit /// class Apple extends Fruit /// </code> /// </summary> /// <param name="variance">variance type for type argument <code>'A'</code></param> /// <param name="listOfFruits"></param> /// <param name="listOfApples"></param> private static void CreateTypes(RppGenericParameterVariance variance, out RType listOfFruits, out RType listOfApples) { RType listTy = new RType("List"); RppGenericParameter[] genericParameters = listTy.DefineGenericParameters("A"); genericParameters[0].Variance = variance; RType fruitTy = new RType("Fruit"); RType listOfFruitsTy = listTy.MakeGenericType(fruitTy); RType appleTy = new RType("Apple", RTypeAttributes.Class, fruitTy); listOfApples = listTy.MakeGenericType(appleTy); listOfFruits = listOfFruitsTy; }
private RppGenericParameter CreateGenericParameter(Type gp, RppGenericParameterVariance[] genericParametersVariance) { RppGenericParameterVariance variance = genericParametersVariance?[gp.GenericParameterPosition] ?? RppGenericParameterVariance.Invariant; return new RppGenericParameter(gp.Name) {Position = gp.GenericParameterPosition, Type = CreateGenericParameterType(gp), Variance = variance}; }