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))
|
||||
}
|
||||
|
||||
fun <KK : K> generateAnyNullableAccessor(kClass: KClass<KK>): NullableArrayMapAccessor<K, V, *> {
|
||||
return NullableArrayMapAccessor(kClass, getId(kClass))
|
||||
}
|
||||
|
||||
fun <T : K> getId(kClass: KClass<T>): Int {
|
||||
return idPerType.computeIfAbsent(kClass) { idCounter.getAndIncrement() }
|
||||
}
|
||||
|
||||
-2
@@ -162,8 +162,6 @@ class DelegatedWrapperData<D : FirCallableDeclaration<*>>(
|
||||
val containingClass: ConeClassLikeLookupTag,
|
||||
val delegateField: FirField,
|
||||
)
|
||||
|
||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
||||
var <D : FirCallableDeclaration<*>>
|
||||
D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey)
|
||||
|
||||
|
||||
-1
@@ -63,6 +63,5 @@ class ImportedFromObjectData<D : FirCallableDeclaration<*>>(
|
||||
val original: D,
|
||||
)
|
||||
|
||||
@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER")
|
||||
var <D : FirCallableDeclaration<*>>
|
||||
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()
|
||||
|
||||
@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