Skip to content

Commit 00ad8d6

Browse files
atsushienojonpryor
authored andcommitted
[api-xml-adjuster] generate type parameters in <constructor>. (#203)
Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=59770 This should be part or all of fixing bug #59770.
1 parent 59a90c4 commit 00ad8d6

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ static void Save (this JavaField field, XmlWriter writer)
138138

139139
static void Save (this JavaConstructor ctor, XmlWriter writer)
140140
{
141-
SaveCommon (ctor, writer, "constructor", null, null, null, null, null, ctor.Type ?? ctor.Parent.FullName, null, null, null, null, ctor.Parameters, ctor.Exceptions);
141+
SaveCommon (ctor, writer, "constructor", null, null, null, null, null, ctor.Type ?? ctor.Parent.FullName, null, null, null, ctor.TypeParameters, ctor.Parameters, ctor.Exceptions);
142142
}
143143

144144
static void Save (this JavaMethod method, XmlWriter writer)

src/Xamarin.Android.Tools.ApiXmlAdjuster/Tests/OverrideMarkerTest.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,41 @@ public void AncestralOverrides ()
5757
var m = t.Members.OfType<JavaMethod> ().First (_ => _.Name == "addContentView");
5858
Assert.IsNotNull (m.BaseMethod, "base method not found");
5959
}
60+
61+
[Test]
62+
public void GenericConstructors ()
63+
{
64+
string xml = @"<api>
65+
<package name='XXX'>
66+
<class abstract='true' deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public'>
67+
<constructor deprecated='not deprecated' final='false' name='GenericConstructors' static='false' visibility='public'>
68+
<typeParameters>
69+
<typeParameter name='E' interfaceBounds='' jni-interfaceBounds='' />
70+
</typeParameters>
71+
<parameter name = 'e' type='E' jni-type='TE;'>
72+
</parameter>
73+
</constructor>
74+
</class>
75+
</package>
76+
</api>";
77+
var xapi = new JavaApi ();
78+
using (var xr = XmlReader.Create (new StringReader (xml)))
79+
xapi.Load (xr, false);
80+
xapi.StripNonBindables ();
81+
xapi.Resolve ();
82+
xapi.CreateGenericInheritanceMapping ();
83+
xapi.MarkOverrides ();
84+
xapi.FindDefects ();
85+
var sw = new StringWriter ();
86+
using (var xw = XmlWriter.Create (sw))
87+
xapi.Save (xw);
88+
xapi = new JavaApi ();
89+
using (var xr = XmlReader.Create (new StringReader (sw.ToString ())))
90+
xapi.Load (xr, true);
91+
var t = xapi.Packages.First (_ => _.Name == "XXX").Types.First (_ => _.Name == "GenericConstructors");
92+
var m = t.Members.OfType<JavaConstructor> ().FirstOrDefault ();
93+
Assert.IsNotNull (m.TypeParameters, "constructor not found");
94+
}
6095
}
6196
}
6297

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class XmlUtil
1111
static string GetLocation (XmlReader reader)
1212
{
1313
var li = reader as IXmlLineInfo;
14-
return string.Format ("{0} ({1},{2})", new Uri (reader.BaseURI).LocalPath, li.LineNumber, li.LinePosition);
14+
return string.Format ("{0} ({1},{2})", string.IsNullOrEmpty (reader.BaseURI) ? null : new Uri (reader.BaseURI).LocalPath, li.LineNumber, li.LinePosition);
1515
}
1616

1717
public static Exception UnexpectedElementOrContent (string elementName, XmlReader reader, params string [] expected)

0 commit comments

Comments
 (0)