/// <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;
        }
Exemple #2
0
 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};
 }