Description
When the <attr/>
element is used to update managedType
, the new value should be used to determine if the method that the parameter is one is overrides
a base class method or is instead a new virtual
method.
See: #586 (comment)
That said, the other problem is that we shouldn't need an <attr/>
to update managedType
in the first place. This itself is a bug, but I'm less certain how to describe it, other than an issue seemingly related to "contravariant method parameters due to the use of Java generics".
-- original report follows --
Problem
Changing type
(java) with managed FQCVlassName works:
<attr path="/api/package[@name='androidx.leanback.preference']/class[@name='LeanbackListPreferenceDialogFragment.AdapterMulti']/method[@name='onBindViewHolder']/parameter[1]" name="type">AndroidX.RecyclerView.Widget.RecyclerView.ViewHolder</attr>
<attr path="/api/package[@name='androidx.leanback.preference']/class[@name='LeanbackListPreferenceDialogFragment.AdapterSingle']/method[@name='onBindViewHolder']/parameter[1]" name="type">AndroidX.RecyclerView.Widget.RecyclerView.ViewHolder</attr>
while changing managedType
causes build errors (does not change managed type):
<attr
path="/api/package[@name='androidx.leanback.preference']/class[@name='LeanbackListPreferenceDialogFragment.AdapterMulti']/method[@name='onBindViewHolder']/parameter[1]"
name="managedType"
>
AndroidX.RecyclerView.Widget.RecyclerView.ViewHolder</attr>
<attr
path="/api/package[@name='androidx.leanback.preference']/class[@name='LeanbackListPreferenceDialogFragment.AdapterSingle']/method[@name='onBindViewHolder']/parameter[1]"
name="managedType"
>
AndroidX.RecyclerView.Widget.RecyclerView.ViewHolder
</attr>
Errors:
generated/androidx.leanback.leanback-preference/obj/Debug/monoandroid90/generated/src/AndroidX.Leanback.Preference.LeanbackListPreferenceDialogFragment.cs(24,24):
Error CS0534:
'LeanbackListPreferenceDialogFragment.AdapterMulti'
does not implement inherited abstract member
'RecyclerView.Adapter.OnBindViewHolder(RecyclerView.ViewHolder, int)'
generated/androidx.leanback.leanback-preference/obj/Debug/monoandroid90/generated/src/AndroidX.Leanback.Preference.LeanbackListPreferenceDialogFragment.cs(24,24):
Error CS0534:
'LeanbackListPreferenceDialogFragment.AdapterSingle'
does not implement inherited abstract member
'RecyclerView.Adapter.OnBindViewHolder(RecyclerView.ViewHolder, int)'
References Links
Solution (minimal repro) is zipped/archived in:
https://github.com/moljac/Samples.AndroidX/blob/master/source/bindings/type-vs-managedType.zip
api.xml
https://github.com/moljac/Samples.AndroidX/blob/master/source/bindings/type-vs-managedType/api.xml