internal static void ProcessReferencedType(TypeDefinition td, CodeGenerationOptions opt) { if (!td.IsPublic && !td.IsNested) { return; } // We want to exclude "IBlahInvoker" types from this type registration. if (td.Name.EndsWith("Invoker")) { string n = td.FullName; n = n.Substring(0, n.Length - 7); var types = td.DeclaringType != null?td.DeclaringType.Resolve().NestedTypes : td.Module.Types; if (types.Any(t => t.FullName == n)) { return; } //Console.Error.WriteLine ("WARNING: " + td.FullName + " survived"); } if (td.Name.EndsWith("Implementor")) { string n = td.FullName; n = n.Substring(0, n.Length - 11); var types = td.DeclaringType != null?td.DeclaringType.Resolve().NestedTypes : td.Module.Types; if (types.Any(t => t.FullName == n)) { return; } //Console.Error.WriteLine ("WARNING: " + td.FullName + " survived"); } ISymbol gb = td.IsEnum ? (ISymbol) new EnumSymbol(td.FullNameCorrected()) : td.IsInterface ? (ISymbol)CecilApiImporter.CreateInterface(td, opt) : CecilApiImporter.CreateClass(td, opt); opt.SymbolTable.AddType(gb); foreach (var nt in td.NestedTypes) { ProcessReferencedType(nt, opt); } }