FIR IDE: extract callable symbol building from KtSymbolByFirBuilder
This commit is contained in:
+1
-1
@@ -138,7 +138,7 @@ private object FirToKtConversionCreator {
|
||||
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration")
|
||||
),
|
||||
FirCallableDeclaration::class to HLFunctionCallConversion(
|
||||
"firSymbolBuilder.buildCallableSymbol({0} as FirCallableDeclaration)",
|
||||
"firSymbolBuilder.callableBuilder.buildCallableSymbol({0} as FirCallableDeclaration)",
|
||||
KtCallableSymbol::class.createType(),
|
||||
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration")
|
||||
),
|
||||
|
||||
+31
-28
@@ -55,6 +55,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
val classifierBuilder = ClassifierSymbolBuilder()
|
||||
val functionLikeBuilder = FunctionLikeSymbolBuilder()
|
||||
val variableLikeBuilder = VariableLikeSymbolBuilder()
|
||||
val callableBuilder = CallableSymbolBuilder()
|
||||
|
||||
constructor(
|
||||
resolveState: FirModuleResolveState,
|
||||
@@ -89,7 +90,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
return when (fir) {
|
||||
is FirClassLikeDeclaration<*> -> classifierBuilder.buildClassLikeSymbol(fir)
|
||||
is FirTypeParameter -> classifierBuilder.buildTypeParameterSymbol(fir)
|
||||
is FirCallableDeclaration<*> -> buildCallableSymbol(fir)
|
||||
is FirCallableDeclaration<*> -> callableBuilder.buildCallableSymbol(fir)
|
||||
else -> error("Unexpected ${fir::class.simpleName}")
|
||||
}
|
||||
}
|
||||
@@ -98,33 +99,6 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
fun buildEnumEntrySymbol(fir: FirEnumEntry) = symbolsCache.cache(fir) { KtFirEnumEntrySymbol(fir, resolveState, token, this) }
|
||||
|
||||
|
||||
fun buildCallableSymbol(fir: FirCallableDeclaration<*>): KtCallableSymbol {
|
||||
return when (fir) {
|
||||
is FirPropertyAccessor -> buildPropertyAccessorSymbol(fir)
|
||||
is FirFunction<*> -> functionLikeSymbolBuilder.buildFunctionLikeSymbol(fir)
|
||||
is FirVariable<*> -> variableLikeSymbolBuilder.buildVariableLikeSymbol(fir)
|
||||
else -> error("Unexpected ${fir::class.simpleName}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun buildPropertyAccessorSymbol(fir: FirPropertyAccessor): KtPropertyAccessorSymbol {
|
||||
return when {
|
||||
fir.isGetter -> buildGetterSymbol(fir)
|
||||
else -> buildSetterSymbol(fir)
|
||||
}
|
||||
}
|
||||
|
||||
fun buildGetterSymbol(fir: FirPropertyAccessor): KtFirPropertyGetterSymbol {
|
||||
require(fir.isGetter)
|
||||
return symbolsCache.cache(fir) { KtFirPropertyGetterSymbol(fir, resolveState, token, this) }
|
||||
}
|
||||
|
||||
fun buildSetterSymbol(fir: FirPropertyAccessor): KtFirPropertySetterSymbol {
|
||||
require(fir.isSetter)
|
||||
return symbolsCache.cache(fir) { KtFirPropertySetterSymbol(fir, resolveState, token, this) }
|
||||
}
|
||||
|
||||
fun buildFileSymbol(fir: FirFile) = filesCache.cache(fir) { KtFirFileSymbol(fir, resolveState, token) }
|
||||
|
||||
|
||||
@@ -303,6 +277,35 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
return symbolsCache.cache(fir) { KtFirJavaFieldSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) }
|
||||
}
|
||||
}
|
||||
|
||||
inner class CallableSymbolBuilder {
|
||||
fun buildCallableSymbol(fir: FirCallableDeclaration<*>): KtCallableSymbol {
|
||||
return when (fir) {
|
||||
is FirPropertyAccessor -> buildPropertyAccessorSymbol(fir)
|
||||
is FirFunction<*> -> functionLikeBuilder.buildFunctionLikeSymbol(fir)
|
||||
is FirVariable<*> -> variableLikeBuilder.buildVariableLikeSymbol(fir)
|
||||
else -> error("Unexpected ${fir::class.simpleName}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun buildPropertyAccessorSymbol(fir: FirPropertyAccessor): KtPropertyAccessorSymbol {
|
||||
return when {
|
||||
fir.isGetter -> buildGetterSymbol(fir)
|
||||
else -> buildSetterSymbol(fir)
|
||||
}
|
||||
}
|
||||
|
||||
fun buildGetterSymbol(fir: FirPropertyAccessor): KtFirPropertyGetterSymbol {
|
||||
require(fir.isGetter)
|
||||
return symbolsCache.cache(fir) { KtFirPropertyGetterSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) }
|
||||
}
|
||||
|
||||
fun buildSetterSymbol(fir: FirPropertyAccessor): KtFirPropertySetterSymbol {
|
||||
require(fir.isSetter)
|
||||
return symbolsCache.cache(fir) { KtFirPropertySetterSymbol(fir, resolveState, token, this@KtSymbolByFirBuilder) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -20,6 +20,6 @@ internal class KtFirExpressionInfoProvider(
|
||||
override fun getReturnExpressionTargetSymbol(returnExpression: KtReturnExpression): KtCallableSymbol? {
|
||||
val fir = returnExpression.getOrBuildFirSafe<FirReturnExpression>(firResolveState) ?: return null
|
||||
val firTargetSymbol = fir.target.labeledElement
|
||||
return firSymbolBuilder.buildCallableSymbol(firTargetSymbol)
|
||||
return firSymbolBuilder.callableBuilder.buildCallableSymbol(firTargetSymbol)
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -35,7 +35,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(overriddenElement)
|
||||
}
|
||||
}
|
||||
return overriddenElement.map { analysisSession.firSymbolBuilder.buildCallableSymbol(it.fir) }
|
||||
return overriddenElement.map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) }
|
||||
}
|
||||
|
||||
override fun <T : KtSymbol> getDirectlyOverriddenSymbols(callableSymbol: T): List<KtCallableSymbol> {
|
||||
@@ -45,7 +45,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(overriddenElement)
|
||||
}
|
||||
}
|
||||
return overriddenElement.map { analysisSession.firSymbolBuilder.buildCallableSymbol(it.fir) }
|
||||
return overriddenElement.map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) }
|
||||
}
|
||||
|
||||
private fun FirTypeScope.processCallableByName(declaration: FirDeclaration) = when (declaration) {
|
||||
@@ -134,7 +134,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
if (symbol.origin != KtSymbolOrigin.INTERSECTION_OVERRIDE) return emptyList()
|
||||
return symbol.firRef.withFir { fir ->
|
||||
val firSymbol = (fir as? FirSymbolOwner<*>)?.symbol ?: return@withFir emptyList()
|
||||
firSymbol.getIntersectionOverriddenSymbols().map { analysisSession.firSymbolBuilder.buildCallableSymbol(it.fir) }
|
||||
firSymbol.getIntersectionOverriddenSymbols().map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -848,7 +848,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.CANNOT_WEAKEN_ACCESS_PRIVILEGE) { firDiagnostic ->
|
||||
CannotWeakenAccessPrivilegeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic<*>,
|
||||
token,
|
||||
@@ -857,7 +857,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.CANNOT_CHANGE_ACCESS_PRIVILEGE) { firDiagnostic ->
|
||||
CannotChangeAccessPrivilegeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.b as FirCallableDeclaration),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic<*>,
|
||||
token,
|
||||
@@ -865,7 +865,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.OVERRIDING_FINAL_MEMBER) { firDiagnostic ->
|
||||
OverridingFinalMemberImpl(
|
||||
firSymbolBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
|
||||
firDiagnostic.b,
|
||||
firDiagnostic as FirPsiDiagnostic<*>,
|
||||
token,
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ internal fun FirScope.getCallableSymbols(callableNames: Collection<Name>, builde
|
||||
firSymbol is FirPropertySymbol && firSymbol.fir.isSubstitutionOverride -> {
|
||||
builder.variableLikeBuilder.buildVariableSymbol(firSymbol.fir)
|
||||
}
|
||||
else -> builder.buildCallableSymbol(firSymbol.fir)
|
||||
else -> builder.callableBuilder.buildCallableSymbol(firSymbol.fir)
|
||||
}
|
||||
callables.add(symbol)
|
||||
}
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ internal class KtFirFileScope(
|
||||
}
|
||||
|
||||
if (callableDeclaration != null) {
|
||||
yield(builder.buildCallableSymbol(callableDeclaration))
|
||||
yield(builder.callableBuilder.buildCallableSymbol(callableDeclaration))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -88,11 +88,11 @@ internal class KtFirKotlinPropertySymbol(
|
||||
}
|
||||
|
||||
override val getter: KtPropertyGetterSymbol? by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
|
||||
property.getter?.let { builder.buildPropertyAccessorSymbol(it) } as? KtPropertyGetterSymbol
|
||||
property.getter?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertyGetterSymbol
|
||||
}
|
||||
|
||||
override val setter: KtPropertySetterSymbol? by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
|
||||
property.setter?.let { builder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
property.setter?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
}
|
||||
|
||||
override val hasBackingField: Boolean get() = firRef.withFir { it.hasBackingField }
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ internal class KtFirSymbolProvider(
|
||||
|
||||
override fun getPropertyAccessorSymbol(psi: KtPropertyAccessor): KtPropertyAccessorSymbol = withValidityAssertion {
|
||||
psi.withFirDeclarationOfType<FirPropertyAccessor, KtPropertyAccessorSymbol>(resolveState) {
|
||||
firSymbolBuilder.buildPropertyAccessorSymbol(it)
|
||||
firSymbolBuilder.callableBuilder.buildPropertyAccessorSymbol(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -71,11 +71,11 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
||||
}
|
||||
|
||||
override val getter: KtPropertyGetterSymbol by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
|
||||
property.getter.let { builder.buildPropertyAccessorSymbol(it) } as KtPropertyGetterSymbol
|
||||
property.getter.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as KtPropertyGetterSymbol
|
||||
}
|
||||
|
||||
override val setter: KtPropertySetterSymbol? by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { property ->
|
||||
property.setter?.let { builder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
property.setter?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
}
|
||||
|
||||
override val javaGetterName: Name get() = firRef.withFir { it.getter.delegate.name }
|
||||
|
||||
Reference in New Issue
Block a user