Fix superclass chaining when adding descriptor late
Summary: External frameworks such as litho add their descriptors with register descriptor, we need to make sure that we set up the superclass chaing for these Reviewed By: lblasa Differential Revision: D40021843 fbshipit-source-id: 41666e5e3a31f249f7dfd550c15d747d394d2a8f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
de1eece900
commit
c9983edb1a
@@ -38,14 +38,26 @@ class DescriptorRegister {
|
|||||||
mapping.register(android.app.Fragment::class.java, FragmentFrameworkDescriptor)
|
mapping.register(android.app.Fragment::class.java, FragmentFrameworkDescriptor)
|
||||||
mapping.register(androidx.fragment.app.Fragment::class.java, FragmentSupportDescriptor)
|
mapping.register(androidx.fragment.app.Fragment::class.java, FragmentSupportDescriptor)
|
||||||
|
|
||||||
|
return mapping
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> register(clazz: Class<T>, descriptor: NodeDescriptor<T>) {
|
||||||
|
register[clazz] = descriptor
|
||||||
|
setSuper()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setSuper() {
|
||||||
@Suppress("unchecked_cast")
|
@Suppress("unchecked_cast")
|
||||||
for (clazz in mapping.register.keys) {
|
for (clazz in this.register.keys) {
|
||||||
val maybeDescriptor: NodeDescriptor<*>? = mapping.register[clazz]
|
val maybeDescriptor: NodeDescriptor<*>? = this.register[clazz]
|
||||||
maybeDescriptor?.let { descriptor ->
|
maybeDescriptor?.let { descriptor ->
|
||||||
if (descriptor is ChainedDescriptor<*>) {
|
if (descriptor is ChainedDescriptor<*>) {
|
||||||
|
|
||||||
val chainedDescriptor = descriptor as ChainedDescriptor<Any>
|
val chainedDescriptor = descriptor as ChainedDescriptor<Any>
|
||||||
val superClass: Class<*> = clazz.superclass
|
val superClass: Class<*> = clazz.superclass
|
||||||
val maybeSuperDescriptor: NodeDescriptor<*>? = mapping.descriptorForClass(superClass)
|
|
||||||
|
val maybeSuperDescriptor: NodeDescriptor<*>? = this.descriptorForClass(superClass)
|
||||||
|
|
||||||
maybeSuperDescriptor?.let { superDescriptor ->
|
maybeSuperDescriptor?.let { superDescriptor ->
|
||||||
if (superDescriptor is ChainedDescriptor<*>) {
|
if (superDescriptor is ChainedDescriptor<*>) {
|
||||||
@@ -55,13 +67,6 @@ class DescriptorRegister {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mapping
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <T> register(clazz: Class<T>, descriptor: NodeDescriptor<T>) {
|
|
||||||
register[clazz] = descriptor
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> descriptorForClass(clazz: Class<T>): NodeDescriptor<T>? {
|
fun <T> descriptorForClass(clazz: Class<T>): NodeDescriptor<T>? {
|
||||||
|
|||||||
Reference in New Issue
Block a user