/// <summary>
 /// Merges nullability.
 /// </summary>
 public static NullableAnnotation MergeNullableAnnotation(this NullableAnnotation a, NullableAnnotation b, VarianceKind variance)
 {
     return(variance switch
     {
         VarianceKind.In => a.Meet(b),
         VarianceKind.Out => a.Join(b),
         VarianceKind.None => a.EnsureCompatible(b),
         _ => throw ExceptionUtilities.UnexpectedValue(variance)
     });
Beispiel #2
0
        public static NullableAnnotation GetNullableAnnotation(ArrayBuilder <TypeSymbolWithAnnotations> types)
        {
            NullableAnnotation result = NullableAnnotation.NotAnnotated;

            foreach (var type in types)
            {
                Debug.Assert(type.HasType);
                Debug.Assert(type.Equals(types[0], TypeCompareKind.AllIgnoreOptions));
                // This uses the covariant merging rules.
                result = result.Join(type.NullableAnnotation);
            }

            return(result);
        }