internal Assembly Generate() { if (module.GetType(typeName) != null) { return(module.Assembly); } String ifaceName = typeName.Replace("Mozilla.XPCOM.Interfaces.", ""); TypeInfo.MethodDescriptor[] descs = TypeInfo.GetMethodData(ifaceName); ushort inheritedMethodCount; String parentName = TypeInfo.GetParentInfo(ifaceName, out inheritedMethodCount); Type parentType; if (parentName != null) { parentName = "Mozilla.XPCOM.Interfaces." + parentName; parentType = module.Assembly.GetType(parentName); if (parentType == null) { InterfaceGenerator gen = new InterfaceGenerator(parentName); parentType = gen.Generate().GetType(parentName); } } else { parentType = typeof(object); } tb = module.DefineType(typeName, TypeAttributes.Public | TypeAttributes.Interface, parentType); for (int i = inheritedMethodCount; i < descs.Length; i++) { if (descs[i] != null) { GenerateInterfaceMethod(descs[i]); } } tb.CreateType(); return(module.Assembly); }
static Assembly TypeResolve(object sender, ResolveEventArgs args) { if (args.Name.StartsWith("Mozilla.XPCOM.Proxies.")) { ProxyGenerator gen = new ProxyGenerator(args.Name); return(gen.Generate()); } #if NOTYET if (args.Name.StartsWith("Mozilla.XPCOM.Interfaces.")) { InterfaceGenerator gen = new InterfaceGenerator(args.Name); return(gen.Generate()); } #endif return(null); }
internal Assembly Generate() { if (module.GetType(typeName) != null) return module.Assembly; String ifaceName = typeName.Replace("Mozilla.XPCOM.Interfaces.", ""); TypeInfo.MethodDescriptor[] descs = TypeInfo.GetMethodData(ifaceName); ushort inheritedMethodCount; String parentName = TypeInfo.GetParentInfo(ifaceName, out inheritedMethodCount); Type parentType; if (parentName != null) { parentName = "Mozilla.XPCOM.Interfaces." + parentName; parentType = module.Assembly.GetType(parentName); if (parentType == null) { InterfaceGenerator gen = new InterfaceGenerator(parentName); parentType = gen.Generate().GetType(parentName); } } else { parentType = typeof(object); } tb = module.DefineType(typeName, TypeAttributes.Public | TypeAttributes.Interface, parentType); for (int i = inheritedMethodCount; i < descs.Length; i++) { if (descs[i] != null) GenerateInterfaceMethod(descs[i]); } tb.CreateType(); return module.Assembly; }
static Assembly TypeResolve(object sender, ResolveEventArgs args) { if (args.Name.StartsWith("Mozilla.XPCOM.Proxies.")) { ProxyGenerator gen = new ProxyGenerator(args.Name); return gen.Generate(); } #if NOTYET if (args.Name.StartsWith("Mozilla.XPCOM.Interfaces.")) { InterfaceGenerator gen = new InterfaceGenerator(args.Name); return gen.Generate(); } #endif return null; }