Skip to content

Commit aa21ec9

Browse files
atsushienojonpryor
authored andcommitted
[api-xml-adjuster] reduce extraneous override marking. (#85)
It was running override marking step on the same object as many times as it is inherited (say, java.lang.Object was inspected for N times by N types in a library...). There isn't a huge amount of perf. improvements, but as far as I tried with api-[10..24].xml.in generation locally, the results were like: old: real 0m55.898s user 0m55.508s sys 0m0.336s new: real 0m53.326s user 0m52.552s sys 0m0.692s
1 parent 21309fe commit aa21ec9

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

src/Xamarin.Android.Tools.ApiXmlAdjuster/JavaApiOverrideMarkerExtensions.cs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,30 @@ namespace Xamarin.Android.Tools.ApiXmlAdjuster
66
{
77
public static class JavaApiOverrideMarkerExtensions
88
{
9-
9+
1010
public static void MarkOverrides (this JavaApi api)
11+
{
12+
api.MarkOverrides (new HashSet<JavaClass> ());
13+
}
14+
15+
public static void MarkOverrides (this JavaApi api, HashSet<JavaClass> doneList)
1116
{
1217
foreach (var kls in api.Packages.SelectMany (p => p.Types).OfType<JavaClass> ())
13-
kls.MarkOverrides ();
18+
kls.MarkOverrides (doneList);
1419
}
1520

16-
static void MarkOverrides (this JavaClass cls)
21+
static void MarkOverrides (this JavaClass cls, HashSet<JavaClass> doneList)
1722
{
23+
if (doneList.Contains (cls))
24+
return;
25+
doneList.Add (cls);
26+
1827
var baseClass = cls.ResolvedExtends == null ? null :cls.ResolvedExtends.ReferencedType as JavaClass;
1928
if (baseClass != null)
20-
baseClass.MarkOverrides ();
29+
baseClass.MarkOverrides (doneList);
2130

2231
foreach (var method in cls.Members.OfType<JavaMethod> ())
2332
cls.MarkBaseMethod (method);
24-
/*
25-
foreach (var m in cls.Members.OfType<JavaMethod> ().Where (_ => _.BaseMethod != null)) {
26-
var b = m.BaseMethod.Method;
27-
if (m.ExtendedJniSignature != b.ExtendedJniSignature)
28-
Console.WriteLine ("Method {0}.{1}#{2}({3}) | {8}\n overrides {4}.{5}#{6}({7}) | {9}",
29-
m.Parent.Parent.Name, m.Parent.Name, m.Name, string.Join (", ", m.Parameters.Select (p => p.Type)),
30-
b.Parent.Parent.Name, b.Parent.Name, b.Name, string.Join (", ", b.Parameters.Select (p => p.Type)),
31-
m.ExtendedJniSignature, b.ExtendedJniSignature);
32-
}
33-
foreach (var m in cls.Members.OfType<JavaMethod> ())
34-
foreach (var para in m.Parameters.Where (p => p.InstantiatedGenericArgumentName != null))
35-
Console.WriteLine ("Method {0}.{1}#{2}({3}) has generics-instantiated parameter {4} ({5} -> {6})",
36-
m.Parent.Parent.Name, m.Parent.Name, m.Name, string.Join (", ", m.Parameters.Select (p => p.Type)),
37-
para.Name, para.InstantiatedGenericArgumentName, para.Type);
38-
*/
3933
}
4034

4135
static void MarkBaseMethod (this JavaClass cls, JavaMethod method)

0 commit comments

Comments
 (0)