You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Context: f07b538
Context: https://github.com/jpobst/BindingStudio
While using jpobst/BindingStudio to enumify API-36.1, it would crash:
System.NotSupportedException: Could not parse `W` as an ApiLevel.
at Java.Interop.Tools.Generator.AndroidSdkVersion.Parse(String value) in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Utilities\AndroidSdkVersion.cs:line 124
at Java.Interop.Tools.Generator.NamingConverter.ParseApiLevel(String value) in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Utilities\NamingConverter.cs:line 21
at Java.Interop.Tools.Generator.NamingConverter.ParseApiLevel(XElement element) in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Utilities\NamingConverter.cs:line 60
at Java.Interop.Tools.Generator.Enumification.MethodMapEntry.FromElement(XElement element, String parameterName) in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Enumification\MethodMapEntry.cs:line 41
at Java.Interop.Tools.Generator.Enumification.MethodMapEntry.FromElement(XElement element, String parameterName) in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Enumification\MethodMapEntry.cs:line 54
at Java.Interop.Tools.Generator.Enumification.MethodMapEntry.FromXml(XElement element)+MoveNext() in W:\src\jpobst\BindingStudio\external\Java.Interop\src\Java.Interop.Tools.Generator\Enumification\MethodMapEntry.cs:line 31
The cause of the crash is that the `api-36.1.xml` file it was
processing had `//@merge.SourceFile` attributes with the value:
merge.SourceFile="…Xamarin-Work/src/dotnet/android/build-tools/create-android-api/../../bin/BuildDebug/api/api-36.1.xml.in"
Notice the `-Work` in the value. This was used by `ExtractApiLevel()`
to try to find numbers after the `-`, but `W` was after the `-`, not
numbers.
This didn't previously matter because f07b538 noted:
> *Note*: Changes to `NamingConverter.ParseApiLevel()` are largely a
> nothing-burger because the dotnet/android side usually has metadata:
>
> <attr
> api-since="36.1"
> path="/api//*[contains(@merge.SourceFile,'api-CANARY.xml.in')]"
> name="api-since">36.1</attr
>
> which explicitly adds/sets `//@api-since` based on the
> `//@merge.SourceFile` value.
However, when jpobst/BindingStudio is used, `src/Mono.Android/metadata`
is *not* used, and `//@merge.SourceFile` is instead used.
Improve `ParseApiLevel()` to check for an `api-` prefix before
looking for trailing numeric data.
0 commit comments