-
Notifications
You must be signed in to change notification settings - Fork 507
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
[bgen] Fix support for ErrorDomain enums in third-party bindings. #20499
[bgen] Fix support for ErrorDomain enums in third-party bindings. #20499
Conversation
The generator needs a library name for the generated `_domain` field. Here's an example for the generated `ARErrorCodeExtensions` class ("ARKit" is the library name): ```cs [Field ("ARErrorDomain", "ARKit")] static NSString? _domain; ``` In order to find the library name, the generator would look at the first enum field with a `[Field]` attribute, and get the `LibraryName` property from that `[Field]` attribute. Unfortunately error enums don't necessarily have `[Field]` attributes on their enum fields. This works fine for our own bindings, because the generator will fall back to the enum's namespace, but for third-party bindings this would be the result: > error BI1042: bgen: Missing '[Field (LibraryName=value)]' for ErrorDomainNS.EWithDomain. (e.g."__Internal") Note that the error message is rather confusing: it's trying to report a missing `LibraryName` property for a `[Field]` attribute, but there's no `[Field]` attribute anywhere in the enum in question. So fix this by: * Adding the `LibraryName` property on the `[ErrorDomain]` attribute. * Implement support for looking at this new property in the generator. * Report a better error if it's not there.
💻 [PR Build] Tests on macOS X64 - Mac Sonoma (14) passed 💻✅ All tests on macOS X64 - Mac Sonoma (14) passed. Pipeline on Agent |
📚 [PR Build] Artifacts 📚Packages generatedView packagesPipeline on Agent |
💻 [PR Build] Tests on macOS M1 - Mac Monterey (12) passed 💻✅ All tests on macOS M1 - Mac Monterey (12) passed. Pipeline on Agent |
💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11) passed 💻✅ All tests on macOS M1 - Mac Big Sur (11) passed. Pipeline on Agent |
💻 [PR Build] Tests on macOS M1 - Mac Ventura (13) passed 💻✅ All tests on macOS M1 - Mac Ventura (13) passed. Pipeline on Agent |
❌ [CI Build] Windows Integration Tests failed ❌❌ Failed ❌ Pipeline on Agent |
✅ API diff for current PR / commitLegacy Xamarin (No breaking changes)
NET (empty diffs)
✅ API diff vs stableLegacy Xamarin (No breaking changes).NET (No breaking changes)ℹ️ Generator diffGenerator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes) Pipeline on Agent |
🚀 [CI Build] Test results 🚀Test results✅ All tests passed on VSTS: test results. 🎉 All 170 tests passed 🎉 Tests counts✅ cecil: All 1 tests passed. Html Report (VSDrops) Download Pipeline on Agent |
Test failure is unrelated (#20117). |
The generator needs a library name for the generated
_domain
field.Here's an example for the generated
ARErrorCodeExtensions
class ("ARKit" isthe library name):
In order to find the library name, the generator would look at the first enum
field with a
[Field]
attribute, and get theLibraryName
property from that[Field]
attribute. Unfortunately error enums don't necessarily have[Field]
attributes on their enum fields. This works fine for our own bindings, because
the generator will fall back to the enum's namespace, but for third-party
bindings this would be the result:
Note that the error message is rather confusing: it's trying to report a
missing
LibraryName
property for a[Field]
attribute, but there's no[Field]
attribute anywhere in the enum in question.
So fix this by:
LibraryName
property on the[ErrorDomain]
attribute.