diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt index 085c4103781..7262df1b1bb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt @@ -7,9 +7,8 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.resolve.FirTypeResolver import org.jetbrains.kotlin.fir.resolve.typeResolver -import org.jetbrains.kotlin.fir.scopes.FirIterableScope +import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef @@ -17,22 +16,21 @@ import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.compose class FirSpecificTypeResolverTransformer( - private val towerScope: FirIterableScope, override val session: FirSession, private val errorTypeAsResolved: Boolean = true -) : FirAbstractTreeTransformer(phase = FirResolvePhase.SUPER_TYPES) { +) : FirAbstractTreeTransformer(phase = FirResolvePhase.SUPER_TYPES) { private val typeResolver = session.typeResolver - override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult { - typeRef.transformChildren(this, null) - return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope)) + override fun transformTypeRef(typeRef: FirTypeRef, data: FirScope): CompositeTransformResult { + typeRef.transformChildren(this, data) + return transformType(typeRef, typeResolver.resolveType(typeRef, data)) } - override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?): CompositeTransformResult { + override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: FirScope): CompositeTransformResult { functionTypeRef.transformChildren(this, data) return buildResolvedFunctionTypeRef { source = functionTypeRef.source - type = typeResolver.resolveType(functionTypeRef, towerScope).takeIfAcceptable() ?: return functionTypeRef.compose() + type = typeResolver.resolveType(functionTypeRef, data).takeIfAcceptable() ?: return functionTypeRef.compose() isMarkedNullable = functionTypeRef.isMarkedNullable isSuspend = functionTypeRef.isSuspend receiverTypeRef = functionTypeRef.receiverTypeRef @@ -55,11 +53,11 @@ class FirSpecificTypeResolverTransformer( !errorTypeAsResolved && it is ConeClassErrorType } - override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?): CompositeTransformResult { + override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: FirScope): CompositeTransformResult { return resolvedTypeRef.compose() } - override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Nothing?): CompositeTransformResult { + override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: FirScope): CompositeTransformResult { return implicitTypeRef.compose() } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index d415205dae1..e8aec60ee4d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -244,7 +244,7 @@ private class FirSupertypeResolverVisitor( private fun resolveSpecificClassLikeSupertypes( classLikeDeclaration: FirClassLikeDeclaration<*>, - resolveSuperTypeRefs: (FirTransformer) -> List + resolveSuperTypeRefs: (FirTransformer, FirScope) -> List ): List { when (val status = supertypeComputationSession.getSupertypesComputationStatus(classLikeDeclaration)) { is SupertypeComputationStatus.Computed -> return status.supertypeRefs @@ -256,8 +256,8 @@ private class FirSupertypeResolverVisitor( supertypeComputationSession.startComputingSupertypes(classLikeDeclaration) val scope = prepareScope(classLikeDeclaration) - val transformer = FirSpecificTypeResolverTransformer(scope, session) - val resolvedTypesRefs = resolveSuperTypeRefs(transformer) + val transformer = FirSpecificTypeResolverTransformer(session) + val resolvedTypesRefs = resolveSuperTypeRefs(transformer, scope) supertypeComputationSession.storeSupertypes(classLikeDeclaration, resolvedTypesRefs) return resolvedTypesRefs @@ -277,9 +277,9 @@ private class FirSupertypeResolverVisitor( classLikeDeclaration: FirClassLikeDeclaration<*>, supertypeRefs: List ): List { - return resolveSpecificClassLikeSupertypes(classLikeDeclaration) { transformer -> + return resolveSpecificClassLikeSupertypes(classLikeDeclaration) { transformer, scope -> supertypeRefs.mapTo(mutableListOf()) { - val superTypeRef = transformer.transformTypeRef(it, null).single + val superTypeRef = transformer.transformTypeRef(it, scope).single if (superTypeRef.coneTypeSafe() != null) createErrorTypeRef( @@ -310,9 +310,9 @@ private class FirSupertypeResolverVisitor( return } - resolveSpecificClassLikeSupertypes(typeAlias) { transformer -> + resolveSpecificClassLikeSupertypes(typeAlias) { transformer, scope -> val resolvedTypeRef = - transformer.transformTypeRef(typeAlias.expandedTypeRef, null).single as? FirResolvedTypeRef + transformer.transformTypeRef(typeAlias.expandedTypeRef, scope).single as? FirResolvedTypeRef ?: return@resolveSpecificClassLikeSupertypes listOf( createErrorTypeRef( typeAlias.expandedTypeRef, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index 7be5506aaf9..5db4699ea37 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -45,7 +45,7 @@ class FirTypeResolveTransformer( towerScope.addScopes(initialScopes.asReversed()) } - private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer(towerScope, session) + private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer(session) override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { checkSessionConsistency(file) @@ -114,7 +114,7 @@ class FirTypeResolveTransformer( } override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult { - return typeResolverTransformer.transformTypeRef(typeRef, data) + return typeResolverTransformer.transformTypeRef(typeRef, towerScope) } override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt index 8948a4c6429..399b4e15127 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.transformers.* import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope -import org.jetbrains.kotlin.fir.scopes.impl.FirTypeResolveScopeForBodyResolve import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -282,7 +281,7 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb qualifiedResolver ) val typeResolverTransformer = FirSpecificTypeResolverTransformer( - FirTypeResolveScopeForBodyResolve(this), session + session ) override val callCompleter: FirCallCompleter = FirCallCompleter(transformer, this) override val dataFlowAnalyzer: FirDataFlowAnalyzer<*> = diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index c9360dcfd6b..681c7c57a8a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -16,6 +16,8 @@ import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve import org.jetbrains.kotlin.fir.resolve.transformers.withScopeCleanup import org.jetbrains.kotlin.fir.scopes.createImportingScopes +import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope +import org.jetbrains.kotlin.fir.scopes.impl.createCurrentScopeList import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -72,7 +74,7 @@ open class FirBodyResolveTransformer( if (typeRef is FirResolvedTypeRef) { return typeRef.compose() } - return typeResolverTransformer.transformTypeRef(typeRef, null) + return typeResolverTransformer.transformTypeRef(typeRef, FirCompositeScope(components.createCurrentScopeList())) } override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: ResolutionMode): CompositeTransformResult { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt index bb05b6565cb..8b7e1f9192c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt @@ -87,7 +87,6 @@ private class FirAnnotationResolveTransformer( ) : FirAbstractAnnotationResolveTransformer, PersistentList>(session, scopeSession) { var metaAnnotations: Set = emptySet() private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer( - towerScope, session, errorTypeAsResolved = false ) @@ -109,7 +108,7 @@ private class FirAnnotationResolveTransformer( annotationCall: FirAnnotationCall, data: Multimap ): CompositeTransformResult { - return annotationCall.transformAnnotationTypeRef(typeResolverTransformer, null).compose() + return annotationCall.transformAnnotationTypeRef(typeResolverTransformer, scope).compose() } override fun transformRegularClass( @@ -134,4 +133,4 @@ private class FirAnnotationResolveTransformer( session.predicateBasedProvider.registerAnnotatedDeclaration(annotatedDeclaration, owners) } } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeResolveScopeForBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeResolveScopeForBodyResolve.kt index ff9179aa479..017345cc288 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeResolveScopeForBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeResolveScopeForBodyResolve.kt @@ -6,15 +6,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents -import org.jetbrains.kotlin.fir.scopes.FirIterableScope import org.jetbrains.kotlin.fir.scopes.FirScope -class FirTypeResolveScopeForBodyResolve( - private val components: BodyResolveComponents -) : FirIterableScope() { - override val scopes: Iterable - get() = components.createCurrentScopeList() -} - fun BodyResolveComponents.createCurrentScopeList(): List = towerDataElements.asReversed().mapNotNull { it.scope }