Skip to content
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

Bump to xamarin-android-api-compatibility/master/9cfa6cc9 #1078

Closed
wants to merge 1 commit into from

Conversation

jonpryor
Copy link
Member

@jonpryor jonpryor commented Dec 6, 2017

We found that xamarin-android-api-compatibility wasn't actually
performing the inter-API-level checks, meaning an important API
compatibility check wasn't being performed.

Bump to xamarin-android-api-compatibility/9cfa6cc9 so that
inter-API-level checks are properly performed.

@jonpryor jonpryor requested a review from atsushieno December 6, 2017 22:25
@jonpryor jonpryor added full-mono-integration-build For PRs; run a full build (~6-10h for mono bumps), not the faster PR subset (~2h for mono bumps) Area: xamarin-android Build Issues building the xamarin-android repo *itself*. labels Dec 6, 2017
@jonpryor
Copy link
Member Author

jonpryor commented Dec 6, 2017

@atsushieno: I'm not sure why android/view/animation/Transformation.TYPE_ALPHA was changed from -1 to 19 in commit a301764; how was that determination made?

Is there anything else that should be re-investigated for consistency? (Meaning, how confident are we that only the Transformation.TYPE_* members were erroneously enumified in API-19+?)

@atsushieno
Copy link
Contributor

That is a bad sign, I'll take a look. They are automatically generated so if such a problem exists then there could be issues on other enums.

Are there any difference between xamarin-android and monodroid on API compatibility tests?

@atsushieno
Copy link
Contributor

(And the changes themselves here won't be applied, because they are automatically generated.)

@atsushieno
Copy link
Contributor

The fun fact: those constants were actually NOT constants until API Level 18(!)

They became constants since API Level 19. Therefore they are egarded as new in API Level 19. And technically it is possible that each device has different values for those non-final static fields.

What would we like to deal with them? My suggestion is just throw away possibility on having different values for those non-constant fields and treat them as constants. That will need some special trick or manual constant-ification work.

It matches your currently suggested changes, but you may have different opinion now that the situation became clearer.

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

What would we like to deal with them? My suggestion is just throw away possibility on having different values for those non-constant fields and treat them as constants

Sounds good to me; API-18 is 0.9% of the Google Play Store market.

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

Unfortunately, that's only the beginnings. This PR also updates xamarin-android-api-compatibility to actually run the inter-API-level differences. The results are not pretty:

<h1>### API BREAK BETWEEN v2.3 and v4.0.3</h1>
<!-- start namespace Android.Preferences --> <div> 
<h2>Namespace Android.Preferences</h2>
<!-- start type CheckBoxPreference --> <div>
<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

</div> <!-- end type CheckBoxPreference -->

</div> <!-- end namespace Android.Preferences -->
<!-- start namespace Android.Text --> <div> 
<h2>Namespace Android.Text</h2>
<!-- start type ClipboardManager --> <div>
<h3>Type Changed: Android.Text.ClipboardManager</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasText { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Java.Lang.ICharSequence TextFormatted { get; set; }
</div></pre>

</div> <!-- end type ClipboardManager -->

</div> <!-- end namespace Android.Text -->
<!-- start namespace Android.Text.Method --> <div> 
<h2>Namespace Android.Text.Method</h2>
<!-- start type ArrowKeyMovementMethod --> <div>
<h3>Type Changed: Android.Text.Method.ArrowKeyMovementMethod</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Text.Method.BaseMovementMethod</span>

</div> <!-- end type ArrowKeyMovementMethod -->
<!-- start type ScrollingMovementMethod --> <div>
<h3>Type Changed: Android.Text.Method.ScrollingMovementMethod</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Text.Method.BaseMovementMethod</span>

</div> <!-- end type ScrollingMovementMethod -->

</div> <!-- end namespace Android.Text.Method -->
<!-- start namespace Android.Views --> <div> 
<h2>Namespace Android.Views</h2>
<!-- start type InputEvent --> <div>
<h3>Type Changed: Android.Views.InputEvent</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }
</div></pre>

</div> <!-- end type InputEvent -->

</div> <!-- end namespace Android.Views -->
<!-- start namespace Android.Views.Accessibility --> <div> 
<h2>Namespace Android.Views.Accessibility</h2>
<!-- start type AccessibilityEvent --> <div>
<h3>Type Changed: Android.Views.Accessibility.AccessibilityEvent</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Accessibility.AccessibilityRecord</span>

</div> <!-- end type AccessibilityEvent -->

</div> <!-- end namespace Android.Views.Accessibility -->
<!-- start namespace Dalvik.SystemInterop --> <div> 
<h2>Namespace Dalvik.SystemInterop</h2>
<!-- start type DexClassLoader --> <div>
<h3>Type Changed: Dalvik.SystemInterop.DexClassLoader</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.ClassLoader</span> <span class='added '>Dalvik.SystemInterop.BaseDexClassLoader</span>

</div> <!-- end type DexClassLoader -->
<!-- start type PathClassLoader --> <div>
<h3>Type Changed: Dalvik.SystemInterop.PathClassLoader</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.ClassLoader</span> <span class='added '>Dalvik.SystemInterop.BaseDexClassLoader</span>

</div> <!-- end type PathClassLoader -->

</div> <!-- end namespace Dalvik.SystemInterop -->
# reading extras from: inter-api-extra-v4.0.3-v4.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.0.3/Mono.Android.xml" "inter-apis/v4.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking -r 'public bool FitsSystemWindows \(\);'
<h1>### API BREAK BETWEEN v4.0.3 and v4.1</h1>
<!-- start namespace Android.OS --> <div> 
<h2>Namespace Android.OS</h2>
<!-- start type Vibrator --> <div>
<h3>Type Changed: Android.OS.Vibrator</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasVibrator { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Cancel ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Vibrate (long milliseconds)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Vibrate (long[] pattern, int repeat)
</div></pre>

</div> <!-- end type Vibrator -->

</div> <!-- end namespace Android.OS -->
# reading extras from: inter-api-extra-v4.1-v4.2.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.1/Mono.Android.xml" "inter-apis/v4.2/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.2-v4.3.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.2/Mono.Android.xml" "inter-apis/v4.3/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v4.2 and v4.3</h1>
<!-- start namespace Android.Views.Animations --> <div> 
<h2>Namespace Android.Views.Animations</h2>
<!-- start type Transformation --> <div>
<h3>Type Changed: Android.Views.Animations.Transformation</h3>
<p>Removed properties:</p>

<pre>
	<span class='removed removed-property breaking' data-is-breaking>public static int TypeAlpha { get; set; }</span>
	<span class='removed removed-property breaking' data-is-breaking>public static int TypeBoth { get; set; }</span>
	<span class='removed removed-property breaking' data-is-breaking>public static int TypeIdentity { get; set; }</span>
	<span class='removed removed-property breaking' data-is-breaking>public static int TypeMatrix { get; set; }</span>
</pre>

</div> <!-- end type Transformation -->

</div> <!-- end namespace Android.Views.Animations -->
# reading extras from: inter-api-extra-v4.3-v4.4.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.3/Mono.Android.xml" "inter-apis/v4.4/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.4-v4.4.87.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.4/Mono.Android.xml" "inter-apis/v4.4.87/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.4.87-v5.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.4.87/Mono.Android.xml" "inter-apis/v5.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v5.0-v5.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v5.0/Mono.Android.xml" "inter-apis/v5.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v5.0 and v5.1</h1>
<!-- start namespace Android.Views.Animations --> <div> 
<h2>Namespace Android.Views.Animations</h2>
<!-- start type AccelerateDecelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AccelerateDecelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AccelerateDecelerateInterpolator -->
<!-- start type AccelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AccelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AccelerateInterpolator -->
<!-- start type AnticipateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AnticipateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AnticipateInterpolator -->
<!-- start type AnticipateOvershootInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AnticipateOvershootInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AnticipateOvershootInterpolator -->
<!-- start type BounceInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.BounceInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type BounceInterpolator -->
<!-- start type CycleInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.CycleInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type CycleInterpolator -->
<!-- start type DecelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.DecelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type DecelerateInterpolator -->
<!-- start type LinearInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.LinearInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type LinearInterpolator -->
<!-- start type OvershootInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.OvershootInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type OvershootInterpolator -->
<!-- start type PathInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.PathInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type PathInterpolator -->

</div> <!-- end namespace Android.Views.Animations -->
<!-- start namespace Android.Webkit --> <div> 
<h2>Namespace Android.Webkit</h2>
<!-- start type CookieManager --> <div>
<h3>Type Changed: Android.Webkit.CookieManager</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasCookies { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AcceptCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AcceptThirdPartyCookies (WebView webview)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Flush ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string GetCookie (string url)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllCookies (IValueCallback callback)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveExpiredCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveSessionCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveSessionCookies (IValueCallback callback)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAcceptCookie (bool accept)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAcceptThirdPartyCookies (WebView webview, bool accept)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetCookie (string url, string value)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetCookie (string url, string value, IValueCallback callback)
</div></pre>

</div> <!-- end type CookieManager -->
<!-- start type WebBackForwardList --> <div>
<h3>Type Changed: Android.Webkit.WebBackForwardList</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int CurrentIndex { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebHistoryItem CurrentItem { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int Size { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebHistoryItem GetItemAtIndex (int index)
</div></pre>

</div> <!-- end type WebBackForwardList -->
<!-- start type WebHistoryItem --> <div>
<h3>Type Changed: Android.Webkit.WebHistoryItem</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Android.Graphics.Bitmap Favicon { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string OriginalUrl { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string Title { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string Url { get; }
</div></pre>

</div> <!-- end type WebHistoryItem -->
<!-- start type WebIconDatabase --> <div>
<h3>Type Changed: Android.Webkit.WebIconDatabase</h3>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Close ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Open (string path)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ReleaseIconForPageUrl (string url)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllIcons ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RequestIconForPageUrl (string url, WebIconDatabase.IIconListener listener)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RetainIconForPageUrl (string url)
</div></pre>

</div> <!-- end type WebIconDatabase -->
<!-- start type WebSettings --> <div>
<h3>Type Changed: Android.Webkit.WebSettings</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AllowContentAccess { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AllowFileAccess { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BlockNetworkImage { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BlockNetworkLoads { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BuiltInZoomControls { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> CacheModes CacheMode { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string CursiveFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DatabaseEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string DatabasePath { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DefaultFixedFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DefaultFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string DefaultTextEncodingName { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.ZoomDensity DefaultZoom { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DisplayZoomControls { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DomStorageEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string FantasyFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string FixedFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool JavaScriptCanOpenWindowsAutomatically { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool JavaScriptEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LightTouchEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LoadWithOverviewMode { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LoadsImagesAutomatically { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool MediaPlaybackRequiresUserGesture { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int MinimumFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int MinimumLogicalFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string SansSerifFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SaveFormData { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SavePassword { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string SerifFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string StandardFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int TextZoom { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool UseWideViewPort { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string UserAgentString { get; set; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool EnableSmoothTransition ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.LayoutAlgorithm GetLayoutAlgorithm ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.PluginState GetPluginState ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCacheEnabled (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCacheMaxSize (long appCacheMaxSize)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCachePath (string appCachePath)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetEnableSmoothTransition (bool enable)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetGeolocationDatabasePath (string databasePath)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetGeolocationEnabled (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetLayoutAlgorithm (WebSettings.LayoutAlgorithm l)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetNeedInitialFocus (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetPluginState (WebSettings.PluginState state)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetRenderPriority (WebSettings.RenderPriority priority)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetSupportMultipleWindows (bool support)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetSupportZoom (bool support)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SupportMultipleWindows ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SupportZoom ()
</div></pre>

</div> <!-- end type WebSettings -->
<!-- start type WebViewDatabase --> <div>
<h3>Type Changed: Android.Webkit.WebViewDatabase</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasFormData { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasHttpAuthUsernamePassword { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasUsernamePassword { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearFormData ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearHttpAuthUsernamePassword ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearUsernamePassword ()
</div></pre>

</div> <!-- end type WebViewDatabase -->

</div> <!-- end namespace Android.Webkit -->
# reading extras from: inter-api-extra-v5.1-v6.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v5.1/Mono.Android.xml" "inter-apis/v6.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v5.1 and v6.0</h1>
<!-- start namespace Android.App --> <div> 
<h2>Namespace Android.App</h2>
<!-- start type Notification --> <div>
<h3>Type Changed: Android.App.Notification</h3>
<!-- start type Notification.Action --> <div>
<h3>Type Changed: Android.App.Notification.Action</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>int</span> <span class='added '>Android.Graphics.Drawables.Icon</span> Icon { get; <span class='removed removed-inline removed-breaking-inline'>set;</span> }
</div></pre>

</div> <!-- end type Notification.Action -->

</div> <!-- end type Notification -->

</div> <!-- end namespace Android.App -->
<!-- start namespace Android.Graphics.Drawables --> <div> 
<h2>Namespace Android.Graphics.Drawables</h2>
<!-- start type ClipDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.ClipDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type ClipDrawable -->
<!-- start type InsetDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.InsetDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type InsetDrawable -->
<!-- start type RotateDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.RotateDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type RotateDrawable -->
<!-- start type ScaleDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.ScaleDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type ScaleDrawable -->

</div> <!-- end namespace Android.Graphics.Drawables -->
# reading extras from: inter-api-extra-v6.0-v7.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v6.0/Mono.Android.xml" "inter-apis/v7.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v7.0-v7.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v7.0/Mono.Android.xml" "inter-apis/v7.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v7.0 and v7.1</h1>
<!-- start namespace Android.Telecom --> <div> 
<h2>Namespace Android.Telecom</h2>
<!-- start type RemoteConference --> <div>
<h3>Type Changed: Android.Telecom.RemoteConference</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>CallProperty</span> <span class='added '>ConnectionProperties</span> ConnectionProperties { get; }
</div></pre>

</div> <!-- end type RemoteConference -->

</div> <!-- end namespace Android.Telecom -->

I have not read or reviewed the above; I'm just copy & pasting from the build log.

That said, monodroid is currently referencing commit bf12270, and is not getting any of the above errors.

@atsushieno
Copy link
Contributor

Let's please stop mixing two irrelevant problems at once. Enums are enums, other changes such as base types etc. are different issues. My scope is about the problematic enum part.

atsushieno added a commit to atsushieno/xamarin-android that referenced this pull request Dec 7, 2017
…s too.

At  9a73c4c we became much more precise about enumification, because
formerly we only pull int constant information through DroidDoc only in
the latest API.

Besides, we had been precise on which int fields are final and which aren't,
in API XML metadata.

Since we switched the information source to API XML metadata, such final
fields that were NOT final are strictly converted to enums only in the
constant-ified API Level.

That was regarded as regression at dotnet#1078 .

The solution to this situation is: treat them as constants.

To do so, now generate-const-list-2.cs is changed to NOT check if an int
field is final or not, until at the merge phase. Then we filter out those
non-constant fields (which are not much).

This uncovers those "formerly non constant" fields too. Fortunately such
fields didn't exist other than the ones at PR dotnet#1078 mentioned (this
generate-const-list-2.exe now prints out such fields now.)
jonpryor pushed a commit that referenced this pull request Dec 7, 2017
#1080)

At  9a73c4c we became much more precise about enumification, because
formerly we only pull int constant information through DroidDoc only in
the latest API.

Besides, we had been precise on which int fields are final and which aren't,
in API XML metadata.

Since we switched the information source to API XML metadata, such final
fields that were NOT final are strictly converted to enums only in the
constant-ified API Level.

That was regarded as regression at #1078 .

The solution to this situation is: treat them as constants.

To do so, now generate-const-list-2.cs is changed to NOT check if an int
field is final or not, until at the merge phase. Then we filter out those
non-constant fields (which are not much).

This uncovers those "formerly non constant" fields too. Fortunately such
fields didn't exist other than the ones at PR #1078 mentioned (this
generate-const-list-2.exe now prints out such fields now.)
@jonpryor jonpryor changed the title [Mono.Android] Remove Transformation.TypeAlpha Bump to xamarin-android-api-compatibility/master/9cfa6cc9 Dec 7, 2017
We found that xamarin-android-api-compatibility wasn't *actually*
performing the inter-API-level checks, meaning an important API
compatibility check wasn't being performed.

Bump to xamarin-android-api-compatibility/9cfa6cc9 so that
inter-API-level checks are properly performed.
@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

Let's please stop mixing two irrelevant problems at once

Agreed. You fixed the enum binding problem in PR #1085, so now this PR is just a xamarin-android-api-compatibility bump.

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

Current build errors:

<h1>### API BREAK BETWEEN v2.3 and v4.0.3</h1>
<!-- start namespace Android.Preferences --> <div> 
<h2>Namespace Android.Preferences</h2>
<!-- start type CheckBoxPreference --> <div>
<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

</div> <!-- end type CheckBoxPreference -->

</div> <!-- end namespace Android.Preferences -->
<!-- start namespace Android.Text --> <div> 
<h2>Namespace Android.Text</h2>
<!-- start type ClipboardManager --> <div>
<h3>Type Changed: Android.Text.ClipboardManager</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasText { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Java.Lang.ICharSequence TextFormatted { get; set; }
</div></pre>

</div> <!-- end type ClipboardManager -->

</div> <!-- end namespace Android.Text -->
<!-- start namespace Android.Text.Method --> <div> 
<h2>Namespace Android.Text.Method</h2>
<!-- start type ArrowKeyMovementMethod --> <div>
<h3>Type Changed: Android.Text.Method.ArrowKeyMovementMethod</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Text.Method.BaseMovementMethod</span>

</div> <!-- end type ArrowKeyMovementMethod -->
<!-- start type ScrollingMovementMethod --> <div>
<h3>Type Changed: Android.Text.Method.ScrollingMovementMethod</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Text.Method.BaseMovementMethod</span>

</div> <!-- end type ScrollingMovementMethod -->

</div> <!-- end namespace Android.Text.Method -->
<!-- start namespace Android.Views --> <div> 
<h2>Namespace Android.Views</h2>
<!-- start type InputEvent --> <div>
<h3>Type Changed: Android.Views.InputEvent</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }
</div></pre>

</div> <!-- end type InputEvent -->

</div> <!-- end namespace Android.Views -->
<!-- start namespace Android.Views.Accessibility --> <div> 
<h2>Namespace Android.Views.Accessibility</h2>
<!-- start type AccessibilityEvent --> <div>
<h3>Type Changed: Android.Views.Accessibility.AccessibilityEvent</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Accessibility.AccessibilityRecord</span>

</div> <!-- end type AccessibilityEvent -->

</div> <!-- end namespace Android.Views.Accessibility -->
<!-- start namespace Dalvik.SystemInterop --> <div> 
<h2>Namespace Dalvik.SystemInterop</h2>
<!-- start type DexClassLoader --> <div>
<h3>Type Changed: Dalvik.SystemInterop.DexClassLoader</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.ClassLoader</span> <span class='added '>Dalvik.SystemInterop.BaseDexClassLoader</span>

</div> <!-- end type DexClassLoader -->
<!-- start type PathClassLoader --> <div>
<h3>Type Changed: Dalvik.SystemInterop.PathClassLoader</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.ClassLoader</span> <span class='added '>Dalvik.SystemInterop.BaseDexClassLoader</span>

</div> <!-- end type PathClassLoader -->

</div> <!-- end namespace Dalvik.SystemInterop -->
# reading extras from: inter-api-extra-v4.0.3-v4.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.0.3/Mono.Android.xml" "inter-apis/v4.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking -r 'public bool FitsSystemWindows \(\);'
<h1>### API BREAK BETWEEN v4.0.3 and v4.1</h1>
<!-- start namespace Android.OS --> <div> 
<h2>Namespace Android.OS</h2>
<!-- start type Vibrator --> <div>
<h3>Type Changed: Android.OS.Vibrator</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasVibrator { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Cancel ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Vibrate (long milliseconds)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Vibrate (long[] pattern, int repeat)
</div></pre>

</div> <!-- end type Vibrator -->

</div> <!-- end namespace Android.OS -->
# reading extras from: inter-api-extra-v4.1-v4.2.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.1/Mono.Android.xml" "inter-apis/v4.2/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.2-v4.3.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.2/Mono.Android.xml" "inter-apis/v4.3/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.3-v4.4.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.3/Mono.Android.xml" "inter-apis/v4.4/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.4-v4.4.87.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.4/Mono.Android.xml" "inter-apis/v4.4.87/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v4.4.87-v5.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v4.4.87/Mono.Android.xml" "inter-apis/v5.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v5.0-v5.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v5.0/Mono.Android.xml" "inter-apis/v5.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v5.0 and v5.1</h1>
<!-- start namespace Android.Views.Animations --> <div> 
<h2>Namespace Android.Views.Animations</h2>
<!-- start type AccelerateDecelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AccelerateDecelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AccelerateDecelerateInterpolator -->
<!-- start type AccelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AccelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AccelerateInterpolator -->
<!-- start type AnticipateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AnticipateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AnticipateInterpolator -->
<!-- start type AnticipateOvershootInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.AnticipateOvershootInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type AnticipateOvershootInterpolator -->
<!-- start type BounceInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.BounceInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type BounceInterpolator -->
<!-- start type CycleInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.CycleInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type CycleInterpolator -->
<!-- start type DecelerateInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.DecelerateInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type DecelerateInterpolator -->
<!-- start type LinearInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.LinearInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type LinearInterpolator -->
<!-- start type OvershootInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.OvershootInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type OvershootInterpolator -->
<!-- start type PathInterpolator --> <div>
<h3>Type Changed: Android.Views.Animations.PathInterpolator</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Java.Lang.Object</span> <span class='added '>Android.Views.Animations.BaseInterpolator</span>

</div> <!-- end type PathInterpolator -->

</div> <!-- end namespace Android.Views.Animations -->
<!-- start namespace Android.Webkit --> <div> 
<h2>Namespace Android.Webkit</h2>
<!-- start type CookieManager --> <div>
<h3>Type Changed: Android.Webkit.CookieManager</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasCookies { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AcceptCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AcceptThirdPartyCookies (WebView webview)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Flush ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string GetCookie (string url)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllCookies (IValueCallback callback)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveExpiredCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveSessionCookie ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveSessionCookies (IValueCallback callback)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAcceptCookie (bool accept)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAcceptThirdPartyCookies (WebView webview, bool accept)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetCookie (string url, string value)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetCookie (string url, string value, IValueCallback callback)
</div></pre>

</div> <!-- end type CookieManager -->
<!-- start type WebBackForwardList --> <div>
<h3>Type Changed: Android.Webkit.WebBackForwardList</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int CurrentIndex { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebHistoryItem CurrentItem { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int Size { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebHistoryItem GetItemAtIndex (int index)
</div></pre>

</div> <!-- end type WebBackForwardList -->
<!-- start type WebHistoryItem --> <div>
<h3>Type Changed: Android.Webkit.WebHistoryItem</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Android.Graphics.Bitmap Favicon { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string OriginalUrl { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string Title { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string Url { get; }
</div></pre>

</div> <!-- end type WebHistoryItem -->
<!-- start type WebIconDatabase --> <div>
<h3>Type Changed: Android.Webkit.WebIconDatabase</h3>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Close ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void Open (string path)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ReleaseIconForPageUrl (string url)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RemoveAllIcons ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RequestIconForPageUrl (string url, WebIconDatabase.IIconListener listener)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void RetainIconForPageUrl (string url)
</div></pre>

</div> <!-- end type WebIconDatabase -->
<!-- start type WebSettings --> <div>
<h3>Type Changed: Android.Webkit.WebSettings</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AllowContentAccess { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool AllowFileAccess { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BlockNetworkImage { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BlockNetworkLoads { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool BuiltInZoomControls { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> CacheModes CacheMode { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string CursiveFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DatabaseEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string DatabasePath { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DefaultFixedFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DefaultFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string DefaultTextEncodingName { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.ZoomDensity DefaultZoom { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DisplayZoomControls { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool DomStorageEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string FantasyFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string FixedFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool JavaScriptCanOpenWindowsAutomatically { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool JavaScriptEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LightTouchEnabled { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LoadWithOverviewMode { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool LoadsImagesAutomatically { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool MediaPlaybackRequiresUserGesture { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int MinimumFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int MinimumLogicalFontSize { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string SansSerifFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SaveFormData { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SavePassword { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string SerifFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string StandardFontFamily { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int TextZoom { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool UseWideViewPort { get; set; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> string UserAgentString { get; set; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool EnableSmoothTransition ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.LayoutAlgorithm GetLayoutAlgorithm ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> WebSettings.PluginState GetPluginState ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCacheEnabled (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCacheMaxSize (long appCacheMaxSize)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetAppCachePath (string appCachePath)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetEnableSmoothTransition (bool enable)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetGeolocationDatabasePath (string databasePath)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetGeolocationEnabled (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetLayoutAlgorithm (WebSettings.LayoutAlgorithm l)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetNeedInitialFocus (bool flag)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetPluginState (WebSettings.PluginState state)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetRenderPriority (WebSettings.RenderPriority priority)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetSupportMultipleWindows (bool support)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void SetSupportZoom (bool support)
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SupportMultipleWindows ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool SupportZoom ()
</div></pre>

</div> <!-- end type WebSettings -->
<!-- start type WebViewDatabase --> <div>
<h3>Type Changed: Android.Webkit.WebViewDatabase</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasFormData { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasHttpAuthUsernamePassword { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasUsernamePassword { get; }
</div></pre>
<p>Modified methods:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearFormData ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearHttpAuthUsernamePassword ()
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> void ClearUsernamePassword ()
</div></pre>

</div> <!-- end type WebViewDatabase -->

</div> <!-- end namespace Android.Webkit -->
# reading extras from: inter-api-extra-v5.1-v6.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v5.1/Mono.Android.xml" "inter-apis/v6.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v5.1 and v6.0</h1>
<!-- start namespace Android.App --> <div> 
<h2>Namespace Android.App</h2>
<!-- start type Notification --> <div>
<h3>Type Changed: Android.App.Notification</h3>
<!-- start type Notification.Action --> <div>
<h3>Type Changed: Android.App.Notification.Action</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>int</span> <span class='added '>Android.Graphics.Drawables.Icon</span> Icon { get; <span class='removed removed-inline removed-breaking-inline'>set;</span> }
</div></pre>

</div> <!-- end type Notification.Action -->

</div> <!-- end type Notification -->

</div> <!-- end namespace Android.App -->
<!-- start namespace Android.Graphics.Drawables --> <div> 
<h2>Namespace Android.Graphics.Drawables</h2>
<!-- start type ClipDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.ClipDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type ClipDrawable -->
<!-- start type InsetDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.InsetDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type InsetDrawable -->
<!-- start type RotateDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.RotateDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type RotateDrawable -->
<!-- start type ScaleDrawable --> <div>
<h3>Type Changed: Android.Graphics.Drawables.ScaleDrawable</h3>
Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Graphics.Drawables.Drawable</span> <span class='added '>Android.Graphics.Drawables.DrawableWrapper</span>

</div> <!-- end type ScaleDrawable -->

</div> <!-- end namespace Android.Graphics.Drawables -->
# reading extras from: inter-api-extra-v6.0-v7.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v6.0/Mono.Android.xml" "inter-apis/v7.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
# reading extras from: inter-api-extra-v7.0-v7.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v7.0/Mono.Android.xml" "inter-apis/v7.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
<h1>### API BREAK BETWEEN v7.0 and v7.1</h1>
<!-- start namespace Android.Telecom --> <div> 
<h2>Namespace Android.Telecom</h2>
<!-- start type RemoteConference --> <div>
<h3>Type Changed: Android.Telecom.RemoteConference</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>CallProperty</span> <span class='added '>ConnectionProperties</span> ConnectionProperties { get; }
</div></pre>

</div> <!-- end type RemoteConference -->

</div> <!-- end namespace Android.Telecom -->
# reading extras from: inter-api-extra-v7.1-v8.0.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v7.1/Mono.Android.xml" "inter-apis/v8.0/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking -r 'Java.Lang.Reflect.Constructor.InterfaceConsts' -r 'Java.Lang.Reflect.Method.InterfaceConsts'
# reading extras from: inter-api-extra-v8.0-v8.1.txt
mono --debug /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v8.0/Mono.Android.xml" "inter-apis/v8.1/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

Analysis of current errors:

(insert crying here)

Why Didn't monodroid Report These?

I started digging into inter-API-level diffs because of check-api failures on a monodroid PR. Interestingly, the monodroid failures do not include the set of current errors; monodroid doesn't report these errors.

This is because monodroid has a separate set of checks, and greps for >Removed to detect API breakage, not data-is-breaking.

Which means we have unreported breakage.

(Insert crying here.)

Worse (?!), I don't yet know how long this breakage has existed.

virtual changed to abstract

<h3>Type Changed: Android.Text.ClipboardManager</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasText { get; }
</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Java.Lang.ICharSequence TextFormatted { get; set; }
</div></pre>

Most of the reported breakage, by far, is adding abstract to a method, as above.

Type Changes

<h3>Type Changed: Android.Telecom.RemoteConference</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>CallProperty</span> <span class='added '>ConnectionProperties</span> ConnectionProperties { get; }
</div></pre>

@atsushieno
Copy link
Contributor

virtual changed to abstract

My guess on the culrit is my change here https://github.com/xamarin/xamarin-android/pull/662/files#diff-e866706b2ad1cc482e160a559aed991a

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

Next question: Do these changes matter?

Rephrased: were these changes introduced in d15-6, or do they also exist in d15-5 (and before?). If they exist in d15-5, that suggests that we can just ignore them (can we?).

Type Changes

<h3>Type Changed: Android.Telecom.RemoteConference</h3>
<p>Modified properties:</p>
<pre>
<div data-is-breaking>	public <span class='removed removed-inline removed-breaking-inline'>CallProperty</span> <span class='added '>ConnectionProperties</span> ConnectionProperties { get; }
</div></pre>

This change between v7.0 and v7.1 also exists in d15-5.

@atsushieno: What should we do here? It looks like the Android.Telecom.RemoteConference.ConnectionProperties property was introduced in API-24 (v7.0), so I think we want to change v7.0 to use ConnectionProperties instead of CallProperty.

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

virtual changed to abstract Analysis

The API BREAK BETWEEN v2.3 and v4.0.3 section is identical to d15-5; these changes aren't new.

The API BREAK BETWEEN v4.0.3 and v4.1 section is identical to d15-5.

The API BREAK BETWEEN v5.0 and v5.1 section is identical to d15-5.

The API BREAK BETWEEN v5.1 and v6.0 section is identical to d15-5.

@jonpryor
Copy link
Member Author

jonpryor commented Dec 7, 2017

This is where telemetry would come in handy. Best reasons I can think of for this not having bitten us already are:

  1. The actual method signatures haven't changed (except the API v7.0 to v7.1 changes), so assemblies referencing those members will still load.
  2. The last API level with any such change is v6.0 (API-23); we haven't introduced abstract anywhere since then -- API-24+ is "stable", and, as I understand it, any app that is using the Support libraries needs to be using API-26 (soon to be API-27!) in order to use the support libs.

Meaning the only people this will impact are those using one of those ~95 members and not using the Support libraries, which could be a very small number of people.

The fact that all of these issues suggests that we should just ignore them for now, except the API-25 Android.Telecom.RemoteConference.ConnectionProperties change.

@atsushieno
Copy link
Contributor

On android.telecom.RemoteConference.getConnectionProperties():

  • The constants that consists of Android.Telecom.RemoteConference.ConnectionProperties enum type are from android.telecom.Connection.PROPERTY_* constants which are *from API Level 25.
  • That means, Google didn't indicate any constants for that method, therefore it was mapped to CallProperty enum (because, it's almost obvious from the name! and unlike these days DroidDocs were not reliably pointing to the target constants to use).

They are thus mapped to different enums.

What's the actual impact due to current state?

  • Apps that explicitly targets Android 7.0 and referencing some library that references this method will result in MissingMethodException

What's the impact if we change that?

  • Apps that explicitly targets Android 7.0 and referencing some library that already referenced this method (with CallProperty) will result in MissingMethodException.

Either bites. And either don't bites us by NoSuchMethodException in Java land because they are both int.

I thought of two "solutions":

(1) leave it as is and for anyone who don't use Support libraries and sets the target framework to 7.0, tell them to "use 7.1" (because its impact is relatively small).
(2) mark those constants as if they existed since API Level 24.

Maybe (2)? Because it should not be difficult to give fake API information in src/Mono.Android/metadata.

jonpryor added a commit to jonpryor/xamarin-android that referenced this pull request Jan 18, 2018
Context: dotnet#1089
Context: dotnet#1078
Context: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/823/

Commit 8ff139f [broke][0] the [build][1], in a minor way:

[0]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/824/console
[1]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/824/

	# reading extras from: inter-api-extra-v2.3-v4.0.3.txt
	mono --debug /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/bin/BuildDebug/mono-api-html.exe "inter-apis/v2.3/Mono.Android.xml" "inter-apis/v4.0.3/Mono.Android.xml" --ignore-changes-parameter-names --ignore-changes-virtual --ignore-changes-property-setters --ignore-nonbreaking
	<h1>### API BREAK BETWEEN v2.3 and v4.0.3</h1>
	...
	<h2>Namespace Android.Text</h2>
	<!-- start type ClipboardManager --> <div>
	<h3>Type Changed: Android.Text.ClipboardManager</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> bool HasText { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> Java.Lang.ICharSequence TextFormatted { get; set; }
	</div></pre>
	...

These are "acceptable" API breakage for now, previously not reported
[because the test was broken][6dfb]. The test was fixed on
xamarin-android-api-compatibility/master, but we haven't been able to
merge to that commit yet (PR dotnet#1078).

[6dfb]: xamarin/xamarin-android-api-compatibility@6dfba92

Unfortunately, 8ff139f included a bump to
xamarin-android-api-compatibility/master, thus introducing the
"UNSTABLE" breakage that PR dotnet#1078 encountered.

For now -- until we can properly fix things -- bump to
xamarin-android-api-compatibility/d15-6, which *lacks* the test fixes
on master, and thus will allow the API compatibility checks to pass.
atsushieno added a commit to atsushieno/xamarin-android that referenced this pull request Feb 14, 2018
As part of discussion at dotnet#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.
atsushieno added a commit to atsushieno/xamarin-android-api-compatibility that referenced this pull request Feb 14, 2018
As part of discussion at dotnet/android#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.

(copying the commitmsg from dotnet/android#1304)
atsushieno added a commit to atsushieno/xamarin-android that referenced this pull request Feb 15, 2018
As part of discussion at dotnet#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.
atsushieno added a commit to atsushieno/xamarin-android-api-compatibility that referenced this pull request Feb 15, 2018
As part of discussion at dotnet/android#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.

(copying the commitmsg from dotnet/android#1304)
atsushieno added a commit to atsushieno/xamarin-android that referenced this pull request Feb 15, 2018
As part of discussion at dotnet#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.
atsushieno added a commit to atsushieno/xamarin-android-api-compatibility that referenced this pull request Feb 16, 2018
As part of discussion at dotnet/android#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.

(copying the commitmsg from dotnet/android#1304)
jonpryor added a commit to jonpryor/mono that referenced this pull request Feb 20, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

	Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

	$ mono-api-html expected.xml new.xml -v
	Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
	Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
	Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
	Possible -n value: Android.Views.UnavailableException: Added type
	...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
akoeplinger pushed a commit to mono/mono that referenced this pull request Feb 21, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

	Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

	$ mono-api-html expected.xml new.xml -v
	Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
	Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
	Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
	Possible -n value: Android.Views.UnavailableException: Added type
	...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
jonpryor added a commit to jonpryor/xamarin-android that referenced this pull request Feb 21, 2018
Context: dotnet#1078
Context: mono/mono#7145

The primary impetus is that mono/de4729fa contains "ignore"
improvements to `mono-api-html`, which will be needed in order to
complete PR dotnet#1078.
jonpryor added a commit that referenced this pull request Feb 21, 2018
Context: #1078
Context: mono/mono#7145

The primary impetus is that mono/de4729fa contains "ignore"
improvements to `mono-api-html`, which will be needed in order to
complete PR #1078.
jonpryor added a commit to jonpryor/mono that referenced this pull request Feb 21, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

        Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

        $ mono-api-html expected.xml new.xml -v
        Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
        Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
        Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
        Possible -n value: Android.Views.UnavailableException: Added type
        ...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Feb 21, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

        Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

        $ mono-api-html expected.xml new.xml -v
        Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
        Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
        Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
        Possible -n value: Android.Views.UnavailableException: Added type
        ...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
baulig pushed a commit that referenced this pull request Feb 21, 2018
commit d3ad544
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Wed Feb 21 16:36:10 2018 +0000

    [Xamarin.Android.Build.Tasks] Update `CalculateProjectDependencies` to match spec (#1323)

    The `GetAndroidDependencies` target (f9b2c97) is intended to be
    called by an IDE on project-load, so that the IDE can install project
    dependencies "in the background," and ideally have the dependencies
    installed before the project is actually built.

    As such, the semantics of the `@(AndroidDependency)` output item
    group need to be agreed upon by xamarin-android, the IDEs, and
    whatever the IDEs use to actually install the dependencies. The
    `%(AndroidDependency.Identity)` values need to be well-defined
    and consistent across these three different libraries.

    In commit f9b2c97, certain values would have a version number
    "embedded" within `%(AndroidDependency.Identity)`, using a `;` to
    separate the name from the version, e.g. `build-tools;26.0.1`.
    Use of `;` was chosen because that made it easier for the package
    installation code to use (e.g. it would be identical to what the
    Android SDK `sdkmanager` utility expects).

    Unfortunately, the use of `;` was counter to the [spec][spec], and
    also looks "weird" in the context of MSBuild, as `;` is *also* the
    item group separator.

    Change the version separator to instead be a `/`. This "looks" better
    and is also consistent with the [installer manifest][manifest] schema
    that we will use, wherein `%(AndroidDependency.Identity)` matches a
    `//xamarin-android/*/@filesystem-path` attribute value:

    	<xamarin-android sdk-version="0.0.0" generated-on="Tue, 20 Feb 2018 21:16:01 GMT">
    	  <platform-tools filesystem-path="platform-tools" path="platform-tools" revision="27.0.1" manifest-url="https://dl.google.com/android/repository/repository2-1.xml" description="Android SDK Platform-Tools" obsolete="False" preview="False" license="android-sdk-license" original-type="generic:genericDetailsType">
    	    <!-- ... -->
    	  </platform-tools>
    	  <build-tool filesystem-path="build-tools/27.0.3" path="build-tools;27.0.3" revision="27.0.3" manifest-url="https://dl.google.com/android/repository/repository2-1.xml" description="Android SDK Build-Tools 27.0.3" obsolete="False" preview="False" license="android-sdk-license" original-type="generic:genericDetailsType">
    	  </build-tool>
    	  <!-- ... -->
    	</xamarin-android>

    `@(AndroidDependency)` could be equivalent to:

    	<ItemGroup>
    	  <AndroidDependency Include="build-tools/27.0.3">
    	    <Version>27.0.3</Version>
    	  </AndroidDependency>
    	  <AndroidDependency Include="platform-tools">
    	    <Version>$(AndroidSdkPlatformToolsVersion)</Version>
    	  </AndroidDependency>
    	  <AndroidDependency Include="platforms/android-27">
    	    <Version>27</Version>
    	  </AndroidDependency>
    	  <AndroidDependency Include="tools">
    	    <Version>$(AndroidSdkToolsVersion)</Version>
    	  </AndroidDependency>
    	</ItemGroup>

    [manifest]: https://gist.github.com/dellis1972/08ba76cc19cdce3dec89c68684664299
    [spec]: https://microsoft-my.sharepoint.com/:w:/r/personal/mhutch_microsoft_com/_layouts/15/WopiFrame.aspx?sourcedoc=%7B0436dd38-c9ff-4cf2-b33c-ee4515b68546%7D&action=edit&wdPid=64869a58

commit e489aae
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Wed Feb 21 10:41:32 2018 -0500

    Bump to mono/2017-12/de4729fa (#1325)

    Context: #1078
    Context: mono/mono#7145

    The primary impetus is that mono/de4729fa contains "ignore"
    improvements to `mono-api-html`, which will be needed in order to
    complete PR #1078.

commit f7b24f7
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Tue Feb 20 16:25:23 2018 +0000

    [Xamarin.Android.Build.Tests] Add tests for <ResolveSdks/> (#1321)

    This commit adds a basic unit test for the `<ResolveSdks/>` task.

commit d207275
Author: Atsushi Eno <atsushieno@gmail.com>
Date:   Tue Feb 20 00:37:10 2018 +0900

    [msbuild] Fix <Import>-ed filename, for case sensitivity. (#1322)

    There is a trivial difference between `msbuild` and `xbuild` - `msbuild`
    seems to respect (or ignorant of) the fact that filenames that are different
    in case are actually different on case-sensitive filesystem.

    Thus with `msbuild`, our binding projects don't build due to "missing"
    Microsoft.CSharp.Targets (there are only Microsoft.CSharp.targets even in
    `xbuild` support files in mono).

    This trivial fix should make it work.

commit 49ecdda
Author: Ludovic Henry <luhenry@microsoft.com>
Date:   Fri Feb 16 17:09:43 2018 -0500

    Bump to mono/2017-12/0d51a806 (#1318)

    To simplify integrating mono's SDKs feature.

commit 8419f81
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Fri Feb 16 16:07:12 2018 -0500

    Bump $(ProductVersion) to 8.3.99

    (Commercial) Xamarin.Android v8.3 is being tracked in the
    [xamarin-android/d15-7][0] branch, which was branched from
    commit 70ccc83.

    Bump `$(ProductVersion)` to 8.3.99 to track development progress of
    the *next* version of Xamarin.Android.

    [0]: https://github.com/xamarin/xamarin-android/commits/d15-7

commit 70ccc83
Author: Matt Sylvia <msylvia@nukefile.net>
Date:   Fri Feb 16 11:56:35 2018 -0500

    Bump to Java.Interop/master/15cf8c1, mono/2017-12/fbc4f05 (#1317)

    Context: mono/mono#6948

    Harmonizes on cecil/mono-2017-12/dfee11e.

commit c960a6f
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Fri Feb 16 10:43:11 2018 -0500

    Bump to xamarin-android-api-compatibility/d15-7/dc5f0c2e

    Fixes an [ABI break][0] in 72ef39b:

    [0]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/877/

    	<h3>Type Changed: Microsoft.SqlServer.Server.SqlDataRecord</h3>
    	<p>Removed method:</p>
    	<pre>
    	  <span class='removed removed-method breaking' data-is-breaking>public virtual System.Data.IDataReader GetData (int);</span>
    	</pre>

    	<h3>Type Changed: System.Data.SqlClient.SqlConnectionStringBuilder</h3>
    	<p>Removed property:</p>
    	<pre>
    	  <span class='removed removed-property breaking' data-is-breaking>public bool IsFixedSize { get; }</span>
    	</pre>

    	</div> <!-- end type SqlConnectionStringBuilder -->
    	<!-- start type SqlParameterCollection --> <div>
    	<h3>Type Changed: System.Data.SqlClient.SqlParameterCollection</h3>
    	<p>Removed properties:</p>
    	<pre>
    	  <span class='removed removed-property breaking' data-is-breaking>public bool IsFixedSize { get; }</span>
    	  <span class='removed removed-property breaking' data-is-breaking>public bool IsReadOnly { get; }</span>
    	  <span class='removed removed-property breaking' data-is-breaking>public bool IsSynchronized { get; }</span>
    	</pre>

    This doesn't fix the "ABI break"; there is no ABI break of consequence.
    This fixes the *reporting* of the ABI break.

    See also: xamarin/xamarin-android-api-compatibility@5be4d43

commit 72ef39b
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Thu Feb 15 20:32:20 2018 -0500

    Bump to xamarin-android-api-compatibility/d15-7/9d71e200

    Context: #1303

    Fixes an [ABI BREAK][0] from b2ca17a:

    	<h3>Type Changed: Android.Widget.ListView</h3>
    	<p>Modified fields:</p>
    	<pre>
    	<div data-is-breaking>	public const <span class='removed removed-inline removed-breaking-inline'>int</span> <span class='added '>ChoiceMode</span> ChoiceModeMultiple = 2;
    	</div><div data-is-breaking>	public const <span class='removed removed-inline removed-breaking-inline'>int</span> <span class='added '>ChoiceMode</span> ChoiceModeNone = 0;
    	</div><div data-is-breaking>	public const <span class='removed removed-inline removed-breaking-inline'>int</span> <span class='added '>ChoiceMode</span> ChoiceModeSingle = 1;
    	</div></pre>

    The problem is that [xamarin-android-api-compatibility PR #13][ac-13]
    is part of PR #1303, but #1303 hasn't been merged yet. As such, it had
    no need to be in the xamarin-android-api-compatibility/d15-7 branch.

    It has been reverted, thus fixing the above ABI break.

    [0]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/876/console
    [ac-13]: xamarin/xamarin-android-api-compatibility#13

commit d0cb3ce
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Thu Feb 15 14:12:30 2018 -0500

    Bump to mono/2017-12/2ad3f0bf

    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60088

commit b2ca17a
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Thu Feb 15 12:38:12 2018 -0500

    Bump to xamarin-android-api-compatibility/d15-7/10df9b67 (#1314)

    Context: 34f437d
    Context: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/873/

    The bump to mono/2017-12 in commit 34f437d included ABI "breakage" in
    `System.Data.dll` which wasn't *actual* breakage.

    Update xamarin-android-api-compatibility to so that we don't report
    warnings for this "breakage."

commit 3a35c00
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Thu Feb 15 12:36:24 2018 -0500

    Bump to Java.Interop/master/0841c32f

    Bumps to cecil/master/dfee11e

    For d15-7 harmonization.

commit 92949f4
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Thu Feb 15 12:27:55 2018 -0500

    [mono-runtimes] Fix bundle usage

    Commit 34f437d inadvertently broke mono bundle usage. For example,
    the [first commit after the mono bump][xa-01be] *should* have taken
    around 3h to build. Instead, it took nearly 7h, because the bundle
    wasn't being used, causing the mono runtimes to be rebuilt:

    [xa-01be]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android/874/

    	Target _BuildUnlessCached needs to be built as output file
    	'…/xamarin-android//bin/Debug/lib/xamarin.android//../../bcl-tests/System.Runtime.CompilerServices.Unsafe.pdb'
    	does not exist.

    Indeed, `System.Runtime.CompilerServices.Usafe.pdb` *doesn't* exist,
    nor should it, as it's compiled from IL directly.

    Fix mono bundle usage by updating `@(_BclTestAssemblyDestination)` to
    exclude `System.Runtime.CompilerServices.Unsafe.pdb`. This allows the
    `_BuildUnlessCached` target to properly recognize that all required
    files *do* exist, thus skipping the mono-runtimes build (as desired).

commit 01be8ac
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Thu Feb 15 02:38:56 2018 +0000

    [Xamarin.Android.Build.Tasks] Stop designtime designer being deleted. (#1307)

    Fixes: #1286

    We have a number of problems with our DesignTime build system. The
    main one which this PR addresses is the designer file is deleted
    by `IncrementalClean` AND `CoreClean`. This them completely messes
    up the DesignTime system since it can no longer find the file.

    So what we should be doing is making sure we don't tell the build
    system about the designer file ;-). We do this by not writing the
    path to the `$(CleanFile)`.

    ~~ Some background on the [DesignTime build system][2] ~~

    The primary entry point is the `CoreCompile` target, with occasional
    calls to the `RefreshReferences` target. In theory
    [`$(DesignTimeBuild)`][1] should be set to `true`; however, this is
    not always the case which is why we have the `_SetupForDesignTimeBuild`
    target which hooks into the `CoreCompile` target. Additionally,
    `$(BuildingProject)` should be False. ([Additional information][2]).
    However this document is not seem to be 100% accurate since the IDE's
    (namely Visual Studio) do not always set the required properties. One
    of the key requirements for design time builds seems to be that they
    are independent of the main builds. The files it uses should not be
    removed since the `CoreCompile` target does not seem to be called
    consistently. For example, if the designer file is removed and the
    `RefreshReferences` target is called, the design time build may well
    fail because the targets required to re-generate the designer file
    are not called.

    Now for the problem: the `IncrementalClean` target runs between builds.
    It seems to want to remove files from the previous build. I suspect the
    purpose is to remove files that are no longer needed. (For example an
    assembly which is no longer referenced.) The problem is that we have
    a file (the design time `Resource.designer.cs`) which is not built as
    part of the normal build. But this file was still being written to
    `$(CleanFile)` which is the driver for the `IncrementalClean` process.
    As a result, the file gets removed because its not in the list of
    current `@(FileWrites)`. Not writing the name of this file to
    `$(CleanFile)` seems to hide it from `IncrementalClean`.

    There was also another problem with the `CoreClean` target. This was
    also removing the designer files. Again this was down to the fact
    that the file was listed in `$(CleanFile)`. However our older
    workarounds did not work since they relied on `IncrementalClean`
    running. For a `Clean` target invocation it does not. Again the
    solution seems to be Don't Write the file to `$(CleanFile)`, which is
    counterintuitive since we are told to write all files we generate to
    that file.

    [1]:  https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#determining-whether-a-target-is-run-in-a-design-time-build
    [2]: https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md

commit 34f437d
Author: Ludovic Henry <luhenry@microsoft.com>
Date:   Wed Feb 14 14:05:02 2018 -0500

    Bump to mono/2017-12/a0af42ab (#1263)

    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=6339
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=6401
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=8477
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=19503
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=20562
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=31507
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=35661
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=40699
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=45893
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=49308
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=52675
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=53296
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=56003
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=56194
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=57893
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=57938
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=58261
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=58400
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=58411
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=58965
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59080
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59182
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59364
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59393
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59608
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59664
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59881
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59909
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59913
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59916
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59953
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59956
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=59967
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60028
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60029
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60115
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60175
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60216
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60224
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60233
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60238
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60245
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60255
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60267
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60288
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60298
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60317
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60340
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60422
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60435
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60505
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60514
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60539
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60545
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60634
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60680
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60771
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60860
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60865
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=60973
    Context: https://bugzilla.xamarin.com/show_bug.cgi?id=61002

    Bump minimum macOS Mono version to 5.10.0.47.

commit f279ad3
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Wed Feb 14 15:04:45 2018 +0000

    [Xamarin.Android.Build.Tasks] GetAndroidDependencies calls _SetLatestTargetFrameworkVersion (#1305)

    This is a bug in the `GetAndroidDependencies` target: it does not
    cause `MonoAndroidHelper.RefreshSupportedVersions()` to be invoked.
    As a result if called directly it will generate a
    `NullReferenceException` as `MonoAndroidHelper.SupportedVersions`
    will be `null`.

    The `GetAndroidDependencies` should thus depend upon the
    `_SetLatestTargetFrameworkVersion` target. This will initialize
    `MonoAndroidHelper.SupportedVersions`, and will also resolve the
    correct `$(TargetFrameworkVersion)` if the user has
    `$(AndroidUseLatestPlatformSdk)`=True.

commit 0dee27d
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Wed Feb 14 05:50:23 2018 -0500

    [Xamarin.Android.Build.Tasks] Fragments & Shorter acw-map (#1301)

    Fixes: #1296

    Xamarin.Android attempts to expose the Java-based Android API as a
    ".NET feeling" API. This takes many forms, such as prefixing interface
    names with `I`, mapping `get` and `set` methods to properties, mapping
    listener interfaces to events, and PascalCasing method names.

    This also affects Java package names and C# namespaces.

    When creating the `.apk` file, we philosophically need to go the
    opposite direction: PascalCased members need to be mapped to
    "something appropriate" within Java. For example, many Android
    Resource ids *must* be all lowercase, and Android doesn't support
    package names starting with an uppercase letter in all circumstances.

    At one point, we tried mapping C# PascalCased namespaces to camelCased
    namespaces, so e.g. `MyExampleNamespace` became the
    `myExampleNamesapce` Java package within Java Callable Wrappers.

    This turned out to be a Terrible Mistake, particularly on
    case-sensitive filesystems, as if casing was *inconsistent*
    (`MyExampleNamespace` vs `MyExamplenamespace`), files might not be
    packaged.

    By Mono for Android 1.0, we settled on just lowercasing the namespace
    name to produce Java package names within Android Callable Wrappers.

    This was not without it's own problems; in particular, the assembly
    name wasn't involved, so if the "same" type (namespace + type) were
    present in two different assemblies and we needed to generate Android
    Callable Wrappers, they'd "collide," the build would fail, and we'd
    have some unhappy customers.

    This was later addressed in Xamarin.Android 5.1 by changing the Java
    package name generation algorithm to be an MD5SUM of the assembly name
    and namespace name, thus allowing types to have assembly identity.
    (This was not without its own problems.)

    Then it gets slightly more complicated: Android allows type names to
    appear in various locations, such as in layout View XML. These don't
    allow "just" using the type name; the package name is required for
    types outside the `android.widget` Java package.

    Initially, we did nothing, so developers had to directly use the
    Android Callable Wrapper names:

    	<myexamplenamespace.MyCustomCSharpView android:id="@+id/yay_csharp" .../>
    	<fragment android:name="myexamplenamespace.MyCustomCSharpFragment" ... />

    With the change in Xamarin.Android 5.1, *this couldn't work*; those
    types didn't exist anymore.

    To square this circle, we processed the resource files to "fixup"
    identifiers and replace them with the actual Android Callable Wrapper
    names. We'd replace any/all of:

    	MyExampleNamespace.MyCustomCSharpView                           // Full name
    	MyExampleNamespace.MyCustomCSharpView, MyAssembly               // Partial assembly-qualified name
    	MyExampleNamespace.MyCustomCSharpView, MyAssembly, Version=...  // Full assembly qualified name
    	myexamplenamespace.MyCustomCSharpView                           // compatibility name

    with the appropriate md5'd Android Callable Wrapper name.

    Brilliant as this was, there was a problem: [Bug #61073][61073].
    If the assembly had a wildcard in the assembly version:

    [61073]: https://bugzilla.xamarin.com/show_bug.cgi?id=61073

    	[assembly: AssemblyVersion ("1.0.0.*")]

    then the "Full assembly qualified name" value would change on *every
    build*, which had numerious unintended knock-on effects.

    This was fixed in commit e5b1c92, which worked largely by just
    killing the Full assembly qualified name version entirely.
    Xamarin.Android doesn't support embedding two different versions of
    the same assembly, so this was considered to be fine.

    ...except for one compatibility case: `<fragment/>`s can contain
    ~arbitrary strings, and we support replacing the entire Full assembly
    qualified name within them:

    	<fragment
    	    android:name="MyExampleNamespace.MyCustomCSharpFragment, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    			...
    	/>

    However, in a post e5b1c92 world, the above now fails to load on the
    device, because it's *not* being appropriately fixed up!

    	FATAL EXCEPTION: main
    	Process: Mono.Samples.HelloTests, PID: 22977
    	java.lang.RuntimeException: Unable to start activity ComponentInfo{Mono.Samples.HelloTests/mono.samples.HelloApp}: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment
    		...
    	Caused by: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class fragment
    	Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class fragment
    	Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment Mono.Samples.Hello.MyFragment, Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: make sure class name exists, is public, and has an empty constructor that is public
    		...
    	Caused by: java.lang.ClassNotFoundException: Didn't find class "Mono.Samples.Hello.MyFragment, Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" on path: DexPathList[[zip file "/data/app/Mono.Samples.HelloTests-1/base.apk"],nativeLibraryDirectories=[/data/app/Mono.Samples.HelloTests-1/lib/arm64, /system/fake-libs64, /data/app/Mono.Samples.HelloTests-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
    		...

    The problem is that what Android "sees" *should* be

    	<fragment
    	    android:name="md5whatever.MyCustomCSharpFragment"
    			...
    	/>

    where `md5whatever.MyCustomCSharpFragment` *is* a valid Java type that
    Android is able to load successfully, but because of e5b1c92 this
    replacement was removed.

    The fix: simplify the Full assembly-qualified name case to an already
    supported example. If the `//fragment/@android:name` value contains a
    `,`, assume it's an assembly qualified name and compute the Full name
    from it, by stripping off the comma and everything after it, then use
    the Full name to lookup the correct Android Callable Wrapper type.

commit 5c46ee3
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Wed Feb 14 05:42:22 2018 -0500

    [api-xml-adjuster] Fix rebuilds (#1300)

    Ideally, project rebuilds when nothing has changed should be *fast*.

    `api-xml-adjuster` isn't:

    	$ time (cd build-tools/api-xml-adjuster ; xbuild)
    	real	2m1.084s
    	user	1m55.916s
    	sys	0m8.853s

    	# and the rebuild!
    	$ time (cd build-tools/api-xml-adjuster ; xbuild)
    	real	2m0.824s
    	user	1m56.140s
    	sys	0m8.600s

    A *minimum* two minute+ rebuild -- when *nothing* has changed -- is a
    surefire way to get really annoyed.

    With diagnostic logging, we start to see the culprit:

    	Target _ClassParse needs to be built as input file '@(ApiFileDefinition -> /Volumes/Seagate4TB/work/xamarin-android/build-tools/api-xml-adjuster/../../src/Mono.Android/Profiles/api-27.params.txt)' does not exist.

    This in turn causes `class-parse.exe` and `api-xml-adjuster.exe` to be
    *re-executed* on *every* `android.jar` on *every* build.

    Fix this by correcting the `//Target/@Inputs` and `//Target/@Outputs`
    for the `_ClassParse` and `_AdjustApiXml` tasks. After which,
    no-change rebuilds are *significantly* faster:

    	$ time (cd build-tools/api-xml-adjuster ; xbuild)
    	real	0m5.308s
    	user	0m6.042s
    	sys	0m1.237s

commit 20b4190
Author: Peter Collins <pecolli@microsoft.com>
Date:   Tue Feb 13 12:53:26 2018 -0500

    [BCL-Tests] Remove '-s' from _GrantPermissions (#1299)

    The [semantics of the `$(AdbTarget)` property][adb-target] are the
    same as the [`adb` Target Device option][adb], which permits any of:

    [adb-target]: Documentation/build_process.md
    [adb]: https://developer.android.com/studio/command-line/adb.html#issuingcommands

      * `-d`: Only attached *device*.
      * `-e`: Only attached *emulator*
      * `-s SERIAL_NUMBER`: A specifically named target; needed if there
        is more than one attached device or emulator.

    The problem with commit c4e8165 is that it overrode the
    `$(InstallDependsOnTargets)` property to call the `_GrantPermissions`
    target, which doesn't properly use `$(AdbTarget)`; it instead
    *requires* using the `-s` option, which is inconsistent:

    	adb -s $(AdbTarget) shell pm grant ...

    Remove `-s` from the `adb` invocation so that `$(AdbTarget)` can
    contain e.g. `-d` or `-e`, as is intended & documented.

commit a4ed574
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Tue Feb 13 16:04:44 2018 +0000

    [Xamarin.Android.Build.Tasks] Only report `ndk-bundle` if required. (#1298)

    We should only list `ndk-bundle` in the `@(AndroidDependencies)` if
    the user is using AOT or MkBundle. Otherwise we will end up
    downloading a ton of stuff we don't need.

    This commit fixes the `CalculateProjectDependencies` to report
    `ndk-bundle` if needed. It also adds a unit test to make sure
    it is not included when it shouldn't be.

commit cb68bc3
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Mon Feb 12 17:58:59 2018 -0500

    Bump to Java.Interop/master/10647a5e (#1295)

    Fixes the `ObjectDisposedException` during process shutdown described
    in commit 0a9d164.

    Moves the `ManagedPeer.Init()` invocation within the `JniRuntime`
    constructor so that a `NullReferenceException` is avoided. (Instead, a
    *different*, more meaningful exception should be thrown.)

    Bumps to cecil/mono-2017-12/1afa0668 for d15-7 harmonization.

commit f9b2c97
Author: Dean Ellis <dellis1972@googlemail.com>
Date:   Mon Feb 12 16:20:35 2018 +0000

    [Xamarin.Android.Build.Tasks] Add GetAndroidDependencies Target (#1290)

    Fixes: #1269

    This commit adds the `GetAndroidDependencies` target to the
    `Xamarin.Android.Common.targets`. Its purpose is to examine the
    various settings in the project and report which Android SDK
    build-tools, platform-tools, etc. are required.

    `GetAndroidDependencies` will output an `@(AndroidDependency)` with
    `%(AndroidDependency.Version)` metadata.

    `@(AndroidDependency)` will contain `%(Identity)` values of:

      * `build-tools;{VERSION}`, where `{VERSION}` and `%(Version)` is
         controlled by the `$(AndroidSdkBuildToolsVersion)` property.
      * `ndk-bundle`: `%(Version)` is controlled by the
        `$(AndroidNdkVersion)` property.
      * `platform-tools`: `%(Version)` is controlled by the
        `$(AndroidSdkPlatformToolsVersion)` property.
      * `platforms;android-{API}`, where `{API}` and `%(Version)` is the
        API level for the `$(TargetFrameworkVersion)` in the `.csproj`.
        For example, `platforms;android-27` for
        `$(TargetFrameworkVersion)`=`v7.1`.
      * `tools`: `%(Version)` is controlled by the
        `$(AndroidSdkToolsVersion)` property.

commit 0d822e2
Author: Jonathan Pryor <jonpryor@vt.edu>
Date:   Mon Feb 12 10:39:48 2018 -0500

    [Xamarin.Android.Build.Tasks] Improve `javac -version` parsing (#1292)

    The [Ubuntu build][0] is [failing][1]:

    	warning : Failed to get the Java SDK version as it does not appear to contain a valid version number.
    	`javac -version` returned:
    	```openjdk version "1.8.0_03-Ubuntu"
    	OpenJDK Runtime Environment (build 1.8.0_03-Ubuntu-8u77-b03-3ubuntu3-b03)
    	OpenJDK 64-Bit Server VM (build 25.03-b03, mixed mode)
    	```
    	...
    	Task "AdjustJavacVersionArguments"
    	  …/bin/Debug/lib/xamarin.android/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:
    	  error : Error executing task AdjustJavacVersionArguments: Required property 'JdkVersion' not set.

    [0]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android-linux/779/
    [1]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android-linux/779/consoleText

    This was introduced/broken by commit 0e1d1c8, which turned
    `AdjustJavacVersionArguments.JdkVersion` into a `[Required]`
    parameter. The value for `AdjustJavacVersionArguments.JdkVersion`
    comes from the `<ResolveSdks/>` task `JdkVersion` output parameter,
    which itself comes from parsing `javac -version` output.

    The problem is that the regex we used to parse the output of
    `javac -version` wasn't properly parsing the output on Ubuntu:

    	openjdk version "1.8.0_03-Ubuntu"

    Specifically, the `-Ubuntu` text was causing the regex to not match.

    Update the regex to be a bit more lenient, enabling it to work with
    the Ubuntu `javac -version` output, which *should* allow the build to
    progress further.

commit 0114586
Author: Jonathan Peppers <jonathan.peppers@gmail.com>
Date:   Sun Feb 11 12:53:52 2018 -0600

    [build] fix api-xml-adjuster.targets on Windows (#1291)

    Since 7d705bf, the Windows builds on VSTS have seemed to be failing. I
    tested this locally, and noticed the use of command line arguments such
    as:

        -parameter-names='%(SomeVariable)'

    Unfortunately, this isn't working on Windows due to the single quote. It
    is more appropriately expressed as:

        -parameter-names=&quot;%(SomeVariable)&quot;

    This isn't very pretty, but it should work on all platforms.

    I also fixed all the tabs I saw in this file--in favor of spaces, and
    fixed other XML code conventions.

    I will now return to my regularly scheduled baby duty.
akoeplinger pushed a commit to mono/mono that referenced this pull request Feb 22, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

        Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

        $ mono-api-html expected.xml new.xml -v
        Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
        Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
        Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
        Possible -n value: Android.Views.UnavailableException: Added type
        ...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
akoeplinger pushed a commit to mono/mono that referenced this pull request Feb 22, 2018
Context: dotnet/android#1078

xamarin-android uses `mono-api-html` and `mono-api-info` in order to
perform API comparisons; see e.g. 4e45904.

A recent problem has arisen regarding "inter-API-level diffs": there
are many API changes which we consider to be acceptable, and thus
would like to ignore. Unfortunately, `mono-api-html` doesn't support
ignoring many of these constructs, e.g. base class changes:

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

and property type changes:

	<h3>Type Changed: Android.Views.InputEvent</h3>
	<p>Modified properties:</p>
	<pre>
	<div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> int DeviceId { get; }
	</div><div data-is-breaking>	public <span class='added added-breaking-inline'>abstract</span> InputSourceType Source { get; }

Overhaul the `mono-api-html` "ignore" infrastructure:

  * Introduce ignore "scoping". Previously, the ignore options would
    only match the *member* text against any provided regular
    expression. Thus, `mono-api-html -r ToString` would ignore *all*
    members containing `ToString`. Furthermore, there was no way to
    restrict the ignore to a particular type. Expand the regex
    semantics so that the declaring type is used as a "prefix" for the
    to-be-matched text. For example, if a class `Example` is removed,
    `mono-api-html` will now match the following value against any
    `-r` regular expressions:

        Example: Removed type

  * Add a `mono-api-html -v` option, to control output verbosity.
    When specified, `mono-api-html` will print out available `-r`/etc.
    option values:

        $ mono-api-html expected.xml new.xml -v
        Possible -a value: Android.Resource: Added fields: public static const int AccessibilityEventTypes;
        Possible -r value: Android.Preferences.CheckBoxPreference: Modified base type: 'Android.Preferences.Preference' to 'Android.Preferences.TwoStatePreference'
        Possible -r value: Android.Views.InputEvent: Modified properties: public int DeviceId { get; }
        Possible -n value: Android.Views.UnavailableException: Added type
        ...

Additionally, allow `mono-api-html` to take a
`Mono.Options.ResponseFileSource`, which allows `@response-files` to
be used as command-line options.
jonpryor added a commit to xamarin/xamarin-android-api-compatibility that referenced this pull request Feb 22, 2018
Context: dotnet/android#1089

What is the purpose of the xamarin-android-api-compatibility repo?
To ensure that we don't accidentally break API, both for the latest
supported API level, and *between* API level binding assemblies.

How's that working out for us?

It could be better.

Commit e353872 was due to a discovery that `mono-api-html` behavior
had changed: it *used* to emit separate "Removed" and "Added"
declarations whenever a method was changed. Then it started emitting
"Modified" sections, but we weren't aware of this change. The result
was an [accidental API break][pr-771], and a change to start looking
for `data-is-breaking` instead of `>Removed`.

[pr-771]: dotnet/android#771 (comment)

*Then* we learned that `make check-inter-api-level` was broken, due to
bad `test` logic. This was fixed in 6dfba92.

The problem is that xamarin-android has not been able to use
[xamarin-android-api-compatibility/master][pr-1078] since 6dfba92 has
been merged, because it found [inter-API level breakage][inter-break]
that we haven't been able to work around, e.g.:

[pr-1078]: dotnet/android#1078
[inter-break]: dotnet/android#1078 (comment)

	<h3>Type Changed: Android.Preferences.CheckBoxPreference</h3>
	Modified base type: <span class='removed removed-inline removed-breaking-inline'>Android.Preferences.Preference</span> <span class='added '>Android.Preferences.TwoStatePreference</span>

The "obvious" solution would have been to use the existing
`inter-api-extra*` files/mechanism to ignore the changes which kept
`make check-inter-api-level` from succeeding, but `mono-api-html`
didn't provide a mechanism to ignore all of those changes.

Doh!

The fix? [Improve `mono-api-html` so it can ignore more][api-ignore]
API artifacts. (Additionally, improve `mono-api-html` so that we can
"scope" what changes we're ignoring, so that e.g. `mono-api-html -r`
can specify the *type* that the ignore should apply to, and not be
matched against *every member in the assembly*.)

[api-ignore]: mono/mono@de4729f

With that infrastructural change in place, update the
`inter-api-extra*` files so that the acceptable changes are ignored,
thus allowing `make check` to run w/o error on xamarin-android/master.

Additionally:

  * The updated `mono-api-html` supports response files. Update the
    `mono-api-html` invocation to provide the `inter-api-extra*` files as
    response files, instead of `cat`ing the `inter-api-extra*` files.
    Eventually, `mono-api-html` may support comments in response files, which
    would allow us to use them.

  * Update `reference/Mono.Android.xml` for `ChoiceMode`.
    Commit 6874e3f updated `Android.Widget.ListView` to use `ChoiceMode`
    instead of `int` for many of the constants. This was inadvertently
    "reverted"/overwrritten in bb8630a.

  * Add support for a new `$(HTML_OUTPUT_DIR)` make variable. If set,
    `mono-api-html`-generated HTML files will be written into the
    `$(HTML_OUTPUT_DIR)` directory.
@jonpryor
Copy link
Member Author

Superseded by PR #1328.

@jonpryor jonpryor closed this Feb 22, 2018
atsushieno added a commit to atsushieno/xamarin-android that referenced this pull request Feb 22, 2018
As part of discussion at dotnet#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.
atsushieno added a commit to atsushieno/xamarin-android-api-compatibility that referenced this pull request Feb 22, 2018
As part of discussion at dotnet/android#1078 (comment) ,
we decided to make changes to those inconsistent methods that used to be
virtual and then became abstract, to become abstract even in old API level.

It is done at metadata fixup level.

(copying the commitmsg from dotnet/android#1304)
@github-actions github-actions bot locked and limited conversation to collaborators Feb 2, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Area: xamarin-android Build Issues building the xamarin-android repo *itself*. full-mono-integration-build For PRs; run a full build (~6-10h for mono bumps), not the faster PR subset (~2h for mono bumps)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants