Rewrite FirDeclarationDataRegistry.data to avoid type parameter problems
This commit is contained in:
@@ -80,13 +80,11 @@ inline fun <reified S : FirCallableSymbol<*>> S.unwrapFakeOverrides(): S = fir.u
|
||||
|
||||
private object SubstitutedOverrideOriginalKey : FirDeclarationDataKey()
|
||||
|
||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
||||
var <D : FirCallableDeclaration<*>>
|
||||
D.originalForSubstitutionOverrideAttr: D? by FirDeclarationDataRegistry.data(SubstitutedOverrideOriginalKey)
|
||||
|
||||
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
|
||||
|
||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
||||
var <D : FirCallableDeclaration<*>>
|
||||
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)
|
||||
*/
|
||||
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
|
||||
return DeclarationDataAccessor(generateNullableAccessor(kClass), kClass)
|
||||
return DeclarationDataAccessor(generateAnyNullableAccessor(kClass), kClass)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
private class DeclarationDataAccessor<V : Any>(
|
||||
val dataAccessor: NullableArrayMapAccessor<FirDeclarationDataKey, Any, V>,
|
||||
class DeclarationDataAccessor(
|
||||
private val dataAccessor: NullableArrayMapAccessor<FirDeclarationDataKey, Any, *>,
|
||||
val key: KClass<out FirDeclarationDataKey>
|
||||
) : ReadWriteProperty<FirDeclaration, V?> {
|
||||
override fun getValue(thisRef: FirDeclaration, property: KProperty<*>): V? {
|
||||
return dataAccessor.getValue(thisRef.attributes, property)
|
||||
) {
|
||||
operator fun <V> getValue(thisRef: FirDeclaration, property: KProperty<*>): V? {
|
||||
@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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user