Bug 59308 - generator: support optionally not inlining optional protocol members
Summary: generator: support optionally not inlining optional protocol members
Status: CONFIRMED
Alias: None
Product: iOS
Classification: Xamarin
Component: Tools (show other bugs)
Version: master
Hardware: PC Mac OS
: --- enhancement
Target Milestone: Future Cycle (TBD)
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2017-09-07 19:57 UTC by Rolf Bjarne Kvinge [MSFT]
Modified: 2017-09-07 19:57 UTC (History)
1 user (show)

See Also:
Tags:
Is this bug a regression?: No
Last known good build:


Attachments

Description Rolf Bjarne Kvinge [MSFT] 2017-09-07 19:57:28 UTC
Scenario:

* NSItemProviderWriting is a protocol, with an optional static method ('itemProviderVisibilityForRepresentationWithTypeIdentifier:').
* Several native types declare that they implement the NSItemProviderWriting protocol (NSString, NSUrl, etc).
* If we declare that NSString implements the NSItemProviderWriting protocol, the generator will inline the optional static member from the protocol into NSString (correctly, because NSString _may_ implement the static member, from the generator's point of view).
* NSString does not implement the optional static member.
* The introspection tests complain (rightly):

    > [FAIL] Foundation.NSString : itemProviderVisibilityForRepresentationWithTypeIdentifier: 

Ideally we wouldn't be generating unusable API, which means that ideally we'd add support for telling the generator to not inline optional protocol members in certain classes. This information must be added to the class implementing the protocol, not the protocol itself (because some classes may implement optional members, some classes may not, which would be quite cumbersome to state on the protocol).

Ideas:

    interface NSString {
        [NoInline]
        [Export ("itemProviderVisibilityForRepresentationWithTypeIdentifier:")]
        NSItemProviderRepresentationVisibility GetItemProviderVisibility (string typeIdentifier);
    }

    [NoInline (typeof (NSItemProviderWriting), "+itemProviderVisibilityForRepresentationWithTypeIdentifier:")]
    interface NSString {
    }

Note You need to log in before you can comment on or make changes to this bug.