FIR: Extract FirTypeScope.getDirectOverridden*
This commit is contained in:
+11
-23
@@ -11,12 +11,12 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
|
||||||
import org.jetbrains.kotlin.fir.scopes.*
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenProperties
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.typeContext
|
import org.jetbrains.kotlin.fir.typeContext
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
@@ -47,28 +47,16 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirTypeScope.getDirectOverridesOf(function: FirSimpleFunction): List<FirFunctionSymbol<*>> {
|
private fun FirTypeScope.retrieveDirectOverriddenOf(function: FirSimpleFunction): List<FirFunctionSymbol<*>> {
|
||||||
val overriddenFunctions = mutableSetOf<FirFunctionSymbol<*>>()
|
|
||||||
|
|
||||||
processFunctionsByName(function.name) {}
|
processFunctionsByName(function.name) {}
|
||||||
processDirectlyOverriddenFunctions(function.symbol) {
|
|
||||||
overriddenFunctions.add(it)
|
|
||||||
ProcessorAction.NEXT
|
|
||||||
}
|
|
||||||
|
|
||||||
return overriddenFunctions.toList()
|
return getDirectOverriddenFunctions(function.symbol as FirNamedFunctionSymbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirTypeScope.getDirectOverridesOf(property: FirProperty): List<FirPropertySymbol> {
|
private fun FirTypeScope.retrieveDirectOverriddenOf(property: FirProperty): List<FirPropertySymbol> {
|
||||||
val overriddenProperties = mutableSetOf<FirPropertySymbol>()
|
|
||||||
|
|
||||||
processPropertiesByName(property.name) {}
|
processPropertiesByName(property.name) {}
|
||||||
processDirectlyOverriddenProperties(property.symbol) {
|
|
||||||
overriddenProperties.add(it)
|
|
||||||
ProcessorAction.NEXT
|
|
||||||
}
|
|
||||||
|
|
||||||
return overriddenProperties.toList()
|
return getDirectOverriddenProperties(property.symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeKotlinType.substituteAllTypeParameters(
|
private fun ConeKotlinType.substituteAllTypeParameters(
|
||||||
@@ -128,7 +116,7 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val overriddenFunctionSymbols = firTypeScope.getDirectOverridesOf(function)
|
val overriddenFunctionSymbols = firTypeScope.retrieveDirectOverriddenOf(function)
|
||||||
|
|
||||||
if (overriddenFunctionSymbols.isEmpty()) {
|
if (overriddenFunctionSymbols.isEmpty()) {
|
||||||
return
|
return
|
||||||
@@ -160,7 +148,7 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val overriddenPropertySymbols = firTypeScope.getDirectOverridesOf(property)
|
val overriddenPropertySymbols = firTypeScope.retrieveDirectOverriddenOf(property)
|
||||||
|
|
||||||
if (overriddenPropertySymbols.isEmpty()) {
|
if (overriddenPropertySymbols.isEmpty()) {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.scopes
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -129,3 +130,26 @@ inline fun FirTypeScope.processDirectlyOverriddenProperties(
|
|||||||
): ProcessorAction = processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
): ProcessorAction = processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
||||||
processor(overridden)
|
processor(overridden)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun FirTypeScope.getDirectOverriddenFunctions(function: FirNamedFunctionSymbol): List<FirNamedFunctionSymbol> {
|
||||||
|
val overriddenFunctions = mutableSetOf<FirNamedFunctionSymbol>()
|
||||||
|
|
||||||
|
processDirectlyOverriddenFunctions(function) {
|
||||||
|
if (it !is FirNamedFunctionSymbol) return@processDirectlyOverriddenFunctions ProcessorAction.NEXT
|
||||||
|
overriddenFunctions.add(it)
|
||||||
|
ProcessorAction.NEXT
|
||||||
|
}
|
||||||
|
|
||||||
|
return overriddenFunctions.toList()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FirTypeScope.getDirectOverriddenProperties(property: FirPropertySymbol): List<FirPropertySymbol> {
|
||||||
|
val overriddenProperties = mutableSetOf<FirPropertySymbol>()
|
||||||
|
|
||||||
|
processDirectlyOverriddenProperties(property) {
|
||||||
|
overriddenProperties.add(it)
|
||||||
|
ProcessorAction.NEXT
|
||||||
|
}
|
||||||
|
|
||||||
|
return overriddenProperties.toList()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user