public void Add()

in dotnet/CSharpSourceGraphExtraction/Utils/TypeHierarchy.cs [21:82]


        public void Add(ITypeSymbol type)
        {
            if (type.IsReferenceType)
            {
                // This is definitely an object
                AddAsObject(type);
            }

            if (type is IArrayTypeSymbol) {
                var arrayTypeSymbol = type as IArrayTypeSymbol;
                Add(arrayTypeSymbol.ElementType);
            }
            
            if (type is ITypeParameterSymbol)
            {
                var typeParam = type as ITypeParameterSymbol;
                if (typeParam.Variance == VarianceKind.In)
                {
                    // this generic will accept all supertypes, not sure how to use.
                }
                else if (typeParam.Variance == VarianceKind.Out)
                {
                    // Probably nothing should happen here.
                }

                if (typeParam.HasReferenceTypeConstraint)
                {
                    AddAsObject(type);
                }
                else
                {
                    // Add as a special "TypeParam" top type
                    AddAsTypeParam(type);
                }
            }
            
            if (type.BaseType != null)
            {
                var addBaseType = Add(type, type.BaseType);
                if (addBaseType) Add(type.BaseType);
            }

            foreach (var implementedIface in type.Interfaces)
            {
                var addIface = Add(type, implementedIface);
                if (addIface) Add(implementedIface);
            }

            if (type is INamedTypeSymbol)
            {
                var namedType = type as INamedTypeSymbol;
                if (namedType.IsGenericType)
                {
                    if (namedType.ConstructedFrom != type)
                    {
                        var addErasure = Add(type, namedType.ConstructedFrom);
                        if (addErasure) Add(namedType.ConstructedFrom);
                    }
                }
            }            
            
        }