From 11bc0e3225a45b5ec79b7a3802025d4ef66cf75f Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 9 Sep 2020 14:26:24 +0300 Subject: [PATCH] FIR: Extract FirTypeScope.getDirectOverridden* --- .../FirTypeMismatchOnOverrideChecker.kt | 34 ++++++------------- .../kotlin/fir/scopes/FirTypeScope.kt | 24 +++++++++++++ 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeMismatchOnOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeMismatchOnOverrideChecker.kt index 7d4d4d2c307..905f62362d1 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeMismatchOnOverrideChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeMismatchOnOverrideChecker.kt @@ -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.declarations.* 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.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol +import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef @@ -47,28 +47,16 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() { } } - private fun FirTypeScope.getDirectOverridesOf(function: FirSimpleFunction): List> { - val overriddenFunctions = mutableSetOf>() - + private fun FirTypeScope.retrieveDirectOverriddenOf(function: FirSimpleFunction): List> { 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 { - val overriddenProperties = mutableSetOf() - + private fun FirTypeScope.retrieveDirectOverriddenOf(property: FirProperty): List { processPropertiesByName(property.name) {} - processDirectlyOverriddenProperties(property.symbol) { - overriddenProperties.add(it) - ProcessorAction.NEXT - } - return overriddenProperties.toList() + return getDirectOverriddenProperties(property.symbol) } private fun ConeKotlinType.substituteAllTypeParameters( @@ -128,7 +116,7 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() { return } - val overriddenFunctionSymbols = firTypeScope.getDirectOverridesOf(function) + val overriddenFunctionSymbols = firTypeScope.retrieveDirectOverriddenOf(function) if (overriddenFunctionSymbols.isEmpty()) { return @@ -160,7 +148,7 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() { return } - val overriddenPropertySymbols = firTypeScope.getDirectOverridesOf(property) + val overriddenPropertySymbols = firTypeScope.retrieveDirectOverriddenOf(property) if (overriddenPropertySymbols.isEmpty()) { return diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt index 55b18f9171c..4e23d7b4d9c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirTypeScope.kt @@ -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.FirFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.name.Name @@ -129,3 +130,26 @@ inline fun FirTypeScope.processDirectlyOverriddenProperties( ): ProcessorAction = processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ -> processor(overridden) } + +fun FirTypeScope.getDirectOverriddenFunctions(function: FirNamedFunctionSymbol): List { + val overriddenFunctions = mutableSetOf() + + processDirectlyOverriddenFunctions(function) { + if (it !is FirNamedFunctionSymbol) return@processDirectlyOverriddenFunctions ProcessorAction.NEXT + overriddenFunctions.add(it) + ProcessorAction.NEXT + } + + return overriddenFunctions.toList() +} + +fun FirTypeScope.getDirectOverriddenProperties(property: FirPropertySymbol): List { + val overriddenProperties = mutableSetOf() + + processDirectlyOverriddenProperties(property) { + overriddenProperties.add(it) + ProcessorAction.NEXT + } + + return overriddenProperties.toList() +}