Rewrite FirDeclarationDataRegistry.data to avoid type parameter problems
This commit is contained in:
@@ -66,6 +66,10 @@ abstract class TypeRegistry<K : Any, V : Any> {
|
|||||||
return NullableArrayMapAccessor(kClass, getId(kClass))
|
return NullableArrayMapAccessor(kClass, getId(kClass))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun <KK : K> generateAnyNullableAccessor(kClass: KClass<KK>): NullableArrayMapAccessor<K, V, *> {
|
||||||
|
return NullableArrayMapAccessor(kClass, getId(kClass))
|
||||||
|
}
|
||||||
|
|
||||||
fun <T : K> getId(kClass: KClass<T>): Int {
|
fun <T : K> getId(kClass: KClass<T>): Int {
|
||||||
return idPerType.computeIfAbsent(kClass) { idCounter.getAndIncrement() }
|
return idPerType.computeIfAbsent(kClass) { idCounter.getAndIncrement() }
|
||||||
}
|
}
|
||||||
|
|||||||
-2
@@ -162,8 +162,6 @@ class DelegatedWrapperData<D : FirCallableDeclaration<*>>(
|
|||||||
val containingClass: ConeClassLikeLookupTag,
|
val containingClass: ConeClassLikeLookupTag,
|
||||||
val delegateField: FirField,
|
val delegateField: FirField,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
|
||||||
var <D : FirCallableDeclaration<*>>
|
var <D : FirCallableDeclaration<*>>
|
||||||
D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey)
|
D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey)
|
||||||
|
|
||||||
|
|||||||
-1
@@ -63,6 +63,5 @@ class ImportedFromObjectData<D : FirCallableDeclaration<*>>(
|
|||||||
val original: D,
|
val original: D,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
|
||||||
var <D : FirCallableDeclaration<*>>
|
var <D : FirCallableDeclaration<*>>
|
||||||
D.importedFromObjectData: ImportedFromObjectData<D>? by FirDeclarationDataRegistry.data(ImportedFromObjectClassIdKey)
|
D.importedFromObjectData: ImportedFromObjectData<D>? by FirDeclarationDataRegistry.data(ImportedFromObjectClassIdKey)
|
||||||
|
|||||||
@@ -80,13 +80,11 @@ inline fun <reified S : FirCallableSymbol<*>> S.unwrapFakeOverrides(): S = fir.u
|
|||||||
|
|
||||||
private object SubstitutedOverrideOriginalKey : FirDeclarationDataKey()
|
private object SubstitutedOverrideOriginalKey : FirDeclarationDataKey()
|
||||||
|
|
||||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
|
||||||
var <D : FirCallableDeclaration<*>>
|
var <D : FirCallableDeclaration<*>>
|
||||||
D.originalForSubstitutionOverrideAttr: D? by FirDeclarationDataRegistry.data(SubstitutedOverrideOriginalKey)
|
D.originalForSubstitutionOverrideAttr: D? by FirDeclarationDataRegistry.data(SubstitutedOverrideOriginalKey)
|
||||||
|
|
||||||
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
||||||
|
|
||||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
|
||||||
var <D : FirCallableDeclaration<*>>
|
var <D : FirCallableDeclaration<*>>
|
||||||
D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey)
|
D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey)
|
||||||
|
|
||||||
|
|||||||
+9
-8
@@ -40,9 +40,9 @@ class FirDeclarationAttributes : AttributeArrayOwner<FirDeclarationDataKey, Any>
|
|||||||
* var FirDeclaration.someString: String? by FirDeclarationDataRegistry.data(SomeKey)
|
* var FirDeclaration.someString: String? by FirDeclarationDataRegistry.data(SomeKey)
|
||||||
*/
|
*/
|
||||||
object FirDeclarationDataRegistry : TypeRegistry<FirDeclarationDataKey, Any>() {
|
object FirDeclarationDataRegistry : TypeRegistry<FirDeclarationDataKey, Any>() {
|
||||||
fun <K : FirDeclarationDataKey, V : Any> data(key: K): ReadWriteProperty<FirDeclaration, V?> {
|
fun <K : FirDeclarationDataKey> data(key: K): DeclarationDataAccessor {
|
||||||
val kClass = key::class
|
val kClass = key::class
|
||||||
return DeclarationDataAccessor(generateNullableAccessor(kClass), kClass)
|
return DeclarationDataAccessor(generateAnyNullableAccessor(kClass), kClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <K : FirDeclarationDataKey, V : Any> attributesAccessor(key: K): ReadWriteProperty<FirDeclarationAttributes, V?> {
|
fun <K : FirDeclarationDataKey, V : Any> attributesAccessor(key: K): ReadWriteProperty<FirDeclarationAttributes, V?> {
|
||||||
@@ -50,15 +50,16 @@ object FirDeclarationDataRegistry : TypeRegistry<FirDeclarationDataKey, Any>() {
|
|||||||
return AttributeDataAccessor(generateNullableAccessor(kClass), kClass)
|
return AttributeDataAccessor(generateNullableAccessor(kClass), kClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DeclarationDataAccessor<V : Any>(
|
class DeclarationDataAccessor(
|
||||||
val dataAccessor: NullableArrayMapAccessor<FirDeclarationDataKey, Any, V>,
|
private val dataAccessor: NullableArrayMapAccessor<FirDeclarationDataKey, Any, *>,
|
||||||
val key: KClass<out FirDeclarationDataKey>
|
val key: KClass<out FirDeclarationDataKey>
|
||||||
) : ReadWriteProperty<FirDeclaration, V?> {
|
) {
|
||||||
override fun getValue(thisRef: FirDeclaration, property: KProperty<*>): V? {
|
operator fun <V> getValue(thisRef: FirDeclaration, property: KProperty<*>): V? {
|
||||||
return dataAccessor.getValue(thisRef.attributes, property)
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
return dataAccessor.getValue(thisRef.attributes, property) as? V
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setValue(thisRef: FirDeclaration, property: KProperty<*>, value: V?) {
|
operator fun <V> setValue(thisRef: FirDeclaration, property: KProperty<*>, value: V?) {
|
||||||
thisRef.attributes[key] = value
|
thisRef.attributes[key] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user