Пример #1
0
        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);
            }
        }