+ 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 ());
+ }
+ }
+ }
+
+ protected void ImportTypes (MetaType[] types, Namespace targetNamespace, bool importExtensionTypes)