diff --git a/tools/generator/CodeGenerator.cs b/tools/generator/CodeGenerator.cs index 2a9760a29..8fb650f5f 100644 --- a/tools/generator/CodeGenerator.cs +++ b/tools/generator/CodeGenerator.cs @@ -308,8 +308,12 @@ static void Run (CodeGeneratorOptions options, DirectoryAssemblyResolver resolve opt.Gens = gens; // disable interface default methods here, especially before validation. - foreach (var gen in gens) + gens = gens.Where (g => !g.IsObfuscated && g.Visibility != "private").ToList (); + foreach (var gen in gens) { gen.StripNonBindables (); + if (gen.IsGeneratable) + AddTypeToTable (gen); + } Validate (gens, opt); @@ -355,6 +359,13 @@ static void Run (CodeGeneratorOptions options, DirectoryAssemblyResolver resolve gen_info.GenerateLibraryProjectFile (options, enumFiles); } + static void AddTypeToTable (GenBase gb) + { + SymbolTable.AddType (gb); + foreach (var nt in gb.NestedTypes) + AddTypeToTable (nt); + } + static IEnumerable FlattenNestedTypes (IEnumerable gens) { foreach (var g in gens) { diff --git a/tools/generator/GenBase.cs b/tools/generator/GenBase.cs index 4d79c6cc4..fd1ed265a 100644 --- a/tools/generator/GenBase.cs +++ b/tools/generator/GenBase.cs @@ -53,6 +53,10 @@ public bool IsDeprecated { get { return support.IsDeprecated; } } + public bool IsObfuscated { + get { return support.IsObfuscated; } + } + public string DeprecatedComment { get { return support.DeprecatedComment; } } @@ -718,6 +722,9 @@ public void StripNonBindables () // have to "implement" those methods because they are declared and you have to implement // any declared methods in C#. That is going to be problematic a lot. methods = methods.Where (m => !m.IsInterfaceDefaultMethod).ToList (); + nested_types = nested_types.Where (n => !n.IsObfuscated && n.Visibility != "private").ToList (); + foreach (var n in nested_types) + n.StripNonBindables (); } public void FillProperties () diff --git a/tools/generator/GenBaseSupport.cs b/tools/generator/GenBaseSupport.cs index 5bdd375c0..ca57958a1 100644 --- a/tools/generator/GenBaseSupport.cs +++ b/tools/generator/GenBaseSupport.cs @@ -18,6 +18,7 @@ public abstract class GenBaseSupport public abstract string DeprecatedComment { get; } public abstract bool IsGeneratable { get; } public abstract bool IsGeneric { get; } + public abstract bool IsObfuscated { get; } public abstract string FullName { get; set; } public abstract string Name { get; set; } public abstract string Namespace { get; } @@ -92,6 +93,10 @@ public override bool IsAcw { public override bool IsDeprecated { get { return deprecated; } } + + public override bool IsObfuscated { + get { return false; } // obfuscated types have no chance to be already bound in managed types. + } public override string DeprecatedComment { get { return deprecatedComment; } @@ -198,8 +203,8 @@ public XmlGenBaseSupport (XmlElement pkg, XmlElement elem) name = TypeNamePrefix + raw_name; full_name = String.Format ("{0}.{1}{2}", ns, idx > 0 ? StringRocks.TypeToPascalCase (java_name.Substring (0, idx + 1)) : String.Empty, name); } - //marshaler = elem.XGetAttribute ("marshaler"); - //if (!string.IsNullOrEmpty (marshaler)) throw new Exception (); + + obfuscated = IsObfuscatedName (java_name) && elem.XGetAttribute ("obfuscated") != "false"; } public override bool IsAcw { @@ -219,6 +224,11 @@ public override string DeprecatedComment { public override bool IsGeneratable { get { return true; } } + + bool obfuscated; + public override bool IsObfuscated { + get { return obfuscated; } + } string java_name; public override string JavaSimpleName { @@ -291,6 +301,17 @@ public override bool ValidateNamespace () } return true; } + + bool IsObfuscatedName (String name) + { + if (name.StartsWith ("R.", StringComparison.Ordinal)) + return false; + int idx = name.LastIndexOf ('.'); + string last = idx < 0 ? name : name.Substring (idx + 1); + if (last.Any (c => (c < 'a' || 'z' < c) && (c < '0' || '9' < c))) + return false; + return true; + } } public class InterfaceXmlGenBaseSupport : XmlGenBaseSupport diff --git a/tools/generator/Parser.cs b/tools/generator/Parser.cs index faeacaa89..40b3c3b6b 100644 --- a/tools/generator/Parser.cs +++ b/tools/generator/Parser.cs @@ -129,7 +129,6 @@ List ParsePackage (XmlElement ns, Predicate p) nested [name] = gen; else result.Add (gen); - SymbolTable.AddType (gen); } foreach (string name in nested.Keys) {