From e2cc0510dee7d217a3d05838e8580a84867f944f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 8 Apr 2021 13:38:14 +0300 Subject: [PATCH] Rewrite FirDeclarationDataRegistry.data to avoid type parameter problems --- .../jetbrains/kotlin/fir/utils/ArrayMapOwner.kt | 4 ++++ .../fir/scopes/impl/FirDelegatedMemberScope.kt | 2 -- .../impl/FirObjectImportedCallableScope.kt | 1 - .../org/jetbrains/kotlin/fir/ClassMembers.kt | 2 -- .../declarations/FirDeclarationAttributes.kt | 17 +++++++++-------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt index fc701c07f6a..01f64db8bff 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt @@ -66,6 +66,10 @@ abstract class TypeRegistry { return NullableArrayMapAccessor(kClass, getId(kClass)) } + fun generateAnyNullableAccessor(kClass: KClass): NullableArrayMapAccessor { + return NullableArrayMapAccessor(kClass, getId(kClass)) + } + fun getId(kClass: KClass): Int { return idPerType.computeIfAbsent(kClass) { idCounter.getAndIncrement() } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt index 5094cd2a143..79872d2eac4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDelegatedMemberScope.kt @@ -162,8 +162,6 @@ class DelegatedWrapperData>( val containingClass: ConeClassLikeLookupTag, val delegateField: FirField, ) - -@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER") var > D.delegatedWrapperData: DelegatedWrapperData? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirObjectImportedCallableScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirObjectImportedCallableScope.kt index 9d3f77dc986..4e29e149e3c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirObjectImportedCallableScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirObjectImportedCallableScope.kt @@ -63,6 +63,5 @@ class ImportedFromObjectData>( val original: D, ) -@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER") var > D.importedFromObjectData: ImportedFromObjectData? by FirDeclarationDataRegistry.data(ImportedFromObjectClassIdKey) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt index 1322b844198..47236efb14b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt @@ -80,13 +80,11 @@ inline fun > S.unwrapFakeOverrides(): S = fir.u private object SubstitutedOverrideOriginalKey : FirDeclarationDataKey() -@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER") var > D.originalForSubstitutionOverrideAttr: D? by FirDeclarationDataRegistry.data(SubstitutedOverrideOriginalKey) private object IntersectionOverrideOriginalKey : FirDeclarationDataKey() -@Suppress("DELEGATE_USES_EXTENSION_PROPERTY_TYPE_PARAMETER") var > D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt index 698e7ffd4ef..08db07b21fb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt @@ -40,9 +40,9 @@ class FirDeclarationAttributes : AttributeArrayOwner * var FirDeclaration.someString: String? by FirDeclarationDataRegistry.data(SomeKey) */ object FirDeclarationDataRegistry : TypeRegistry() { - fun data(key: K): ReadWriteProperty { + fun data(key: K): DeclarationDataAccessor { val kClass = key::class - return DeclarationDataAccessor(generateNullableAccessor(kClass), kClass) + return DeclarationDataAccessor(generateAnyNullableAccessor(kClass), kClass) } fun attributesAccessor(key: K): ReadWriteProperty { @@ -50,15 +50,16 @@ object FirDeclarationDataRegistry : TypeRegistry() { return AttributeDataAccessor(generateNullableAccessor(kClass), kClass) } - private class DeclarationDataAccessor( - val dataAccessor: NullableArrayMapAccessor, + class DeclarationDataAccessor( + private val dataAccessor: NullableArrayMapAccessor, val key: KClass - ) : ReadWriteProperty { - override fun getValue(thisRef: FirDeclaration, property: KProperty<*>): V? { - return dataAccessor.getValue(thisRef.attributes, property) + ) { + operator fun 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 setValue(thisRef: FirDeclaration, property: KProperty<*>, value: V?) { thisRef.attributes[key] = value } }