Commit 3046815
[generator] Remove androidx.annotation from Annotation names (#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.1 parent 6ab624e commit 3046815
File tree
2 files changed
+41
-2
lines changed- src/Xamarin.Android.Tools.AnnotationSupport/Objects
2 files changed
+41
-2
lines changedLines changed: 32 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
101 | 133 | | |
102 | 134 | | |
Lines changed: 9 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
10 | 14 | | |
11 | 15 | | |
12 | 16 | | |
13 | 17 | | |
14 | | - | |
15 | | - | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
16 | 21 | | |
| 22 | + | |
| 23 | + | |
17 | 24 | | |
18 | 25 | | |
19 | 26 | | |
| |||
0 commit comments