void ImportTypeBase (TypeSpec spec, MetaType type) { if (spec.Kind == MemberKind.Interface) spec.BaseType = module.Compiler.BuiltinTypes.Object; else if (type.BaseType != null) { TypeSpec base_type; if (!IsMissingType (type.BaseType) && type.BaseType.IsGenericType) base_type = CreateType (type.BaseType, new DynamicTypeReader (type), true); else base_type = CreateType (type.BaseType); spec.BaseType = base_type; } MetaType[] ifaces; #if STATIC ifaces = type.__GetDeclaredInterfaces (); if (ifaces.Length != 0) { foreach (var iface in ifaces) { var it = CreateType (iface); if (it == null) continue; spec.AddInterface (it); // Unfortunately not all languages expand inherited interfaces var bifaces = it.Interfaces; if (bifaces != null) { foreach (var biface in bifaces) { spec.AddInterface (biface); } } } } if (spec.BaseType != null) { var bifaces = spec.BaseType.Interfaces; if (bifaces != null) { // // Before adding base class interfaces close defined interfaces // on type parameter // var tp = spec as TypeParameterSpec; if (tp != null && tp.InterfacesDefined == null) { tp.InterfacesDefined = TypeSpec.EmptyTypes; } foreach (var iface in bifaces) spec.AddInterface (iface); } } #else ifaces = type.GetInterfaces (); if (ifaces.Length > 0) { foreach (var iface in ifaces) { spec.AddInterface (CreateType (iface)); } } #endif if (spec.MemberDefinition.TypeParametersCount > 0) { foreach (var tp in spec.MemberDefinition.TypeParameters) { ImportTypeParameterTypeConstraints (tp, tp.GetMetaInfo ()); } } }
private static void AddInterfaces(List<Type> list, Type type) { type.CheckBaked(); foreach (Type iface in type.__GetDeclaredInterfaces()) { if (!list.Contains(iface)) { list.Add(iface); AddInterfaces(list, iface); } } }
void ImportTypeBase(TypeSpec spec, MetaType type) { if (spec.Kind == MemberKind.Interface) spec.BaseType = TypeManager.object_type; else if (type.BaseType != null) { TypeSpec base_type; if (!IsMissingType (type.BaseType) && type.BaseType.IsGenericType) base_type = CreateType (type.BaseType, new DynamicTypeReader (type), true); else base_type = CreateType (type.BaseType); spec.BaseType = base_type; } MetaType[] ifaces; #if STATIC ifaces = type.__GetDeclaredInterfaces (); if (ifaces.Length != 0) { foreach (var iface in ifaces) spec.AddInterface (CreateType (iface)); } if (spec.BaseType != null) { var bifaces = spec.BaseType.Interfaces; if (bifaces != null) { foreach (var iface in bifaces) spec.AddInterface (iface); } } #else ifaces = type.GetInterfaces (); if (ifaces.Length > 0) { foreach (var iface in ifaces) { spec.AddInterface (CreateType (iface)); } } #endif }