Mono.CSharp.MetadataImporter.CreateTypeParameter C# (CSharp) Method

CreateTypeParameter() private method

private CreateTypeParameter ( Type type, System.TypeSpec declaringType ) : Mono.CSharp.TypeParameterSpec
type IKVM.Reflection.Type
declaringType System.TypeSpec
return Mono.CSharp.TypeParameterSpec
        TypeParameterSpec CreateTypeParameter(MetaType type, TypeSpec declaringType)
        {
            Variance variance;
            switch (type.GenericParameterAttributes & GenericParameterAttributes.VarianceMask) {
            case GenericParameterAttributes.Covariant:
                variance = Variance.Covariant;
                break;
            case GenericParameterAttributes.Contravariant:
                variance = Variance.Contravariant;
                break;
            default:
                variance = Variance.None;
                break;
            }

            SpecialConstraint special = SpecialConstraint.None;
            var import_special = type.GenericParameterAttributes & GenericParameterAttributes.SpecialConstraintMask;

            if ((import_special & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0) {
                special |= SpecialConstraint.Struct;
            } else if ((import_special & GenericParameterAttributes.DefaultConstructorConstraint) != 0) {
                special = SpecialConstraint.Constructor;
            }

            if ((import_special & GenericParameterAttributes.ReferenceTypeConstraint) != 0) {
                special |= SpecialConstraint.Class;
            }

            TypeParameterSpec spec;
            var def = new ImportedTypeParameterDefinition (type, this);
            if (type.DeclaringMethod != null) {
                spec = new TypeParameterSpec (type.GenericParameterPosition, def, special, variance, type);
            } else {
                spec = new TypeParameterSpec (declaringType, type.GenericParameterPosition, def, special, variance, type);
            }

            return spec;
        }