Skip to content

Conversation

@jonpryor
Copy link
Contributor

Commit dfed286 updated Cecil to Cecil 0.10.0-beta1-v2, which has
multiple API incompatibilities with Cecil 0.9.6.

Unfortunately, some of these incompatibilities were hidden by use of
the .Cast<T>() extension method, which was used because older
versions of Cecil didn't use generics at all, so the .Cast<T>() was
present to provide types.

Types which became wrong with Cecil 0.10.0.

The result is that when
building xamarin-android with a newer Java.Interop,
things broke:

jcw-gen: System.InvalidCastException: Unable to cast object of type 'Mono.Cecil.InterfaceImplementation' to type 'Mono.Cecil.TypeReference'.
  at (wrapper castclass) System.Object:__castclass_with_cache (object,intptr,intptr)
  at System.Linq.Enumerable+<CastIterator>c__Iterator17`1[TResult].MoveNext () [0x00059] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:916
  at System.Linq.Enumerable+WhereSelectEnumerableIterator`2[TSource,TResult].MoveNext () [0x00078] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:282
  at System.Linq.Enumerable+WhereEnumerableIterator`1[TSource].MoveNext () [0x00062] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:147
  at System.Linq.Enumerable+<SelectManyIterator>c__Iterator2`2[TSource,TResult].MoveNext () [0x0009a] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:424
  at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator..ctor (Mono.Cecil.TypeDefinition type, System.String outerType, System.Action`2 log) [0x00332] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:144
  at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator..ctor (Mono.Cecil.TypeDefinition type, System.Action`2 log) [0x00000] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:60
  at Java.Interop.Tools.App.GenerateJavaCallableWrapper (Mono.Cecil.TypeDefinition type, System.String outputPath) [0x0001f] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/tools/jcw-gen/App.cs:78
  at Java.Interop.Tools.App.Main (System.String[] args) [0x00265] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/tools/jcw-gen/App.cs:66

Remove use of .Cast<T>(): it's superfluous now that Cecil uses
generics (and has for ages...), and it's use introduces bugs.

Commit dfed286 updated Cecil to Cecil 0.10.0-beta1-v2, which has
multiple API incompatibilities with Cecil 0.9.6.

Unfortunately, some of these incompatibilities were hidden by use of
the `.Cast<T>()` extension method, which was used because older
versions of Cecil didn't use generics at all, so the `.Cast<T>()` was
present to provide types.

Types which became wrong with Cecil 0.10.0.

The result is that when
[building xamarin-android with a newer Java.Interop][0],
[things broke][1]:

	jcw-gen: System.InvalidCastException: Unable to cast object of type 'Mono.Cecil.InterfaceImplementation' to type 'Mono.Cecil.TypeReference'.
	  at (wrapper castclass) System.Object:__castclass_with_cache (object,intptr,intptr)
	  at System.Linq.Enumerable+<CastIterator>c__Iterator17`1[TResult].MoveNext () [0x00059] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:916
	  at System.Linq.Enumerable+WhereSelectEnumerableIterator`2[TSource,TResult].MoveNext () [0x00078] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:282
	  at System.Linq.Enumerable+WhereEnumerableIterator`1[TSource].MoveNext () [0x00062] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:147
	  at System.Linq.Enumerable+<SelectManyIterator>c__Iterator2`2[TSource,TResult].MoveNext () [0x0009a] in /private/tmp/source-mono-4.4.0-c7sr1/bockbuild-mono-4.4.0-branch-c7sr1/profiles/mono-mac-xamarin/build-root/mono-x86/external/referencesource/System.Core/System/Linq/Enumerable.cs:424
	  at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator..ctor (Mono.Cecil.TypeDefinition type, System.String outerType, System.Action`2 log) [0x00332] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:144
	  at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator..ctor (Mono.Cecil.TypeDefinition type, System.Action`2 log) [0x00000] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:60
	  at Java.Interop.Tools.App.GenerateJavaCallableWrapper (Mono.Cecil.TypeDefinition type, System.String outputPath) [0x0001f] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/tools/jcw-gen/App.cs:78
	  at Java.Interop.Tools.App.Main (System.String[] args) [0x00265] in /Users/builder/jenkins/workspace/xamarin-android-pr-builder/xamarin-android/external/Java.Interop/tools/jcw-gen/App.cs:66

Remove use of `.Cast<T>()`: it's superfluous now that Cecil uses
generics (and has for ages...), and it's use introduces bugs.

[0]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android-pr-builder/164/
[1]: https://jenkins.mono-project.com/view/Xamarin.Android/job/xamarin-android-pr-builder/162/consoleText
@jonpryor jonpryor changed the title [generator] Fix InvalidCastException from Cecil upgrade [jcw-gen] Fix InvalidCastException from Cecil upgrade Sep 15, 2016
@atsushieno atsushieno merged commit a1d3ecc into dotnet:master Sep 15, 2016
jonpryor added a commit to jonpryor/java.interop that referenced this pull request Apr 30, 2020
Changes: dotnet/android-tools@36d7fee...f5fcb9f

  * dotnet/android-tools@f5fcb9f: [Xamarin.Android.Tools.AndroidSdk] Add support for cmdline-tools (dotnet#83)
  * dotnet/android-tools@f473ff9: [AndroidSdkWindows] Guard against exception checking registry (dotnet#79)
jonpryor added a commit that referenced this pull request May 1, 2020
Changes: dotnet/android-tools@36d7fee...f5fcb9f

  * dotnet/android-tools@f5fcb9f: [Xamarin.Android.Tools.AndroidSdk] Add support for cmdline-tools (#83)
  * dotnet/android-tools@f473ff9: [AndroidSdkWindows] Guard against exception checking registry (#79)
jonpryor added a commit that referenced this pull request May 6, 2020
Changes: dotnet/android-tools@310c5cf...23c4fe0

  * dotnet/android-tools@23c4fe0: [Xamarin.Android.Tools.AndroidSdk] Add support for cmdline-tools (#83)
  * dotnet/android-tools@cf9d325: [AndroidSdkWindows] Guard against exception checking registry (#79)
@github-actions github-actions bot locked and limited conversation to collaborators Apr 15, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants