Skip to content

Commit 3f12cd2

Browse files
committed
Revert "[generator] Remove androidx.annotation from Annotation names (dotnet#882)"
Partially revert commit 1e8f513. Context: dotnet#885 The problem with commit 1e8f513 is that the change to the `AnnotationData` constructor broke the xamarin-android build, introducing API Compatibility errors in `Mono.Android.dll`: …/src/Mono.Android/Mono.Android.targets(247,5): error : CompatApi command: $HOME/.nuget/packages/microsoft.dotnet.apicompat/5.0.0-beta.20181.7/tools/net472/Microsoft.DotNet.ApiCompat.exe "…/bin/Debug/lib/xamarin.android/xbuild-frameworks/MonoAndroid/v4.4.87/Mono.Android.dll" -i "…/bin/Debug/lib/xamarin.android/xbuild-frameworks/MonoAndroid/v5.0" --allow-default-interface-methods --baseline "…/tests/api-compatibility/acceptable-breakages-v5.0.txt" --validate-baseline --exclude-attributes "…/tests/api-compatibility/api-compat-exclude-attributes.txt" …/src/Mono.Android/Mono.Android.targets(247,5): error : CheckApiCompatibility found nonacceptable Api breakages for ApiLevel: v5.0. …/src/Mono.Android/Mono.Android.targets(247,5): error : Compat issues with assembly Mono.Android: …/src/Mono.Android/Mono.Android.targets(247,5): error : CannotChangeAttribute : Attribute 'Android.Runtime.RequiresPermissionAttribute' on 'Android.Net.ConnectivityManager.GetNetworkInfo(Android.Net.ConnectivityType)' changed from '[RequiresPermissionAttribute("quot;android.permission.ACCESS_NETWORK_STATE&quot")]' in the contract to '[RequiresPermissionAttribute("quot;android.permission.ACCESS_NETWORK_STATE&quot")]' in the implementation. …/src/Mono.Android/Mono.Android.targets(247,5): error : CannotChangeAttribute : Attribute 'Android.Runtime.RequiresPermissionAttribute' on 'Android.OS.Vibrator.Vibrate(System.Int64[], System.Int32)' changed from '[RequiresPermissionAttribute("quot;android.permission.VIBRATE&quot")]' in the contract to '[RequiresPermissionAttribute("quot;android.permission.VIBRATE&quot")]' in the implementation. …/src/Mono.Android/Mono.Android.targets(247,5): error : Total Issues: 2 See Issue dotnet#885 for more details and discussion. TL;DR: 1e8f513 allowed `androidx.annotation.RequiresPermission` to be surfaced as `[Android.Runtime.RequiresPermission]` custom attributes, and in doing so surfaced a pre-existing issue wherein the same `[RequiresPermission]` could be present multiple times with the same constructor values, which typically isn't desirable: namespace Android.OS { public abstract partial class Vibrator : Java.Lang.Object { [global::Android.Runtime.RequiresPermission ("quot;android.permission.VIBRATE&quot")] [global::Android.Runtime.RequiresPermission ("quot;android.permission.VIBRATE&quot")] public abstract void Vibrate (long milliseconds); } } How and why this is happening isn't currently understood. In the meantime, revert the `AnnotationData` changes in commit 1e8f513 so that we can bump Java.Interop within xamarin-android.
1 parent b37a647 commit 3f12cd2

File tree

1 file changed

+2
-9
lines changed

1 file changed

+2
-9
lines changed

src/Xamarin.Android.Tools.AnnotationSupport/Objects/AnnotationData.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,13 @@ namespace Xamarin.AndroidTools.AnnotationSupport
77
{
88
public class AnnotationData : AnnotationObject
99
{
10-
static readonly string[] Prefixes = new[] {
11-
"android.support.annotation.",
12-
"androidx.annotation.",
13-
};
1410
public AnnotationData (XElement e)
1511
{
1612
var a = e.Attribute ("name");
1713
Name = a == null ? null : a.Value;
18-
foreach (var predef in Prefixes) {
19-
if (!Name.StartsWith (predef, StringComparison.Ordinal))
20-
continue;
14+
string predef = "android.support.annotation.";
15+
if (Name.StartsWith (predef, StringComparison.Ordinal))
2116
Name = Name.Substring (predef.Length);
22-
break;
23-
}
2417
Values = e.Elements ("val").Select (c => new AnnotationValue (c)).ToArray ();
2518
}
2619

0 commit comments

Comments
 (0)