diff --git a/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs b/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs index ffd9e06..dbff816 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs +++ b/CSharpTranslator/antlr3/src/cs2j/CLR/TranslationTemplate.cs @@ -603,6 +603,9 @@ namespace RusticiSoftware.Translator.CLR [XmlElementAttribute("Name")] public string TypeName { get; set; } +// [XmlElementAttribute("Name")] +// public string[] TypeName { get; set; } + // Path to use when resolving types [XmlElementAttribute("Use")] public UseRepTemplate[] Uses { get; set; } diff --git a/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs b/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs index c33408b..4de730d 100644 --- a/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs +++ b/CSharpTranslator/antlr3/src/cs2jTemplateGen/Main.cs @@ -14,7 +14,6 @@ namespace cs2j.Template.Utils { private Assembly assembly = null; private int verbose = 0; - private List extractTypes = new List(); public TemplateFromDLL (string DLLFileName) { @@ -78,8 +77,18 @@ namespace cs2j.Template.Utils private void buildInterface(InterfaceRepTemplate iface, Type t) { iface.TypeName = TypeHelper.buildTypeName(t); + + List bases = new List(); + if (t.BaseType != null) + bases.Add(TypeHelper.buildTypeName(t.BaseType)); + foreach (Type iTy in t.GetInterfaces()) { + bases.Add(TypeHelper.buildTypeName(iTy)); + } + + iface.Inherits = bases.ToArray(); + // Grab Methods - foreach (MethodInfo m in t.GetMethods()) { + foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance)) { MethodRepTemplate methRep = new MethodRepTemplate(); methRep.Name = m.Name; methRep.Return = TypeHelper.buildTypeName(m.ReturnType); @@ -123,10 +132,16 @@ namespace cs2j.Template.Utils } - private TypeRepTemplate mkTemplate(string typeName) { + private IList mkTemplates(string typeName) { - TypeRepTemplate retRep = null; + List rets = new List(); Type t = assembly.GetType(typeName); + foreach (Type nestedTy in t.GetNestedTypes()) { + foreach(TypeRepTemplate nestedRep in mkTemplates(nestedTy.FullName)) { + rets.Add(nestedRep); + } + } + TypeRepTemplate retRep = null; if (t.IsClass) { ClassRepTemplate classRep = new ClassRepTemplate(); buildClass(classRep, t); @@ -145,7 +160,8 @@ namespace cs2j.Template.Utils } retRep = enumRep; } - return retRep; + rets.Add(retRep); + return rets; } @@ -205,23 +221,25 @@ namespace cs2j.Template.Utils foreach (string t in extractTypes) { if (templateDriver.verbose > 0) Console.WriteLine ( "extracting {0}", t ); - TypeRepTemplate tyRep = templateDriver.mkTemplate(t); + IList tyReps = templateDriver.mkTemplates(t); TextWriter writer = null; - if (dumpXmls) { - string xmlFName = Path.Combine(xmlDir, t.Replace('.', Path.DirectorySeparatorChar) + ".xml"); - string xmlFDir = Path.GetDirectoryName(xmlFName); - if (!Directory.Exists(xmlFDir)) - { - Directory.CreateDirectory(xmlFDir); - } - writer = new StreamWriter(xmlFName); + foreach (TypeRepTemplate tyRep in tyReps) { + if (dumpXmls) { + string xmlFName = Path.Combine(xmlDir, tyRep.TypeName.Replace('.', Path.DirectorySeparatorChar) + ".xml"); + string xmlFDir = Path.GetDirectoryName(xmlFName); + if (!Directory.Exists(xmlFDir)) + { + Directory.CreateDirectory(xmlFDir); + } + writer = new StreamWriter(xmlFName); + } + else { + writer = Console.Out; + } + templateDriver.writeXmlStream(tyRep, writer); + if (dumpXmls) + writer.Close(); } - else { - writer = Console.Out; - } - templateDriver.writeXmlStream(tyRep, writer); - if (dumpXmls) - writer.Close(); } } } diff --git a/CSharpTranslator/antlr3/src/cs2jTemplateGen/cs2jTemplateGen.csproj b/CSharpTranslator/antlr3/src/cs2jTemplateGen/cs2jTemplateGen.csproj index 2b8adbc..12f7a1d 100644 --- a/CSharpTranslator/antlr3/src/cs2jTemplateGen/cs2jTemplateGen.csproj +++ b/CSharpTranslator/antlr3/src/cs2jTemplateGen/cs2jTemplateGen.csproj @@ -1 +1 @@ - Debug AnyCPU 10.0.0 2.0 {CC80B16E-0700-4AA5-ABA0-ADBCD9316952} Exe cs2jTemplateGen cs2jTemplateGen v3.5 true full false bin\Debug DEBUG prompt 4 true -dll /Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2jTemplateGen/bin/Debug/NDesk.Options.dll NDesk.Options.OptionValueCollection none false bin\Release prompt 4 true {CE961AC5-C8D4-41B3-AAF3-23FA8FAEE8AD} cs2j {E6ACBB37-AF38-45E1-B399-0CEE63809A15} NDesk.Options \ No newline at end of file + Debug AnyCPU 10.0.0 2.0 {CC80B16E-0700-4AA5-ABA0-ADBCD9316952} Exe cs2jTemplateGen cs2jTemplateGen v3.5 true full false bin\Debug DEBUG prompt 4 true -dll /Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/src/cs2jTemplateGen/bin/Debug/NDesk.Options.dll NDesk.Options.OptionSet none false bin\Release prompt 4 true {CE961AC5-C8D4-41B3-AAF3-23FA8FAEE8AD} cs2j {E6ACBB37-AF38-45E1-B399-0CEE63809A15} NDesk.Options \ No newline at end of file