Use FirNamedFunctionSymbol in FirSimpleFunction & its inheritors

This commit is contained in:
Mikhail Glukhikh
2020-12-02 17:31:17 +03:00
committed by TeamCityServer
parent 15021f30ff
commit 91834ccf46
15 changed files with 20 additions and 26 deletions
@@ -200,7 +200,6 @@ fun FirSimpleFunction.overriddenFunctions(
containingClass: FirClass<*>, containingClass: FirClass<*>,
context: CheckerContext context: CheckerContext
): List<FirFunctionSymbol<*>> { ): List<FirFunctionSymbol<*>> {
val symbol = symbol as? FirNamedFunctionSymbol ?: return emptyList()
val firTypeScope = containingClass.unsubstitutedScope( val firTypeScope = containingClass.unsubstitutedScope(
context.sessionHolder.session, context.sessionHolder.session,
context.sessionHolder.scopeSession, context.sessionHolder.scopeSession,
@@ -51,7 +51,7 @@ object FirTypeMismatchOnOverrideChecker : FirRegularClassChecker() {
private fun FirTypeScope.retrieveDirectOverriddenOf(function: FirSimpleFunction): List<FirFunctionSymbol<*>> { private fun FirTypeScope.retrieveDirectOverriddenOf(function: FirSimpleFunction): List<FirFunctionSymbol<*>> {
processFunctionsByName(function.name) {} processFunctionsByName(function.name) {}
return getDirectOverriddenFunctions(function.symbol as FirNamedFunctionSymbol) return getDirectOverriddenFunctions(function.symbol)
} }
private fun FirTypeScope.retrieveDirectOverriddenOf(property: FirProperty): List<FirPropertySymbol> { private fun FirTypeScope.retrieveDirectOverriddenOf(property: FirProperty): List<FirPropertySymbol> {
@@ -233,7 +233,7 @@ class FirBuiltinSymbolProvider(session: FirSession, val kotlinScopeProvider: Kot
val functionClass = getClassLikeSymbolByFqName(classId(arity)) ?: return null val functionClass = getClassLikeSymbolByFqName(classId(arity)) ?: return null
val invoke = val invoke =
functionClass.fir.declarations.find { it is FirSimpleFunction && it.name == OperatorNameConventions.INVOKE } ?: return null functionClass.fir.declarations.find { it is FirSimpleFunction && it.name == OperatorNameConventions.INVOKE } ?: return null
return (invoke as FirSimpleFunction).symbol as? FirNamedFunctionSymbol return (invoke as FirSimpleFunction).symbol
} }
private fun FunctionClassKind.classId(arity: Int) = ClassId(packageFqName, numberedClassName(arity)) private fun FunctionClassKind.classId(arity: Int) = ClassId(packageFqName, numberedClassName(arity))
@@ -250,7 +250,6 @@ internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(
val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true) val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true)
scope.processFunctionsByName(name) {} scope.processFunctionsByName(name) {}
val overriddenSet = mutableSetOf<IrSimpleFunctionSymbol>() val overriddenSet = mutableSetOf<IrSimpleFunctionSymbol>()
val symbol = symbol as? FirNamedFunctionSymbol ?: return emptyList()
scope.processDirectlyOverriddenFunctions(symbol) { scope.processDirectlyOverriddenFunctions(symbol) {
if (it.fir.visibility == Visibilities.Private) { if (it.fir.visibility == Visibilities.Private) {
return@processDirectlyOverriddenFunctions ProcessorAction.NEXT return@processDirectlyOverriddenFunctions ProcessorAction.NEXT
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
@@ -52,7 +52,7 @@ class FirJavaMethod @FirImplementationDetail constructor(
name: Name, name: Name,
status: FirDeclarationStatus, status: FirDeclarationStatus,
containerSource: DeserializedContainerSource?, containerSource: DeserializedContainerSource?,
symbol: FirFunctionSymbol<FirSimpleFunction>, symbol: FirNamedFunctionSymbol,
annotations: MutableList<FirAnnotationCall>, annotations: MutableList<FirAnnotationCall>,
dispatchReceiverType: ConeKotlinType?, dispatchReceiverType: ConeKotlinType?,
) : FirSimpleFunctionImpl( ) : FirSimpleFunctionImpl(
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeInferenceContext import org.jetbrains.kotlin.fir.types.ConeInferenceContext
import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext import org.jetbrains.kotlin.fir.types.ConeTypeCheckerContext
@@ -30,7 +29,6 @@ fun FirSimpleFunction.lowestVisibilityAmongOverrides(
session: FirSession, session: FirSession,
scopeSession: ScopeSession scopeSession: ScopeSession
): Visibility { ): Visibility {
val symbol = symbol as? FirNamedFunctionSymbol ?: return visibility
val firTypeScope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false) val firTypeScope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false)
var visibility = visibility var visibility = visibility
@@ -117,7 +117,7 @@ private fun FirTypeAliasSymbol.findSAMConstructorForTypeAlias(
if (type.typeArguments.isEmpty()) return samConstructorForClass if (type.typeArguments.isEmpty()) return samConstructorForClass
val namedSymbol = samConstructorForClass.symbol as? FirNamedFunctionSymbol ?: return null val namedSymbol = samConstructorForClass.symbol
val substitutor = prepareSubstitutorForTypeAliasConstructors( val substitutor = prepareSubstitutorForTypeAliasConstructors(
type, type,
@@ -75,12 +75,10 @@ class FirStatusResolver(
buildList<FirCallableMemberDeclaration<*>> { buildList<FirCallableMemberDeclaration<*>> {
val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false) val scope = containingClass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = false)
val symbol = function.symbol val symbol = function.symbol
if (symbol is FirNamedFunctionSymbol) { scope.processFunctionsByName(function.name) {}
scope.processFunctionsByName(function.name) {} scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ ->
scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { overriddenSymbol, _ -> this += overriddenSymbol.fir
this += overriddenSymbol.fir ProcessorAction.NEXT
ProcessorAction.NEXT
}
} }
}.mapNotNull { }.mapNotNull {
it.status as? FirResolvedDeclarationStatus it.status as? FirResolvedDeclarationStatus
@@ -64,7 +64,7 @@ class FirDelegatedMemberScope(
newModality = Modality.OPEN, newModality = Modality.OPEN,
).apply { ).apply {
delegatedWrapperData = DelegatedWrapperData(functionSymbol.fir, containingClass.symbol.toLookupTag(), delegateField) delegatedWrapperData = DelegatedWrapperData(functionSymbol.fir, containingClass.symbol.toLookupTag(), delegateField)
}.symbol as FirNamedFunctionSymbol }.symbol
} }
processor(delegatedSymbol) processor(delegatedSymbol)
} }
@@ -54,7 +54,7 @@ object FirFakeOverrideGenerator {
} }
private fun createSubstitutionOverrideFunction( private fun createSubstitutionOverrideFunction(
fakeOverrideSymbol: FirFunctionSymbol<FirSimpleFunction>, fakeOverrideSymbol: FirNamedFunctionSymbol,
session: FirSession, session: FirSession,
baseFunction: FirSimpleFunction, baseFunction: FirSimpleFunction,
newDispatchReceiverType: ConeKotlinType?, newDispatchReceiverType: ConeKotlinType?,
@@ -85,7 +85,7 @@ object FirFakeOverrideGenerator {
} }
fun createCopyForFirFunction( fun createCopyForFirFunction(
newSymbol: FirFunctionSymbol<FirSimpleFunction>, newSymbol: FirNamedFunctionSymbol,
baseFunction: FirSimpleFunction, baseFunction: FirSimpleFunction,
session: FirSession, session: FirSession,
origin: FirDeclarationOrigin, origin: FirDeclarationOrigin,
@@ -34,7 +34,7 @@ class FirLocalScope private constructor(
fun storeFunction(function: FirSimpleFunction): FirLocalScope { fun storeFunction(function: FirSimpleFunction): FirLocalScope {
return FirLocalScope( return FirLocalScope(
properties, functions.put(function.name, function.symbol as FirNamedFunctionSymbol), classes properties, functions.put(function.name, function.symbol), classes
) )
} }
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -40,7 +40,7 @@ abstract class FirSimpleFunction : FirPureAbstractElement(), FirFunction<FirSimp
abstract override val dispatchReceiverType: ConeKotlinType? abstract override val dispatchReceiverType: ConeKotlinType?
abstract override val contractDescription: FirContractDescription abstract override val contractDescription: FirContractDescription
abstract val name: Name abstract val name: Name
abstract override val symbol: FirFunctionSymbol<FirSimpleFunction> abstract override val symbol: FirNamedFunctionSymbol
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val typeParameters: List<FirTypeParameter> abstract override val typeParameters: List<FirTypeParameter>
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -54,7 +54,7 @@ open class FirSimpleFunctionBuilder : FirFunctionBuilder, FirTypeParametersOwner
open var dispatchReceiverType: ConeKotlinType? = null open var dispatchReceiverType: ConeKotlinType? = null
open var contractDescription: FirContractDescription = FirEmptyContractDescription open var contractDescription: FirContractDescription = FirEmptyContractDescription
open lateinit var name: Name open lateinit var name: Name
open lateinit var symbol: FirFunctionSymbol<FirSimpleFunction> open lateinit var symbol: FirNamedFunctionSymbol
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf() override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -46,7 +46,7 @@ open class FirSimpleFunctionImpl @FirImplementationDetail constructor(
override val dispatchReceiverType: ConeKotlinType?, override val dispatchReceiverType: ConeKotlinType?,
override var contractDescription: FirContractDescription, override var contractDescription: FirContractDescription,
override val name: Name, override val name: Name,
override val symbol: FirFunctionSymbol<FirSimpleFunction>, override val symbol: FirNamedFunctionSymbol,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>, override val typeParameters: MutableList<FirTypeParameter>,
) : FirSimpleFunction() { ) : FirSimpleFunction() {
@@ -299,7 +299,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(function, "F", simpleFunction) parentArg(function, "F", simpleFunction)
parentArg(callableMemberDeclaration, "F", simpleFunction) parentArg(callableMemberDeclaration, "F", simpleFunction)
+name +name
+symbol("FirFunctionSymbol<FirSimpleFunction>") +symbol("FirNamedFunctionSymbol")
+annotations +annotations
+typeParameters +typeParameters
} }