Пример #1
0
        public void Interface()
        {
            var type       = module.GetType("Com.Mypackage.IService");
            var @interface = CecilApiImporter.CreateInterface(type, options);

            Assert.IsTrue(@interface.Validate(new CodeGenerationOptions(), new GenericParameterDefinitionList(), new CodeGeneratorContext()), "interface.Validate failed!");

            Assert.AreEqual("public", @interface.Visibility);
            Assert.AreEqual("IService", @interface.Name);
            Assert.AreEqual("com.mypackage.service", @interface.JavaName);
            Assert.AreEqual("Lcom/mypackage/service;", @interface.JniName);
        }
Пример #2
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);
            }
        }