From e46074dee62f0ed1e3ba1eea70594b77a63e107a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 21 Mar 2018 20:33:34 +0300 Subject: [PATCH] FIR: simplify type parameter scopes --- .../descriptors/FirTypeResolveTransformer.kt | 7 +++--- .../impl/FirClassLikeTypeParameterScope.kt | 10 +++------ .../impl/FirFunctionTypeParameterScope.kt | 22 ++----------------- 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/descriptors/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/descriptors/FirTypeResolveTransformer.kt index 5fa8c7f0b75..ca282005229 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/descriptors/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/descriptors/FirTypeResolveTransformer.kt @@ -67,7 +67,7 @@ class FirTypeResolveTransformer(val superTypesOnly: Boolean = false) : FirTransf classLikeName = classLikeName.child(klass.name) val classId = ClassId(packageFqName, classLikeName, false) scope = FirCompositeScope(mutableListOf(scope)) - scope.scopes += FirClassLikeTypeParameterScope(classId, klass.session) + scope.scopes += FirClassLikeTypeParameterScope(klass) resolveSuperTypesAndExpansions(klass) scope.scopes += FirNestedClassifierScope(classId, klass.session) @@ -82,9 +82,8 @@ class FirTypeResolveTransformer(val superTypesOnly: Boolean = false) : FirTransf override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult { classLikeName = classLikeName.child(typeAlias.name) - val classId = ClassId(packageFqName, classLikeName, false) scope = FirCompositeScope(mutableListOf(scope)) - scope.scopes += FirClassLikeTypeParameterScope(classId, typeAlias.session) + scope.scopes += FirClassLikeTypeParameterScope(typeAlias) resolveSuperTypesAndExpansions(typeAlias) @@ -95,7 +94,7 @@ class FirTypeResolveTransformer(val superTypesOnly: Boolean = false) : FirTransf override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult { scope = FirCompositeScope(mutableListOf(scope)) - scope.scopes += FirFunctionTypeParameterScope(file, classLikeName, namedFunction.name, namedFunction.session) + scope.scopes += FirFunctionTypeParameterScope(namedFunction) val result = super.transformNamedFunction(namedFunction, data) scope = scope.scopes[0] as FirCompositeScope diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassLikeTypeParameterScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassLikeTypeParameterScope.kt index 95d3f32e6de..03845aa7643 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassLikeTypeParameterScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassLikeTypeParameterScope.kt @@ -5,18 +5,14 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.resolve.FirProvider +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.symbols.ConeSymbol -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -class FirClassLikeTypeParameterScope(val classId: ClassId, val session: FirSession) : FirScope { +class FirClassLikeTypeParameterScope(classLike: FirMemberDeclaration) : FirScope { - private val firProvider = FirProvider.getInstance(session) - - val typeParameters = firProvider.getFirClassifierByFqName(classId)?.typeParameters.orEmpty().groupBy { it.name } + val typeParameters = classLike.typeParameters.groupBy { it.name } override fun processClassifiersByName(name: Name, processor: (ConeSymbol) -> Boolean): Boolean { val matchedTypeParameters = typeParameters[name] ?: return true diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFunctionTypeParameterScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFunctionTypeParameterScope.kt index be058460b49..c1d31c099e6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFunctionTypeParameterScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirFunctionTypeParameterScope.kt @@ -5,32 +5,14 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirDeclarationContainer -import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.symbols.ConeSymbol -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -class FirFunctionTypeParameterScope( - val file: FirFile, - val className: FqName, - val functionName: Name, - val session: FirSession -) : FirScope { +class FirFunctionTypeParameterScope(function: FirNamedFunction) : FirScope { - private val firProvider = FirProvider.getInstance(session) - - val typeParameterContainer = when { - className.isRoot -> file - else -> firProvider.getFirClassifierByFqName(ClassId(file.packageFqName, className, false)) as? FirDeclarationContainer - }?.declarations?.filterIsInstance()?.find { it.name == functionName } - - val typeParameters = typeParameterContainer?.typeParameters.orEmpty().groupBy { it.name } + val typeParameters = function.typeParameters.groupBy { it.name } override fun processClassifiersByName(name: Name, processor: (ConeSymbol) -> Boolean): Boolean { val matchedTypeParameters = typeParameters[name] ?: return true