-
Notifications
You must be signed in to change notification settings - Fork 520
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[generator] Do not generate PlatformNotSupportedException in chaining .ctor #7085
Conversation
… .ctor Types that are new in 64bits only OS are generated differently on 32bits bindings. They mainly throw a `PlatformNotSupportedException` so it's easier to diagnose (than a crash) what's happening at runtime. This works well in all cases except one. When a new type, let's say `UIMenuElement` is added **and** serves as a new base type for existing types. `UIKeyCommand` (iOS 7) -> `UICommand` (iOS 13)-> `UIMenuElement` (iOS 13) This is _correct_ as new base types can be added (in ObjC and C#). However the generated code for the constructors of `UICommand` and `UIMenuElement` would be throwing a `PlatformNotSupportedException` which breaks the `UIKeyCommand` on 32 bits devices. We fixed this in a few places by tweaking the availability attribute but that requires spotting the new base type while doing bindings and that is error prone [1][2]. This PR simply does let the `protected` constructor, using when chaining, be generated normally. It's simpler and will cover all the cases (without requiring hacks in the availability of those types) [1] dotnet#7083 [2] dotnet#7084
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❤️ test
Build failure Test results7 tests failed, 81 tests passed.Failed tests
|
Build success |
@monojenkins backport to master |
… .ctor (dotnet#7085) Types that are new in 64bits only OS are generated differently on 32bits bindings. They mainly throw a `PlatformNotSupportedException` so it's easier to diagnose (than a crash) what's happening at runtime. This works well in all cases except one. When a new type, let's say `UIMenuElement` is added **and** serves as a new base type for existing types. `UIKeyCommand` (iOS 7) -> `UICommand` (iOS 13)-> `UIMenuElement` (iOS 13) This is _correct_ as new base types can be added (in ObjC and C#). However the generated code for the constructors of `UICommand` and `UIMenuElement` would be throwing a `PlatformNotSupportedException` which breaks the `UIKeyCommand` on 32 bits devices. We fixed this in a few places by tweaking the availability attribute but that requires spotting the new base type while doing bindings and that is error prone [1][2]. This PR simply does let the `protected` constructor, using when chaining, be generated normally. It's simpler and will cover all the cases (without requiring hacks in the availability of those types) [1] dotnet#7083 [2] dotnet#7084
Types that are new in 64bits only OS are generated differently on 32bits
bindings. They mainly throw a
PlatformNotSupportedException
so it'seasier to diagnose (than a crash) what's happening at runtime.
This works well in all cases except one. When a new type, let's say
UIMenuElement
is added and serves as a new base type for existingtypes.
UIKeyCommand
(iOS 7) ->UICommand
(iOS 13)->UIMenuElement
(iOS 13)This is correct as new base types can be added (in ObjC and C#).
However the generated code for the constructors of
UICommand
andUIMenuElement
would be throwing aPlatformNotSupportedException
which breaks the
UIKeyCommand
on 32 bits devices.We fixed this in a few places by tweaking the availability attribute
but that requires spotting the new base type while doing bindings and
that is error prone [1][2].
This PR simply does let the
protected
constructor, using when chaining,be generated normally. It's simpler and will cover all the cases (without
requiring hacks in the availability of those types)
[1] #7083
[2] #7084