Open
Description
Context: https://developercommunity.visualstudio.com/t/I-am-using-the-Maui-class-library-to-imp/10579664
When the binding of a method collides with a nested type, we prefix the method name with Invoke
:
We don't appear to have any equivalent behavior when a field name collides with a nested type or property. This can result in CS0102 errors.
For example, consider the wechat-sdk-android-6.8.26.aar library. When we try to bind this, it fails:
obj/Debug/net8.0-android/generated/src/Com.Tencent.MM.Opensdk.Modelbase.BaseResp.cs(24,14): error CS0102: The type 'BaseResp' already contains a definition for 'ErrCode'
obj/Debug/net8.0-android/generated/src/Com.Tencent.MM.Opensdk.Modelmsg.WXMediaMessage.cs(54,79): error CS0102: The type 'WXMediaMessage' already contains a definition for 'MediaObject'
Relevant context:
abstract partial class BaseRep {
// Metadata.xml XPath field reference: path="/api/package[@name='com.tencent.mm.opensdk.modelbase']/class[@name='BaseResp']/field[@name='errCode']"
[Register ("errCode")]
// line 24 follows
public int ErrCode { … }
public abstract partial class ErrCode : Java.Lang.Object {
}
}
partial class WXMediaMessage {
// Metadata.xml XPath field reference: path="/api/package[@name='com.tencent.mm.opensdk.modelmsg']/class[@name='WXMediaMessage']/field[@name='mediaObject']"
[Register ("mediaObject")]
// line 54 follows
public IMediaObject? MediaObject { … }
partial class MediaObject : Java.Lang.Object {
}
}
If we had automagic renaming of fields names so that they wouldn't collide with nested types, as we do with methods, this library would have been bindable without Metadata.
Metadata which allows the library to build:
<metadata>
<attr
path="/api/package[@name='com.tencent.mm.opensdk.modelbase']/class[@name='BaseResp']/field[@name='errCode']"
name="managedName"
>ErrorCode</attr>
<attr
path="/api/package[@name='com.tencent.mm.opensdk.modelmsg']/class[@name='WXMediaMessage']/field[@name='mediaObject']"
name="managedName"
>MediaObjectField</attr>
</metadata>