From 86a8c1d2a41428dd1e32373f5ba3bb9f1314cdfb Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Thu, 22 Jun 2017 22:43:48 +0900 Subject: [PATCH] [generator] reduce error-prone enumification XPath. Until now, we (well, I) had been patient to deal with methodmap enumification which *requires* distinction between class and interface by adding "[Interface]" mark on interfaces. It was just to distinguish "class" and "interface" elements under "package" element. But... why do we need that? Performance? The impact should be actually trivial. It can be just anything, we identify an element by @name. On the other hand, it is very annoying to exactly specify "class" or "interface" very carefully, because if I make a mistake then the mapping results in a warning that then I have to carefully check. Just reduce such chances for errors by requiring less-error-prone XPath. It should save everyone. --- tools/generator/ApiTransform.cs | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/tools/generator/ApiTransform.cs b/tools/generator/ApiTransform.cs index 5ebd63b65..ce9c738e3 100644 --- a/tools/generator/ApiTransform.cs +++ b/tools/generator/ApiTransform.cs @@ -31,30 +31,20 @@ public void WriteTransform (StreamWriter sw) { string preserveAttr = PreserveType ? " preserveType=\"true\"" : null; + string cls = Class.StartsWith ("[Interface]", StringComparison.Ordinal) ? Class.Substring ("[Interface]".Length) : Class; + if (string.IsNullOrEmpty (Parameter)) { // This is a field - sw.WriteLine (" {3}", Package, Class, Member, Enum, preserveAttr); - - } else if (Class.StartsWith ("[Interface]") && Parameter == "return") { - // This is the return type on an interface method - sw.WriteLine (" {3}", Package, Class.Substring ("[Interface]".Length), Member, Enum, preserveAttr); - - } else if (Class.StartsWith ("[Interface]")) { - // This is the return type on an interface method - sw.WriteLine (" {4}", Package, Class.Substring ("[Interface]".Length), Member, Parameter, Enum, preserveAttr); - + sw.WriteLine (" {3}", Package, Class, Member, Enum, preserveAttr); } else if (Parameter == "return") { - // This is the return type on a class method - sw.WriteLine (" {3}", Package, Class, Member, Enum, preserveAttr); - + // This is the return type + sw.WriteLine (" {3}", Package, cls, Member, Enum, preserveAttr); } else if (Member == "ctor" || Member == "constructor") { - // This is the return type on a class constructor - sw.WriteLine (" {3}", Package, Class, Parameter, Enum, preserveAttr); - + // This is the return type + sw.WriteLine (" {3}", Package, cls, Parameter, Enum, preserveAttr); } else { - // This is a parameter on a class method - sw.WriteLine (" {4}", Package, Class, Member, Parameter, Enum, preserveAttr); - + // This is a parameter + sw.WriteLine (" {4}", Package, cls, Member, Parameter, Enum, preserveAttr); } } }