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

RecyclerView.Adapter setter for HasStableIds missing in v1.1.0 #94

Closed
tomcurran opened this issue Apr 30, 2020 · 4 comments
Closed

RecyclerView.Adapter setter for HasStableIds missing in v1.1.0 #94

tomcurran opened this issue Apr 30, 2020 · 4 comments
Assignees
Labels

Comments

@tomcurran
Copy link

Xamarin.Android Version (eg: 6.0):

10.2.0.100

Operating System & Version (eg: Mac OSX 10.11):

Mac OS X 10.15.4

Support Libraries Version (eg: 23.3.0):

28.0.0.1

Describe your Issue:

Xamarin.AndroidX.RecyclerView v1.0.0 has RecyclerView.Adapter setter for HasStableIds as a property. In Xamarin.AndroidX.RecyclerView v1.1.0 the set for the property is a method. v1.1.0 causes the below linking issue. Downgrading to v1.0.0 seemed to fix the issue.

Steps to Reproduce (with link to sample solution if possible):

Include any relevant Exception Stack traces, build logs, adb logs:

Mono.Linker.MarkException: Error processing method: 'System.Void [namespace].Droid.ViewIssue.StableIdsGroupedRecyclerViewAdapter::.ctor([namespace].[class])' in assembly: '[namespace].Droid.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Void AndroidX.RecyclerView.Widget.RecyclerView/Adapter::set_HasStableIds(System.Boolean)

@moljac moljac self-assigned this May 5, 2020
@jonpryor
Copy link
Member

Repro: https://github.com/thefex/XamarinTestCrashReproductionSample-HasStableIds

Additional discussion: https://gitter.im/xamarin/xamarin-android?at=5eea39b0a28e7a6fb282aed2


The fundamental problem is that the Xamarin.Android.Support.v7.RecyclerView.dll and Xamarin.AndroidX.RecyclerView.dll assemblies do not have "consistent" APIs with each other. The "AndroidX assembly rewriter" assumes that when replacing assembly references from the "old" support assemblies, that the "new" AndroidX assemblies will have the "same" member. (Note scare quotes here: the API can't be identical; AndroidX types will be used, not support types. The names must be identical, however.)

In this case, Xamarin.Android.Support.v7.RecyclerView.dll has a Android.Support.V7.Widget.RecyclerView.Adapter.HasStableIds property setter, while AndroidX.RecyclerView.Widget.RecyclerView.Adapter.HasStableIds does not have a property setter. Thus, after AndroidX migration, there is a reference to a property setter which cannot be resolved.

The fix is to ensure that the new AndroidX assemblies have "consistent" APIs with the support assemblies: while the namespaces may differ, they must provide the same type names and same member names.

@jonpryor
Copy link
Member

Random playing around, but: how do we determine how "consistent" two assemblies are?

Not necessarily a good idea, but an idea is to use monodic --method, which prints out all the types and methods in an assembly, and an awk script to "normalize" the data:

# `monodis --method` parsing
# Ignore generated method names
function PrintMethod(name) {
    if (name ~ "^n_")
        return
    if (name ~ "_.*Handler$")
        return
    print "  ", name
    return
}
function join(array, start, end, sep,    result, i)
{
    if (sep == "")
       sep = " "
    else if (sep == SUBSEP) # magic value
       sep = ""
    result = array[start]
    for (i = start + 1; i <= end; i++)
        result = result sep array[i]
    return result
}

# Because the namespaces will consistently differ, we want to instead
# print out the type name *first*, then the namespace
function PrintType(declname, name) {
    c=split(declname,parts,".")
    type=parts[c] name
    ns=join(parts,1,c-1,".")
    print type " (" ns ")"
}
/^Method Table/{next}
/^########## \.<>/{
    # compiler-generated; ignore
    SkipMembers=1
    next
}
/^########## /{
    SkipMembers=0
    if(substr($2,1,1) == ".")
        PrintType(DeclType, $2)
    else {
        DeclType=$2;
        PrintType($2, "")
    }
    next
}
# 5: default native int get_class_ref ()  (param: 4 impl_flags: cil managed )
/^[1-9][0-9]*: default native int/{
    if (SkipMembers)
        next
    PrintMethod($5)
    next
}
# 7: instance default native int get_ThresholdClass ()  (param: 4 impl_flags: cil managed )
/^[1-9][0-9]*: instance default native int/{
    if (SkipMembers)
        next
    PrintMethod($6)
    next
}
# 8: instance default class [mscorlib]System.Type get_ThresholdType ()  (param: 4 impl_flags: cil managed )
/^[1-9][0-9]*: default class/{
    if (SkipMembers)
        next
    PrintMethod($5)
    next
}
# 19: instance default class [mscorlib]System.Type get_ThresholdType ()  (param: 16 impl_flags: cil managed )
/^[1-9][0-9]*: instance default class/{
    if (SkipMembers)
        next
    PrintMethod($6)
    next
}
# 1: default void RegisterPackages ()  (param: 1 impl_flags: cil managed )
/^[1-9][0-9]*: default /{
    if (SkipMembers)
        next
    PrintMethod($4)
    next
}
# 4: instance default void '.ctor' ()  (param: 4 impl_flags: cil managed )
/^[1-9][0-9]*: instance default /{
    if (SkipMembers)
        next
    PrintMethod($5)
    next
}

We can then get the "descriptions", and compare them:

$ monodis --method obj/Debug/android/assets/Xamarin.Android.Support.v7.RecyclerView.dll|  awk -f class-description.awk > s.txt
$ monodis --method obj/Debug/android/assets/Xamarin.AndroidX.RecyclerView.dll | awk -f class-description.awk > x.txt
$ diff -u s.txt x.txt

Which results in the diff:

--- s.txt	2020-06-17 13:25:09.000000000 -0400
+++ x.txt	2020-06-17 13:25:15.000000000 -0400
@@ -1,9 +1,75 @@
 __TypeRegistrations (Java.Interop)
    RegisterPackages
    Lookup
-   lookup_android_support_v7_recyclerview_extensions_package
+   lookup_androidx_recyclerview_widget_package
    '.ctor'
-DefaultItemAnimator (Android.Support.V7.Widget)
+AdapterListUpdateCallback (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+   '.cctor'
+AsyncDifferConfig (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   get_BackgroundThreadExecutor
+   get_DiffCallback
+   get_MainThreadExecutor
+   '.cctor'
+AsyncListDiffer (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   '.ctor'
+   GetGetCurrentListHandler
+   get_CurrentList
+   AddListListener
+   RemoveListListener
+   SubmitList
+   SubmitList
+   '.cctor'
+AsyncListUtil (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   GetGetItemCountHandler
+   get_ItemCount
+   GetItem
+   GetOnRangeChangedHandler
+   OnRangeChanged
+   GetRefreshHandler
+   Refresh
+   '.cctor'
+BatchingListUpdateCallback (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   GetDispatchLastEventHandler
+   DispatchLastEvent
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+   '.cctor'
+DefaultItemAnimator (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -22,17 +88,28 @@
    GetRunPendingAnimationsHandler
    RunPendingAnimations
    '.cctor'
-DividerItemDecoration (Android.Support.V7.Widget)
+DiffUtil (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   CalculateDiff
+   CalculateDiff
+   '.cctor'
+DividerItemDecoration (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
-   SetDrawable
+   GetGetDrawableHandler
+   get_Drawable
+   set_Drawable
    SetOrientation
    '.cctor'
-GridLayoutManager (Android.Support.V7.Widget)
+GridLayoutManager (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -44,18 +121,72 @@
    GetGetSpanCountHandler
    get_SpanCount
    set_SpanCount
+   GetIsUsingSpansToEstimateScrollbarDimensionsHandler
+   get_UsingSpansToEstimateScrollbarDimensions
+   set_UsingSpansToEstimateScrollbarDimensions
    GetGetSpanSizeLookupHandler
    GetSpanSizeLookup
    SetSpanSizeLookup
    '.cctor'
-LayoutState (Android.Support.V7.Widget)
+IItemTouchUIUtil (AndroidX.RecyclerView.Widget)
+   ClearView
+   OnDraw
+   OnDrawOver
+   OnSelected
+IItemTouchUIUtilInvoker (AndroidX.RecyclerView.Widget)
+   get_java_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   GetObject
+   Validate
+   Dispose
+   '.ctor'
+   ClearView
+   OnDraw
+   OnDrawOver
+   OnSelected
+   '.cctor'
+IListUpdateCallback (AndroidX.RecyclerView.Widget)
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+IListUpdateCallbackInvoker (AndroidX.RecyclerView.Widget)
+   get_java_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   GetObject
+   Validate
+   Dispose
+   '.ctor'
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+   '.cctor'
+ItemTouchHelper (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   AttachToRecyclerView
+   OnChildViewAttachedToWindow
+   OnChildViewDetachedFromWindow
+   StartDrag
+   StartSwipe
+   '.cctor'
+LayoutState (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.cctor'
-LinearLayoutManager (Android.Support.V7.Widget)
+LinearLayoutManager (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -84,6 +215,7 @@
    GetGetStackFromEndHandler
    get_StackFromEnd
    set_StackFromEnd
+   CalculateExtraLayoutSpace
    ComputeScrollVectorForPosition
    GetFindFirstCompletelyVisibleItemPositionHandler
    FindFirstCompletelyVisibleItemPosition
@@ -99,7 +231,7 @@
    PrepareForDrop
    ScrollToPositionWithOffset
    '.cctor'
-LinearSmoothScroller (Android.Support.V7.Widget)
+LinearSmoothScroller (AndroidX.RecyclerView.Widget)
    get_MDecelerateInterpolator
    set_MDecelerateInterpolator
    get_MInterimTargetDx
@@ -134,7 +266,7 @@
    OnTargetFound
    UpdateActionForInterimTarget
    '.cctor'
-LinearSnapHelper (Android.Support.V7.Widget)
+LinearSnapHelper (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -145,7 +277,31 @@
    FindSnapView
    FindTargetSnapPosition
    '.cctor'
-OrientationHelper (Android.Support.V7.Widget)
+ListAdapter (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   '.ctor'
+   GetGetCurrentListHandler
+   get_CurrentList
+   GetGetItemCountHandler
+   get_ItemCount
+   GetItem
+   OnCurrentListChanged
+   SubmitList
+   SubmitList
+   '.cctor'
+ListAdapterInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   OnBindViewHolder
+   OnCreateViewHolder
+   '.cctor'
+OrientationHelper (AndroidX.RecyclerView.Widget)
    get_MLayoutManager
    set_MLayoutManager
    get_class_ref
@@ -185,7 +341,7 @@
    GetOnLayoutCompleteHandler
    OnLayoutComplete
    '.cctor'
-OrientationHelperInvoker (Android.Support.V7.Widget)
+OrientationHelperInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -205,7 +361,7 @@
    OffsetChild
    OffsetChildren
    '.cctor'
-PagerSnapHelper (Android.Support.V7.Widget)
+PagerSnapHelper (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -216,7 +372,7 @@
    FindSnapView
    FindTargetSnapPosition
    '.cctor'
-RecyclerView (Android.Support.V7.Widget)
+RecyclerView (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -236,6 +392,7 @@
    get_IsAnimating
    GetIsComputingLayoutHandler
    get_IsComputingLayout
+   get_IsLayoutSuppressed
    GetGetItemDecorationCountHandler
    get_ItemDecorationCount
    GetIsLayoutFrozenHandler
@@ -274,6 +431,7 @@
    ComputeVerticalScrollRange
    DispatchNestedPreScroll
    DispatchNestedScroll
+   DispatchNestedScroll
    DispatchRestoreInstanceState
    DispatchSaveInstanceState
    DrawChild
@@ -336,11 +494,13 @@
    SetViewCacheExtension
    SmoothScrollBy
    SmoothScrollBy
+   SmoothScrollBy
    SmoothScrollToPosition
    StartNestedScroll
    StopNestedScroll
    GetStopScrollHandler
    StopScroll
+   SuppressLayout
    SwapAdapter
    add_ChildViewAttachedToWindow
    remove_ChildViewAttachedToWindow
@@ -358,7 +518,7 @@
    remove_RecyclerEvent
    __CreateIRecyclerListenerImplementor
    '.cctor'
-RecyclerViewAccessibilityDelegate (Android.Support.V7.Widget)
+RecyclerViewAccessibilityDelegate (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -368,7 +528,7 @@
    GetGetItemDelegateHandler
    GetItemDelegate
    '.cctor'
-SimpleItemAnimator (Android.Support.V7.Widget)
+SimpleItemAnimator (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -403,7 +563,7 @@
    OnRemoveFinished
    OnRemoveStarting
    '.cctor'
-SimpleItemAnimatorInvoker (Android.Support.V7.Widget)
+SimpleItemAnimatorInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -416,7 +576,7 @@
    EndAnimations
    RunPendingAnimations
    '.cctor'
-SnapHelper (Android.Support.V7.Widget)
+SnapHelper (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -432,7 +592,7 @@
    FindTargetSnapPosition
    OnFling
    '.cctor'
-SnapHelperInvoker (Android.Support.V7.Widget)
+SnapHelperInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -440,7 +600,57 @@
    FindSnapView
    FindTargetSnapPosition
    '.cctor'
-StaggeredGridLayoutManager (Android.Support.V7.Widget)
+SortedList (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   '.ctor'
+   Add
+   AddAll
+   AddAll
+   AddAll
+   GetBeginBatchedUpdatesHandler
+   BeginBatchedUpdates
+   GetClearHandler
+   Clear
+   GetEndBatchedUpdatesHandler
+   EndBatchedUpdates
+   Get
+   IndexOf
+   RecalculatePositionOfItemAt
+   Remove
+   RemoveItemAt
+   ReplaceAll
+   ReplaceAll
+   ReplaceAll
+   GetSizeHandler
+   Size
+   UpdateItemAt
+   '.cctor'
+SortedListAdapterCallback (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+   '.cctor'
+SortedListAdapterCallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   AreContentsTheSame
+   AreItemsTheSame
+   Compare
+   '.cctor'
+StaggeredGridLayoutManager (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -471,32 +681,20 @@
    InvalidateSpanAssignments
    ScrollToPositionWithOffset
    '.cctor'
-SortedListAdapterCallback (Android.Support.V7.Widget.Util)
+StaggeredGridLayoutManager.Builder (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
-   '.cctor'
-SortedListAdapterCallbackInvoker (Android.Support.V7.Widget.Util)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   AreContentsTheSame
-   AreItemsTheSame
-   Compare
+   Build
+   SetBackgroundThreadExecutor
+   SetMainThreadExecutor
    '.cctor'
-IItemTouchUIUtil (Android.Support.V7.Widget.Helper)
-   ClearView
-   OnDraw
-   OnDrawOver
-   OnSelected
-IItemTouchUIUtilInvoker (Android.Support.V7.Widget.Helper)
+StaggeredGridLayoutManager.IListListener (AndroidX.RecyclerView.Widget)
+   OnCurrentListChanged
+StaggeredGridLayoutManager.IListListenerInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -505,146 +703,112 @@
    Validate
    Dispose
    '.ctor'
-   ClearView
-   OnDraw
-   OnDrawOver
-   OnSelected
+   OnCurrentListChanged
    '.cctor'
-ItemTouchHelper (Android.Support.V7.Widget.Helper)
+StaggeredGridLayoutManager.ListEventArgs (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_P0
+   get_P1
+StaggeredGridLayoutManager.IListListenerImplementor (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   OnCurrentListChanged
+   __IsEmpty
+StaggeredGridLayoutManager.DataCallback (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
-   AttachToRecyclerView
-   OnChildViewAttachedToWindow
-   OnChildViewDetachedFromWindow
-   StartDrag
-   StartSwipe
+   GetGetMaxCachedTilesHandler
+   get_MaxCachedTiles
+   FillData
+   RecycleData
+   GetRefreshDataHandler
+   RefreshData
    '.cctor'
-AdapterListUpdateCallback (Android.Support.V7.Util)
-   get_class_ref
+StaggeredGridLayoutManager.DataCallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
    get_JniPeerMembers
-   get_ThresholdClass
    get_ThresholdType
-   '.ctor'
-   '.ctor'
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
+   FillData
+   RefreshData
    '.cctor'
-AsyncListUtil (Android.Support.V7.Util)
+StaggeredGridLayoutManager.ViewCallback (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
-   GetGetItemCountHandler
-   get_ItemCount
-   GetItem
-   GetOnRangeChangedHandler
-   OnRangeChanged
-   GetRefreshHandler
-   Refresh
+   ExtendRangeInto
+   GetItemRangeInto
+   GetOnDataRefreshHandler
+   OnDataRefresh
+   OnItemLoaded
    '.cctor'
-BatchingListUpdateCallback (Android.Support.V7.Util)
-   get_class_ref
+StaggeredGridLayoutManager.ViewCallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
    get_JniPeerMembers
-   get_ThresholdClass
    get_ThresholdType
-   '.ctor'
-   '.ctor'
-   GetDispatchLastEventHandler
-   DispatchLastEvent
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
+   GetItemRangeInto
+   OnDataRefresh
+   OnItemLoaded
    '.cctor'
-DiffUtil (Android.Support.V7.Util)
+StaggeredGridLayoutManager.Callback (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
-   CalculateDiff
-   CalculateDiff
-   '.cctor'
-IListUpdateCallback (Android.Support.V7.Util)
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
-IListUpdateCallbackInvoker (Android.Support.V7.Util)
-   get_java_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   GetObject
-   Validate
-   Dispose
    '.ctor'
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
+   GetGetNewListSizeHandler
+   get_NewListSize
+   GetGetOldListSizeHandler
+   get_OldListSize
+   AreContentsTheSame
+   AreItemsTheSame
+   GetChangePayload
    '.cctor'
-SortedList (Android.Support.V7.Util)
-   get_class_ref
+StaggeredGridLayoutManager.CallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
    get_JniPeerMembers
-   get_ThresholdClass
    get_ThresholdType
-   '.ctor'
-   '.ctor'
-   '.ctor'
-   Add
-   AddAll
-   AddAll
-   AddAll
-   GetBeginBatchedUpdatesHandler
-   BeginBatchedUpdates
-   GetClearHandler
-   Clear
-   GetEndBatchedUpdatesHandler
-   EndBatchedUpdates
-   Get
-   IndexOf
-   RecalculatePositionOfItemAt
-   Remove
-   RemoveItemAt
-   ReplaceAll
-   ReplaceAll
-   ReplaceAll
-   GetSizeHandler
-   Size
-   UpdateItemAt
+   get_NewListSize
+   get_OldListSize
+   AreContentsTheSame
+   AreItemsTheSame
    '.cctor'
-AsyncDifferConfig (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.DiffResult (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
-   get_BackgroundThreadExecutor
-   get_DiffCallback
-   get_MainThreadExecutor
+   ConvertNewPositionToOld
+   ConvertOldPositionToNew
+   DispatchUpdatesTo
+   DispatchUpdatesTo
    '.cctor'
-AsyncListDiffer (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemCallback (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
+   AreContentsTheSame
+   AreItemsTheSame
+   GetChangePayload
+   '.cctor'
+StaggeredGridLayoutManager.ItemCallbackInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
-   GetGetCurrentListHandler
-   get_CurrentList
-   SubmitList
+   get_JniPeerMembers
+   get_ThresholdType
+   AreContentsTheSame
+   AreItemsTheSame
    '.cctor'
-ListAdapter (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Range (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -652,19 +816,15 @@
    '.ctor'
    '.ctor'
    '.ctor'
-   GetGetItemCountHandler
-   get_ItemCount
-   GetItem
-   SubmitList
    '.cctor'
-ListAdapterInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
+StaggeredGridLayoutManager.Snake (AndroidX.RecyclerView.Widget)
+   get_class_ref
    get_JniPeerMembers
+   get_ThresholdClass
    get_ThresholdType
-   OnBindViewHolder
-   OnCreateViewHolder
+   '.ctor'
    '.cctor'
-ListAdapterInvoker.DefaultSpanSizeLookup (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.DefaultSpanSizeLookup (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -673,7 +833,7 @@
    '.ctor'
    GetSpanSize
    '.cctor'
-ListAdapterInvoker.LayoutParams (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutParams (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -689,29 +849,110 @@
    GetGetSpanSizeHandler
    get_SpanSize
    '.cctor'
-ListAdapterInvoker.SpanSizeLookup (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SpanSizeLookup (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
+   GetIsSpanGroupIndexCacheEnabledHandler
+   get_SpanGroupIndexCacheEnabled
+   set_SpanGroupIndexCacheEnabled
    GetIsSpanIndexCacheEnabledHandler
    get_SpanIndexCacheEnabled
    set_SpanIndexCacheEnabled
    GetSpanGroupIndex
    GetSpanIndex
    GetSpanSize
+   GetInvalidateSpanGroupIndexCacheHandler
+   InvalidateSpanGroupIndexCache
    GetInvalidateSpanIndexCacheHandler
    InvalidateSpanIndexCache
    '.cctor'
-ListAdapterInvoker.SpanSizeLookupInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SpanSizeLookupInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    GetSpanSize
    '.cctor'
-ListAdapterInvoker.AnchorInfo (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Callback (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   GetGetBoundingBoxMarginHandler
+   get_BoundingBoxMargin
+   get_DefaultUIUtil
+   GetIsItemViewSwipeEnabledHandler
+   get_IsItemViewSwipeEnabled
+   GetIsLongPressDragEnabledHandler
+   get_IsLongPressDragEnabled
+   CanDropOver
+   ChooseDropTarget
+   ClearView
+   ConvertToAbsoluteDirection
+   ConvertToRelativeDirection
+   GetAnimationDuration
+   GetMoveThreshold
+   GetMovementFlags
+   GetSwipeEscapeVelocity
+   GetSwipeThreshold
+   GetSwipeVelocityThreshold
+   InterpolateOutOfBoundsScroll
+   MakeFlag
+   MakeMovementFlags
+   OnChildDraw
+   OnChildDrawOver
+   OnMove
+   OnMoved
+   OnSelectedChanged
+   OnSwiped
+   '.cctor'
+StaggeredGridLayoutManager.CallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   GetMovementFlags
+   OnMove
+   OnSwiped
+   '.cctor'
+StaggeredGridLayoutManager.SimpleCallback (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   '.ctor'
+   '.ctor'
+   GetDragDirs
+   GetMovementFlags
+   GetSwipeDirs
+   SetDefaultDragDirs
+   SetDefaultSwipeDirs
+   '.cctor'
+StaggeredGridLayoutManager.SimpleCallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   OnMove
+   OnSwiped
+   '.cctor'
+StaggeredGridLayoutManager.IViewDropHandler (AndroidX.RecyclerView.Widget)
+   PrepareForDrop
+StaggeredGridLayoutManager.IViewDropHandlerInvoker (AndroidX.RecyclerView.Widget)
+   get_java_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
+   GetObject
+   Validate
+   Dispose
+   '.ctor'
+   PrepareForDrop
+   '.cctor'
+StaggeredGridLayoutManager.AnchorInfo (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -720,7 +961,7 @@
    AssignFromView
    AssignFromViewAndKeepVisibleRect
    '.cctor'
-ListAdapterInvoker.LayoutChunkResult (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutChunkResult (AndroidX.RecyclerView.Widget)
    get_MConsumed
    set_MConsumed
    get_MFinished
@@ -736,7 +977,7 @@
    '.ctor'
    '.ctor'
    '.cctor'
-ListAdapterInvoker.LayoutState (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutState (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -747,7 +988,7 @@
    AssignPositionFromScrapList
    NextViewInLimitedList
    '.cctor'
-ListAdapterInvoker.SavedState (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SavedState (AndroidX.RecyclerView.Widget)
    get_Creator
    get_class_ref
    get_JniPeerMembers
@@ -760,7 +1001,7 @@
    DescribeContents
    WriteToParcel
    '.cctor'
-ListAdapterInvoker.Adapter (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Adapter (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -769,7 +1010,6 @@
    '.ctor'
    get_HasObservers
    get_HasStableIds
-   set_HasStableIds
    GetGetItemCountHandler
    get_ItemCount
    BindViewHolder
@@ -796,9 +1036,10 @@
    OnViewDetachedFromWindow
    OnViewRecycled
    RegisterAdapterDataObserver
+   SetHasStableIds
    UnregisterAdapterDataObserver
    '.cctor'
-ListAdapterInvoker.AdapterInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.AdapterInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -806,7 +1047,7 @@
    OnBindViewHolder
    OnCreateViewHolder
    '.cctor'
-ListAdapterInvoker.AdapterDataObservable (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.AdapterDataObservable (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -822,7 +1063,7 @@
    NotifyItemRangeInserted
    NotifyItemRangeRemoved
    '.cctor'
-ListAdapterInvoker.AdapterDataObserver (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.AdapterDataObserver (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -837,14 +1078,14 @@
    OnItemRangeMoved
    OnItemRangeRemoved
    '.cctor'
-ListAdapterInvoker.AdapterDataObserverInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.AdapterDataObserverInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    '.cctor'
-ListAdapterInvoker.IChildDrawingOrderCallback (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IChildDrawingOrderCallback (AndroidX.RecyclerView.Widget)
    OnGetChildDrawingOrder
-ListAdapterInvoker.IChildDrawingOrderCallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IChildDrawingOrderCallbackInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -855,7 +1096,7 @@
    '.ctor'
    OnGetChildDrawingOrder
    '.cctor'
-ListAdapterInvoker.EdgeEffectFactory (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.EdgeEffectFactory (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -864,7 +1105,7 @@
    '.ctor'
    CreateEdgeEffect
    '.cctor'
-ListAdapterInvoker.ItemAnimator (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemAnimator (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -907,7 +1148,7 @@
    GetRunPendingAnimationsHandler
    RunPendingAnimations
    '.cctor'
-ListAdapterInvoker.ItemAnimatorInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemAnimatorInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -920,7 +1161,7 @@
    EndAnimations
    RunPendingAnimations
    '.cctor'
-ListAdapterInvoker.ItemDecoration (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemDecoration (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -934,12 +1175,12 @@
    OnDrawOver
    OnDrawOver
    '.cctor'
-ListAdapterInvoker.ItemDecorationInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemDecorationInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    '.cctor'
-ListAdapterInvoker.LayoutManager (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutManager (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1120,13 +1361,13 @@
    GetSupportsPredictiveItemAnimationsHandler
    SupportsPredictiveItemAnimations
    '.cctor'
-ListAdapterInvoker.LayoutManagerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutManagerInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    GenerateDefaultLayoutParams
    '.cctor'
-ListAdapterInvoker.LayoutParams (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutParams (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1152,10 +1393,10 @@
    GetViewNeedsUpdateHandler
    ViewNeedsUpdate
    '.cctor'
-ListAdapterInvoker.IOnChildAttachStateChangeListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnChildAttachStateChangeListener (AndroidX.RecyclerView.Widget)
    OnChildViewAttachedToWindow
    OnChildViewDetachedFromWindow
-ListAdapterInvoker.IOnChildAttachStateChangeListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnChildAttachStateChangeListenerInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1167,18 +1408,18 @@
    OnChildViewAttachedToWindow
    OnChildViewDetachedFromWindow
    '.cctor'
-ListAdapterInvoker.ChildViewAttachedToWindowEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ChildViewAttachedToWindowEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_View
-ListAdapterInvoker.ChildViewDetachedFromWindowEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ChildViewDetachedFromWindowEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_View
-ListAdapterInvoker.IOnChildAttachStateChangeListenerImplementor (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnChildAttachStateChangeListenerImplementor (AndroidX.RecyclerView.Widget)
    '.ctor'
    OnChildViewAttachedToWindow
    OnChildViewDetachedFromWindow
    __IsEmpty
-ListAdapterInvoker.OnFlingListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.OnFlingListener (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1187,17 +1428,17 @@
    '.ctor'
    OnFling
    '.cctor'
-ListAdapterInvoker.OnFlingListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.OnFlingListenerInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    OnFling
    '.cctor'
-ListAdapterInvoker.IOnItemTouchListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnItemTouchListener (AndroidX.RecyclerView.Widget)
    OnInterceptTouchEvent
    OnRequestDisallowInterceptTouchEvent
    OnTouchEvent
-ListAdapterInvoker.IOnItemTouchListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnItemTouchListenerInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1210,26 +1451,26 @@
    OnRequestDisallowInterceptTouchEvent
    OnTouchEvent
    '.cctor'
-ListAdapterInvoker.InterceptTouchEventEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.InterceptTouchEventEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_Handled
    set_Handled
    get_RecyclerView
    get_Event
-ListAdapterInvoker.RequestDisallowInterceptTouchEventEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.RequestDisallowInterceptTouchEventEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_Disallow
-ListAdapterInvoker.TouchEventEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.TouchEventEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_RecyclerView
    get_Event
-ListAdapterInvoker.IOnItemTouchListenerImplementor (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOnItemTouchListenerImplementor (AndroidX.RecyclerView.Widget)
    '.ctor'
    OnInterceptTouchEvent
    OnRequestDisallowInterceptTouchEvent
    OnTouchEvent
    __IsEmpty
-ListAdapterInvoker.OnScrollListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.OnScrollListener (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1239,12 +1480,12 @@
    OnScrollStateChanged
    OnScrolled
    '.cctor'
-ListAdapterInvoker.OnScrollListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.OnScrollListenerInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    '.cctor'
-ListAdapterInvoker.IOrientationInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IOrientationInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1261,7 +1502,7 @@
    GetToStringHandler
    ToString
    '.cctor'
-ListAdapterInvoker.RecycledViewPool (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.RecycledViewPool (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1275,14 +1516,14 @@
    PutRecycledView
    SetMaxRecycledViews
    '.cctor'
-ListAdapterInvoker.Recycler (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Recycler (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
-   Android.Support.V7.Widget.RecyclerView/ViewHolder>
+   AndroidX.RecyclerView.Widget.RecyclerView/ViewHolder>
    BindViewToPosition
    Clear
    ConvertPreLayoutPositionToPostLayout
@@ -1290,9 +1531,9 @@
    RecycleView
    SetViewCacheSize
    '.cctor'
-ListAdapterInvoker.IRecyclerListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IRecyclerListener (AndroidX.RecyclerView.Widget)
    OnViewRecycled
-ListAdapterInvoker.IRecyclerListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IRecyclerListenerInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1303,14 +1544,14 @@
    '.ctor'
    OnViewRecycled
    '.cctor'
-ListAdapterInvoker.RecyclerEventArgs (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.RecyclerEventArgs (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_Holder
-ListAdapterInvoker.IRecyclerListenerImplementor (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IRecyclerListenerImplementor (AndroidX.RecyclerView.Widget)
    '.ctor'
    OnViewRecycled
    __IsEmpty
-ListAdapterInvoker.SavedState (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SavedState (AndroidX.RecyclerView.Widget)
    get_Creator
    get_class_ref
    get_JniPeerMembers
@@ -1318,7 +1559,7 @@
    get_ThresholdType
    '.ctor'
    '.cctor'
-ListAdapterInvoker.SimpleOnItemTouchListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SimpleOnItemTouchListener (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1329,7 +1570,7 @@
    OnRequestDisallowInterceptTouchEvent
    OnTouchEvent
    '.cctor'
-ListAdapterInvoker.SmoothScroller (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SmoothScroller (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1361,7 +1602,7 @@
    OnTargetFound
    Stop
    '.cctor'
-ListAdapterInvoker.SmoothScrollerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SmoothScrollerInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
@@ -1370,7 +1611,7 @@
    OnStop
    OnTargetFound
    '.cctor'
-ListAdapterInvoker.State (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.State (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1401,7 +1642,7 @@
    GetWillRunSimpleAnimationsHandler
    WillRunSimpleAnimations
    '.cctor'
-ListAdapterInvoker.ViewCacheExtension (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ViewCacheExtension (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1410,13 +1651,13 @@
    '.ctor'
    GetViewForPositionAndType
    '.cctor'
-ListAdapterInvoker.ViewCacheExtensionInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ViewCacheExtensionInvoker (AndroidX.RecyclerView.Widget)
    '.ctor'
    get_JniPeerMembers
    get_ThresholdType
    GetViewForPositionAndType
    '.cctor'
-ListAdapterInvoker.ViewFlinger (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ViewFlinger (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1426,14 +1667,10 @@
    GetRunHandler
    Run
    SmoothScrollBy
-   SmoothScrollBy
-   SmoothScrollBy
-   SmoothScrollBy
-   SmoothScrollBy
    GetStopHandler
    Stop
    '.cctor'
-ListAdapterInvoker.ViewHolder (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ViewHolder (AndroidX.RecyclerView.Widget)
    get_ItemView
    set_ItemView
    get_class_ref
@@ -1451,27 +1688,73 @@
    get_OldPosition
    get_Position
    '.cctor'
-ListAdapterInvoker.ViewHolderInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ViewHolderInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   '.cctor'
+StaggeredGridLayoutManager.ItemDelegate (AndroidX.RecyclerView.Widget)
+   get_class_ref
+   get_JniPeerMembers
+   get_ThresholdClass
+   get_ThresholdType
    '.ctor'
+   '.ctor'
+   '.cctor'
+StaggeredGridLayoutManager.BatchedCallback (AndroidX.RecyclerView.Widget)
+   get_class_ref
    get_JniPeerMembers
+   get_ThresholdClass
    get_ThresholdType
+   '.ctor'
+   '.ctor'
+   AreContentsTheSame
+   AreItemsTheSame
+   Compare
+   GetDispatchLastEventHandler
+   DispatchLastEvent
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
    '.cctor'
-ListAdapterInvoker.ItemDelegate (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Callback (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.ctor'
+   AreContentsTheSame
+   AreItemsTheSame
+   Compare
+   GetChangePayload
+   OnChanged
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
+   '.cctor'
+StaggeredGridLayoutManager.CallbackInvoker (AndroidX.RecyclerView.Widget)
+   '.ctor'
+   get_JniPeerMembers
+   get_ThresholdType
+   AreContentsTheSame
+   AreItemsTheSame
+   Compare
+   OnChanged
+   OnInserted
+   OnMoved
+   OnRemoved
    '.cctor'
-ListAdapterInvoker.AnchorInfo (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.AnchorInfo (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.cctor'
-ListAdapterInvoker.LayoutParams (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LayoutParams (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1487,7 +1770,7 @@
    set_FullSpan
    get_SpanIndex
    '.cctor'
-ListAdapterInvoker.LazySpanLookup (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.LazySpanLookup (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1496,7 +1779,7 @@
    GetFirstFullSpanItemInRange
    GetFullSpanItem
    '.cctor'
-ListAdapterInvoker.SavedState (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.SavedState (AndroidX.RecyclerView.Widget)
    get_Creator
    get_class_ref
    get_JniPeerMembers
@@ -1509,7 +1792,7 @@
    DescribeContents
    WriteToParcel
    '.cctor'
-ListAdapterInvoker.Span (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Span (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1531,251 +1814,7 @@
    FindLastVisibleItemPosition
    GetFocusableViewAfter
    '.cctor'
-ListAdapterInvoker.Callback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   GetGetBoundingBoxMarginHandler
-   get_BoundingBoxMargin
-   get_DefaultUIUtil
-   GetIsItemViewSwipeEnabledHandler
-   get_IsItemViewSwipeEnabled
-   GetIsLongPressDragEnabledHandler
-   get_IsLongPressDragEnabled
-   CanDropOver
-   ChooseDropTarget
-   ClearView
-   ConvertToAbsoluteDirection
-   ConvertToRelativeDirection
-   GetAnimationDuration
-   GetMoveThreshold
-   GetMovementFlags
-   GetSwipeEscapeVelocity
-   GetSwipeThreshold
-   GetSwipeVelocityThreshold
-   InterpolateOutOfBoundsScroll
-   MakeFlag
-   MakeMovementFlags
-   OnChildDraw
-   OnChildDrawOver
-   OnMove
-   OnMoved
-   OnSelectedChanged
-   OnSwiped
-   '.cctor'
-ListAdapterInvoker.CallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   GetMovementFlags
-   OnMove
-   OnSwiped
-   '.cctor'
-ListAdapterInvoker.SimpleCallback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   GetDragDirs
-   GetMovementFlags
-   GetSwipeDirs
-   SetDefaultDragDirs
-   SetDefaultSwipeDirs
-   '.cctor'
-ListAdapterInvoker.SimpleCallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   OnMove
-   OnSwiped
-   '.cctor'
-ListAdapterInvoker.IViewDropHandler (Android.Support.V7.RecyclerView.Extensions)
-   PrepareForDrop
-ListAdapterInvoker.IViewDropHandlerInvoker (Android.Support.V7.RecyclerView.Extensions)
-   get_java_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   GetObject
-   Validate
-   Dispose
-   '.ctor'
-   PrepareForDrop
-   '.cctor'
-ListAdapterInvoker.DataCallback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   GetGetMaxCachedTilesHandler
-   get_MaxCachedTiles
-   FillData
-   RecycleData
-   GetRefreshDataHandler
-   RefreshData
-   '.cctor'
-ListAdapterInvoker.DataCallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   FillData
-   RefreshData
-   '.cctor'
-ListAdapterInvoker.ViewCallback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   ExtendRangeInto
-   GetItemRangeInto
-   GetOnDataRefreshHandler
-   OnDataRefresh
-   OnItemLoaded
-   '.cctor'
-ListAdapterInvoker.ViewCallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   GetItemRangeInto
-   OnDataRefresh
-   OnItemLoaded
-   '.cctor'
-ListAdapterInvoker.Callback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   GetGetNewListSizeHandler
-   get_NewListSize
-   GetGetOldListSizeHandler
-   get_OldListSize
-   AreContentsTheSame
-   AreItemsTheSame
-   GetChangePayload
-   '.cctor'
-ListAdapterInvoker.CallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   get_NewListSize
-   get_OldListSize
-   AreContentsTheSame
-   AreItemsTheSame
-   '.cctor'
-ListAdapterInvoker.DiffResult (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   ConvertNewPositionToOld
-   ConvertOldPositionToNew
-   DispatchUpdatesTo
-   DispatchUpdatesTo
-   '.cctor'
-ListAdapterInvoker.ItemCallback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   AreContentsTheSame
-   AreItemsTheSame
-   GetChangePayload
-   '.cctor'
-ListAdapterInvoker.ItemCallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   AreContentsTheSame
-   AreItemsTheSame
-   '.cctor'
-ListAdapterInvoker.Range (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   '.ctor'
-   '.cctor'
-ListAdapterInvoker.Snake (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.cctor'
-ListAdapterInvoker.BatchedCallback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   AreContentsTheSame
-   AreItemsTheSame
-   Compare
-   GetDispatchLastEventHandler
-   DispatchLastEvent
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
-   '.cctor'
-ListAdapterInvoker.Callback (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   AreContentsTheSame
-   AreItemsTheSame
-   Compare
-   GetChangePayload
-   OnChanged
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
-   '.cctor'
-ListAdapterInvoker.CallbackInvoker (Android.Support.V7.RecyclerView.Extensions)
-   '.ctor'
-   get_JniPeerMembers
-   get_ThresholdType
-   AreContentsTheSame
-   AreItemsTheSame
-   Compare
-   OnChanged
-   OnInserted
-   OnMoved
-   OnRemoved
-   '.cctor'
-ListAdapterInvoker.Builder (Android.Support.V7.RecyclerView.Extensions)
-   get_class_ref
-   get_JniPeerMembers
-   get_ThresholdClass
-   get_ThresholdType
-   '.ctor'
-   '.ctor'
-   Build
-   SetBackgroundThreadExecutor
-   SetMainThreadExecutor
-   '.cctor'
-ListAdapterInvoker.IEdgeDirectionInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IEdgeDirectionInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1792,7 +1831,7 @@
    GetToStringHandler
    ToString
    '.cctor'
-ListAdapterInvoker.IAdapterChangesInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IAdapterChangesInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1809,9 +1848,9 @@
    GetToStringHandler
    ToString
    '.cctor'
-ListAdapterInvoker.IItemAnimatorFinishedListener (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IItemAnimatorFinishedListener (AndroidX.RecyclerView.Widget)
    OnAnimationsFinished
-ListAdapterInvoker.IItemAnimatorFinishedListenerInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IItemAnimatorFinishedListenerInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1823,11 +1862,11 @@
    GetOnAnimationsFinishedHandler
    OnAnimationsFinished
    '.cctor'
-ListAdapterInvoker.IItemAnimatorFinishedListenerImplementor (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IItemAnimatorFinishedListenerImplementor (AndroidX.RecyclerView.Widget)
    '.ctor'
    OnAnimationsFinished
    __IsEmpty
-ListAdapterInvoker.ItemHolderInfo (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ItemHolderInfo (AndroidX.RecyclerView.Widget)
    get_Bottom
    set_Bottom
    get_ChangeFlags
@@ -1847,9 +1886,9 @@
    SetFrom
    SetFrom
    '.cctor'
-ListAdapterInvoker.ILayoutPrefetchRegistry (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ILayoutPrefetchRegistry (AndroidX.RecyclerView.Widget)
    AddPosition
-ListAdapterInvoker.ILayoutPrefetchRegistryInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ILayoutPrefetchRegistryInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1860,7 +1899,7 @@
    '.ctor'
    AddPosition
    '.cctor'
-ListAdapterInvoker.Properties (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Properties (AndroidX.RecyclerView.Widget)
    get_Orientation
    set_Orientation
    get_ReverseLayout
@@ -1876,14 +1915,14 @@
    '.ctor'
    '.ctor'
    '.cctor'
-ListAdapterInvoker.ScrapData (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.ScrapData (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
    get_ThresholdType
    '.ctor'
    '.cctor'
-ListAdapterInvoker.Action (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.Action (AndroidX.RecyclerView.Widget)
    get_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1907,9 +1946,9 @@
    JumpTo
    Update
    '.cctor'
-ListAdapterInvoker.IScrollVectorProvider (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IScrollVectorProvider (AndroidX.RecyclerView.Widget)
    ComputeScrollVectorForPosition
-ListAdapterInvoker.IScrollVectorProviderInvoker (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.IScrollVectorProviderInvoker (AndroidX.RecyclerView.Widget)
    get_java_class_ref
    get_JniPeerMembers
    get_ThresholdClass
@@ -1920,7 +1959,7 @@
    '.ctor'
    ComputeScrollVectorForPosition
    '.cctor'
-ListAdapterInvoker.FullSpanItem (Android.Support.V7.RecyclerView.Extensions)
+StaggeredGridLayoutManager.FullSpanItem (AndroidX.RecyclerView.Widget)
    get_Creator
    get_class_ref
    get_JniPeerMembers

This current effort is not ideal. It does show that HasStableIds is missing:

-   set_HasStableIds

Also of note is that DividerItemDecoration has lost the SetDrawable method!

Additionally, output ordering is based on the order of types in the assembly, and when they don't match, we see "noise". In particular, DefaultItemAnimator is present in Xamarin.AndroidX.RecyclerView.dll, but it's order within the assembly has changed, resulting in the "breakage" at the top. Ditto AdapterListUpdateCallback, and many other types.

A better tool than awk will likely be desirable. Bring on the C# & Cecil app?

@moljac
Copy link
Contributor

moljac commented Jun 26, 2020

Duplicate

#121

@jpobst
Copy link
Contributor

jpobst commented May 24, 2022

This seems to have been related to the AndroidX Migration tooling:

The fundamental problem is that the Xamarin.Android.Support.v7.RecyclerView.dll and Xamarin.AndroidX.RecyclerView.dll assemblies do not have "consistent" APIs with each other. The "AndroidX assembly rewriter" assumes that when replacing assembly references from the "old" support assemblies, that the "new" AndroidX assemblies will have the "same" member. (Note scare quotes here: the API can't be identical; AndroidX types will be used, not support types. The names must be identical, however.)

AndroidX Migration tooling has been deprecated. It is highly recommended that you complete the migration to AndroidX if you have not.

We will no longer be providing updates or support to the AndroidX Migration tooling.

@jpobst jpobst closed this as not planned Won't fix, can't repro, duplicate, stale May 24, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants