Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[generator] Remove androidx.annotation from Annotation names (dotnet#882
) Context: dotnet/android#6300 A confluence of several "funny" things happened with dotnet/android#6300, which attempts to use the Android SDK platform-tools 31.0.3 package, up from 30.0.2: 1. The new platform-tools package *removes* the file `platform-tools/api/annotations.zip`. To work around that, we need to instead use the `data/annotations.zip` file from the Android platform directory, e.g. `$ANDROID_SDK_ROOT/platforms/android-30/data/annotations.zip`. 2. Between API-28 and API-29, `annotations.zip` changes the package name used for annotations, from e.g. `android.support.annotation.RequiresPermission` to `androidx.annotation.RequiresPermission`. In isolation, okay, but then we hit: 3. `AnnotationData` *removes* the "known" package-prefix of `android.support.annotation.`, and all use of `AnnotationData.Name` is via `string.operator==`, *not* `string.Contains()` or `string.IndexOf()`. The result of all these changes together is API breakage in `Mono.Android.dll` between API-28 and API-29: …/Mono.Android.targets(257,5): error : CannotRemoveAttribute : Attribute 'Android.Runtime.RequiresPermissionAttribute' exists on 'Android.Accounts.AccountManager.AddAccount(System.String, System.String, System.String[], Android.OS.Bundle, Android.App.Activity, Android.Accounts.IAccountManagerCallback, Android.OS.Handler)' in the contract but not the implementation. Or, in C# `diff -u` terms: --- obj/Debug/monoandroid10/android-28/mcw/Android.Accounts.AccountManager.cs 2021-09-16 09:00:53.000000000 -0400 +++ obj/Debug/monoandroid10/android-29/mcw/Android.Accounts.AccountManager.cs 2021-09-16 10:41:15.000000000 -0400 @@ -217,7 +217,6 @@ // Metadata.xml XPath method reference: path="/api/package[@name='android.accounts']/class[@name='AccountManager']/method[@name='addAccount' and count(parameter)=7 and parameter[1][@type='java.lang.String'] and parameter[2][@type='java.lang.String'] and parameter[3][@type='java.lang.String[]'] and parameter[4][@type='android.os.Bundle'] and parameter[5][@type='android.app.Activity'] and parameter[6][@type='android.accounts.AccountManagerCallback<android.os.Bundle>'] and parameter[7][@type='android.os.Handler']]" [Register ("addAccount", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;", "GetAddAccount_Ljava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Landroid_os_Bundle_Landroid_app_Activity_Landroid_accounts_AccountManagerCallback_Landroid_os_Handler_Handler")] - [global::Android.Runtime.RequiresPermission ("android.permission.MANAGE_ACCOUNTS")] public virtual unsafe Android.Accounts.IAccountManagerFuture? AddAccount (string? accountType, string? authTokenType, string[]? requiredFeatures, Android.OS.Bundle? addAccountOptions, Android.App.Activity? activity, Android.Accounts.IAccountManagerCallback? @callback, Android.OS.Handler? handler) { const string __id = "addAccount.(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"; Fix this breakage by updating `AnnotationData` to remove the package name for `androidx.annotation` as well. Additionally, add an `AnnotatedItem.ToString()` override to simplify future printf-style debugging.
- Loading branch information