[FIR] Rename FirSyntheticPropertiesStorage, extract property creation
This commit is contained in:
committed by
Space Team
parent
075a80613b
commit
ccc3f52acf
-27
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.java
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||
import org.jetbrains.kotlin.fir.caches.createCache
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirOriginalSyntheticPropertiesStorage(session: FirSession) : FirSessionComponent {
|
||||
private val cachesFactory = session.firCachesFactory
|
||||
|
||||
val cacheByOwner: FirCache<FirRegularClassSymbol, FirCache<Name, FirSyntheticPropertySymbol, FirSyntheticPropertySymbol>, Nothing?> =
|
||||
cachesFactory.createCache { _ ->
|
||||
cachesFactory.createCache { _, symbol -> symbol }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
val FirSession.originalSyntheticPropertiesStorage: FirOriginalSyntheticPropertiesStorage by FirSession.sessionComponentAccessor()
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.java
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||
import org.jetbrains.kotlin.fir.caches.createCache
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.java.scopes.JavaClassUseSiteMemberScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.ResultOfIntersection
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
typealias SyntheticPropertiesCache = FirCache<Name, FirSyntheticPropertySymbol?, Pair<JavaClassUseSiteMemberScope, ResultOfIntersection<FirPropertySymbol>>>
|
||||
|
||||
class FirSyntheticPropertiesStorage(session: FirSession) : FirSessionComponent {
|
||||
private val cachesFactory = session.firCachesFactory
|
||||
|
||||
val cacheByOwner: FirCache<FirRegularClass, SyntheticPropertiesCache, Nothing?> =
|
||||
cachesFactory.createCache { _ ->
|
||||
cachesFactory.createCache { _, (scope, intersection) ->
|
||||
scope.syntheticPropertyFromOverride(intersection)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val FirSession.syntheticPropertiesStorage: FirSyntheticPropertiesStorage by FirSession.sessionComponentAccessor()
|
||||
+32
-31
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||
import org.jetbrains.kotlin.fir.java.declarations.buildJavaMethodCopy
|
||||
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameterCopy
|
||||
import org.jetbrains.kotlin.fir.java.syntheticPropertiesStorage
|
||||
import org.jetbrains.kotlin.fir.java.symbols.FirJavaOverriddenSyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.java.originalSyntheticPropertiesStorage
|
||||
import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
@@ -65,7 +65,7 @@ class JavaClassUseSiteMemberScope(
|
||||
|
||||
private val javaOverrideChecker: JavaOverrideChecker get() = overrideChecker as JavaOverrideChecker
|
||||
|
||||
private val syntheticPropertyCache = session.originalSyntheticPropertiesStorage.cacheByOwner.getValue(klass.symbol, null)
|
||||
private val syntheticPropertyCache = session.syntheticPropertiesStorage.cacheByOwner.getValue(klass, null)
|
||||
|
||||
private fun generateSyntheticPropertySymbol(
|
||||
getterSymbol: FirNamedFunctionSymbol,
|
||||
@@ -73,27 +73,24 @@ class JavaClassUseSiteMemberScope(
|
||||
property: FirProperty,
|
||||
takeModalityFromGetter: Boolean,
|
||||
): FirSyntheticPropertySymbol {
|
||||
return syntheticPropertyCache.getValue(
|
||||
property.name,
|
||||
buildSyntheticProperty {
|
||||
moduleData = session.moduleData
|
||||
name = property.name
|
||||
symbol = FirJavaOverriddenSyntheticPropertySymbol(
|
||||
getterId = getterSymbol.callableId,
|
||||
propertyId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, property.name)
|
||||
)
|
||||
delegateGetter = getterSymbol.fir
|
||||
delegateSetter = setterSymbol?.fir
|
||||
status = getterSymbol.fir.status.copy(
|
||||
modality = if (takeModalityFromGetter) {
|
||||
delegateGetter.modality ?: property.modality
|
||||
} else {
|
||||
chooseModalityForAccessor(property, delegateGetter)
|
||||
}
|
||||
)
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(session, delegateGetter, delegateSetter)
|
||||
}.symbol
|
||||
)
|
||||
return buildSyntheticProperty {
|
||||
moduleData = session.moduleData
|
||||
name = property.name
|
||||
symbol = FirJavaOverriddenSyntheticPropertySymbol(
|
||||
getterId = getterSymbol.callableId,
|
||||
propertyId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, property.name)
|
||||
)
|
||||
delegateGetter = getterSymbol.fir
|
||||
delegateSetter = setterSymbol?.fir
|
||||
status = getterSymbol.fir.status.copy(
|
||||
modality = if (takeModalityFromGetter) {
|
||||
delegateGetter.modality ?: property.modality
|
||||
} else {
|
||||
chooseModalityForAccessor(property, delegateGetter)
|
||||
}
|
||||
)
|
||||
deprecationsProvider = getDeprecationsProviderFromAccessors(session, delegateGetter, delegateSetter)
|
||||
}.symbol
|
||||
}
|
||||
|
||||
private fun chooseModalityForAccessor(property: FirProperty, getter: FirSimpleFunction): Modality? {
|
||||
@@ -143,13 +140,7 @@ class JavaClassUseSiteMemberScope(
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val overriddenProperty = propertiesFromSupertypes.firstOrNull() as ResultOfIntersection<FirPropertySymbol>? ?: return result
|
||||
|
||||
val overrideInClass = overriddenProperty.overriddenMembers.firstNotNullOfOrNull { (symbol, _) ->
|
||||
symbol.createOverridePropertyIfExists(declaredMemberScope, takeModalityFromGetter = true)
|
||||
?: superTypeScopes.firstNotNullOfOrNull { scope ->
|
||||
symbol.createOverridePropertyIfExists(scope, takeModalityFromGetter = false)
|
||||
}
|
||||
}
|
||||
val overrideInClass = syntheticPropertyCache.getValue(name, this to overriddenProperty)
|
||||
|
||||
val chosenSymbol = overrideInClass ?: overriddenProperty.chosenSymbol
|
||||
directOverriddenProperties[chosenSymbol] = listOf(overriddenProperty)
|
||||
@@ -158,10 +149,20 @@ class JavaClassUseSiteMemberScope(
|
||||
return result
|
||||
}
|
||||
|
||||
internal fun syntheticPropertyFromOverride(overriddenProperty: ResultOfIntersection<FirPropertySymbol>): FirSyntheticPropertySymbol? {
|
||||
val overrideInClass = overriddenProperty.overriddenMembers.firstNotNullOfOrNull { (symbol, _) ->
|
||||
symbol.createOverridePropertyIfExists(declaredMemberScope, takeModalityFromGetter = true)
|
||||
?: superTypeScopes.firstNotNullOfOrNull { scope ->
|
||||
symbol.createOverridePropertyIfExists(scope, takeModalityFromGetter = false)
|
||||
}
|
||||
}
|
||||
return overrideInClass
|
||||
}
|
||||
|
||||
private fun FirPropertySymbol.createOverridePropertyIfExists(
|
||||
scope: FirScope,
|
||||
takeModalityFromGetter: Boolean
|
||||
): FirPropertySymbol? {
|
||||
): FirSyntheticPropertySymbol? {
|
||||
val getterSymbol = this.findGetterOverride(scope) ?: return null
|
||||
val setterSymbol =
|
||||
if (this.fir.isVar)
|
||||
|
||||
Reference in New Issue
Block a user