-
Notifications
You must be signed in to change notification settings - Fork 564
Fixing acceptable breakages file after set error=true on obsolete items #4248
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
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
937be38 to
8b9faad
Compare
jonpryor
reviewed
Feb 11, 2020
Comment on lines
1273
to
1274
| CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Widget.ViewFlipper.FlipInterval.get()' changed from '[RegisterAttribute("getFlipInterval", "()I", "GetGetFlipIntervalHandler")]' in the contract to '[RegisterAttribute("getFlipInterval", "()I", "GetGetFlipIntervalHandler", ApiSince=29)]' in the implementation. No newline at end of file | ||
| CannotChangeAttribute : Attribute 'Android.Runtime.RegisterAttribute' on 'Android.Widget.ViewFlipper.FlipInterval.get()' changed from '[RegisterAttribute("getFlipInterval", "()I", "GetGetFlipIntervalHandler")]' in the contract to '[RegisterAttribute("getFlipInterval", "()I", "GetGetFlipIntervalHandler", ApiSince=29)]' in the implementation. |
Contributor
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.
What changed here? These appear the same to me.
07861f4 to
eac90a5
Compare
jonpryor
pushed a commit
to dotnet/java-interop
that referenced
this pull request
Feb 12, 2020
Context: #509 Context: dotnet/android#4248 We are generating fields that have been marked as `[Obsolete]` for a long time. In the effort to remove all fields that now we believe should not be part of our API, we are marking them as `[Obsolete(..., error:true)]` so we can remove them in a future release. Here are some scenarios these changes are addressing: We should `[Obsolete(error:true)]` *fields* on "interface proxy" types such as [`Android.Content.ComponentCallbacks2`][0], which contains fields for the [`android.content.ComponentCallbacks2`][1] interface and lives "alongside" the [Android.Content.IComponentCallbacks2][2] interface. Additionally, all of these fields should *eventually* be moved into the appropriate C# interface via Default Interface Members, e.g. every field within `Android.Content.ComponentCallbacks2` should *instead* reside in the `Android.Content.IComponentCallbacks2` type. TODO: * We should `[Obsolete(error:true)]` the interface proxy types themselves. * We also `[Obsolete(error:true)]` all of the nested `InterfaceConsts` types, such as `Android.OS.Binder.InterfaceConsts`. * We should also `[Obsolete(error:true)]` all members which are already [Obsolete]. [0]: https://docs.microsoft.com/en-us/dotnet/api/android.content.componentcallbacks2?view=xamarin-android-sdk-9 [1]: https://developer.android.com/reference/android/content/ComponentCallbacks2 [2]: https://docs.microsoft.com/en-us/dotnet/api/android.content.icomponentcallbacks2?view=xamarin-android-sdk-9
eac90a5 to
72a1c7c
Compare
72a1c7c to
73a88eb
Compare
Contributor
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
Contributor
|
Please remove the |
Contributor
|
👍 Removed submodule. |
Contributor
|
Squash-and-merge "title": Squash-and-merge "body": |
jonpryor
reviewed
Feb 19, 2020
jonpryor
pushed a commit
to dotnet/java-interop
that referenced
this pull request
Feb 19, 2020
Context: #509 Context: dotnet/android#4248 We are generating fields that have been marked as `[Obsolete]` for a long time. In the effort to remove all fields that now we believe should not be part of our API, we are marking them as `[Obsolete(..., error:true)]` so we can remove them in a future release. Here are some scenarios these changes are addressing: We should `[Obsolete(error:true)]` *fields* on "interface proxy" types such as [`Android.Content.ComponentCallbacks2`][0], which contains fields for the [`android.content.ComponentCallbacks2`][1] interface and lives "alongside" the [Android.Content.IComponentCallbacks2][2] interface. Additionally, all of these fields should *eventually* be moved into the appropriate C# interface via Default Interface Members, e.g. every field within `Android.Content.ComponentCallbacks2` should *instead* reside in the `Android.Content.IComponentCallbacks2` type. TODO: * We should `[Obsolete(error:true)]` the interface proxy types themselves. * We also `[Obsolete(error:true)]` all of the nested `InterfaceConsts` types, such as `Android.OS.Binder.InterfaceConsts`. * We should also `[Obsolete(error:true)]` all members which are already [Obsolete]. [0]: https://docs.microsoft.com/en-us/dotnet/api/android.content.componentcallbacks2?view=xamarin-android-sdk-9 [1]: https://developer.android.com/reference/android/content/ComponentCallbacks2 [2]: https://docs.microsoft.com/en-us/dotnet/api/android.content.icomponentcallbacks2?view=xamarin-android-sdk-9
jonpryor
pushed a commit
that referenced
this pull request
Feb 19, 2020
Context: dotnet/java-interop@8f30933 Changes: dotnet/java-interop@423e27f...fefe0ca * dotnet/java-interop@fefe0ca: [generator] Mark some Obsolete fields as errors (#568) * dotnet/java-interop@d969a0c: [generator] Change protected members in final class to private (#569) * dotnet/java-interop@3c4accf: [generator] Be smarter about when members with same names need "new" (#567) * dotnet/java-interop@41b87d0: [generator] Ensure property setter parameter name is "value" (#566) This Java.Interop bump includes two changes which "break" API: * Certain fields are changed from `[Obsolete]` to `[Obsolete(error:true)]`, turning *use* of the field within C# code into a CS0619 error. * The C# compiler has long warned about the presence of `protected` members within `sealed` types, as they cannot be used. However, they were still emitted, resulting in CS0628 warnings when compiling `Mono.Android.dll`. We consider changing `[Obsolete]` to `[Obsolete(error:true)]` to be acceptable because this is being done to `const` fields, so this won't break ABI, as there are no IL references to `const` fields, and because (1) there are "replacement" members which can be used, and (2) these fields have been obsolete for *years*. The "problem" here is that `Microsoft.DotNet.ApiCompat.exe`, which the `<CheckApiCompatibility/>` task uses from `src/Mono.Android/Mono.Android.targets`, sees every such change as an API break. This in and of itself is plausibly sensible, but the error message *itself* is bananas, e.g.: namespace Android.AccessibilityServices { public abstract partial class AccessibilityService : Android.App.Service { [Register ("GESTURE_SWIPE_DOWN", ApiSince = 16)] [Obsolete ("This constant will be removed in the future version. Use Android.AccessibilityServices.AccessibilityGesture enum directly instead of this field.", error: true)] public const Android.AccessibilityServices.AccessibilityGesture GestureSwipeDown = (Android.AccessibilityServices.AccessibilityGesture) 2; } } results in: CannotRemoveAttribute : Attribute 'System.ObsoleteAttribute' exists on 'Android.AccessibilityServices.AccessibilityGesture Android.AccessibilityServices.AccessibilityService.GestureSwipeDown' in the contract but not the implementation. The message implies that `[Obsolete]` was removed, which isn't strictly true! `[Obsolete]` is still there! It's just that the constructor parameters have changed. This results in a ginormous change to `tests/api-compatibility/acceptable-breakages-vReference.txt`. The "`protected` members within `sealed` types" fix for CS0628 also resulted in errors from the Tests > API Compatibility job, which runs via `external/xamarin-android-api-compatibility`. Given that commit 07e7477 was intended to *replace* the Tests > API Compatibility job, *remove* the `external/xamarin-android-api-compatibility` submodule reference. We will no longer be using that submodule for API compat checks. Co-authored-by: Jonathan Pobst <monkey@jpobst.com>
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We are marking as obsolete error all const fields that already have an enum and related interfaceconsts.
Reference: dotnet/java-interop#568
Additionally this remove the
API Compatibilityjob from our build pipeline YAML. This step has been superseded by the api checker added in #3884.