public void DefineInterfaces (TypeSpec spec) { var type = (MetaType) provider; MetaType[] ifaces; #if STATIC ifaces = type.__GetDeclaredInterfaces (); if (ifaces.Length != 0) { foreach (var iface in ifaces) { var it = importer.CreateType (iface); if (it == null) continue; spec.AddInterfaceDefined (it); // Unfortunately not all languages expand inherited interfaces var bifaces = it.Interfaces; if (bifaces != null) { foreach (var biface in bifaces) { spec.AddInterfaceDefined (biface); } } } } // // It's impossible to get declared interfaces only using System.Reflection // hence we need to mimic the behavior with ikvm-reflection too to keep // our type look-up logic same // 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.AddInterfaceDefined (iface); } } #else ifaces = type.GetInterfaces (); if (ifaces.Length > 0) { foreach (var iface in ifaces) { spec.AddInterface (importer.CreateType (iface)); } } #endif }