From c1984d92ff1243bef6a7f7553386697d6e5794d3 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Mar 2019 16:47:27 +0300 Subject: [PATCH] Introduce FirFile.fileSession, get rid of most FirElement.session usages --- .../jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 2 +- .../transformers/FirAccessResolveTransformer.kt | 14 +++++++++----- .../transformers/FirImportResolveTransformer.kt | 10 +++++++--- .../FirSpecificTypeResolverTransformer.kt | 6 +++--- .../FirSupertypeResolverTransformer.kt | 4 ++-- .../transformers/FirTypeResolveTransformer.kt | 4 ++-- .../fir/scopes/impl/FirClassSubstitutionScope.kt | 8 ++++---- .../scopes/impl/FirDefaultStarImportingScope.kt | 1 + .../fir/declarations/FirDeclarationStatus.kt | 3 --- .../jetbrains/kotlin/fir/declarations/FirFile.kt | 6 ++++++ .../declarations/impl/FirDeclarationStatusImpl.kt | 5 +++-- .../impl/FirDefaultPropertyAccessor.kt | 11 ++++------- .../fir/declarations/impl/FirResolvedImportImpl.kt | 11 +++-------- .../impl/FirResolvedPackageStarImport.kt | 11 +++-------- .../fir/types/impl/FirDelegatedTypeRefImpl.kt | 4 +++- 15 files changed, 51 insertions(+), 49 deletions(-) diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index a1ad9777c86..d25d9ec1db0 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -332,7 +332,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { is KtDelegatedSuperTypeEntry -> { val type = superTypeListEntry.typeReference.toFirOrErrorType() container.superTypeRefs += FirDelegatedTypeRefImpl( - type, + session, type, { superTypeListEntry.delegateExpression }.toFirExpression("Should have delegate") ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt index 51ee70048ff..5237debbf12 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAccessResolveTransformer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirNamedReference import org.jetbrains.kotlin.fir.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirRegularClass @@ -23,16 +24,19 @@ import org.jetbrains.kotlin.fir.visitors.compose class FirAccessResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(reversedScopePriority = true) { + private lateinit var session: FirSession + override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { + session = file.fileSession return withScopeCleanup { - towerScope.scopes += FirTopLevelDeclaredMemberScope(file, file.session) + towerScope.scopes += FirTopLevelDeclaredMemberScope(file, session) super.transformFile(file, data) } } override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { return withScopeCleanup { - towerScope.scopes += regularClass.buildUseSiteScope(regularClass.session) + towerScope.scopes += regularClass.buildUseSiteScope(session) super.transformRegularClass(regularClass, data) } } @@ -109,14 +113,14 @@ class FirAccessResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(rev return when (referents.size) { 0 -> FirErrorNamedReference( - namedReference.session, namedReference.psi, "Unresolved name: $name" + session, namedReference.psi, "Unresolved name: $name" ).compose() 1 -> FirResolvedCallableReferenceImpl( - namedReference.session, namedReference.psi, + session, namedReference.psi, name, referents.single() ).compose() else -> FirErrorNamedReference( - namedReference.session, namedReference.psi, "Ambiguity: $name, ${referents.map { it.callableId }}" + session, namedReference.psi, "Ambiguity: $name, ${referents.map { it.callableId }}" ).compose() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt index 3c69c4fec79..4c4e768f0b7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt @@ -24,13 +24,17 @@ class FirImportResolveTransformer() : FirAbstractTreeTransformer() { private lateinit var symbolProvider: FirSymbolProvider + private lateinit var session: FirSession + constructor(session: FirSession) : this() { + this.session = session // TODO: clarify this symbolProvider = FirSymbolProvider.getInstance(session) } override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - symbolProvider = FirSymbolProvider.getInstance(file.session) + session = file.fileSession + symbolProvider = FirSymbolProvider.getInstance(file.fileSession) return file.also { it.transformChildren(this, null) }.compose() } @@ -42,7 +46,7 @@ class FirImportResolveTransformer() : FirAbstractTreeTransformer() { var firstPart = fqName if (import.isAllUnder && symbolProvider.getPackage(firstPart) != null) { - return FirResolvedPackageStarImport(import, firstPart).compose() + return FirResolvedPackageStarImport(session, import, firstPart).compose() } while (!firstPart.isRoot) { @@ -56,7 +60,7 @@ class FirImportResolveTransformer() : FirAbstractTreeTransformer() { val foundSymbol = symbolProvider.getClassLikeSymbolByFqName(resolvedFqName) if (foundSymbol != null) { - return FirResolvedImportImpl(import, resolvedFqName).compose() + return FirResolvedImportImpl(session, import, resolvedFqName).compose() } } } 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 c1c43c55932..e80991d3ef2 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 @@ -32,11 +32,11 @@ class FirSpecificTypeResolverTransformer( } override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?): CompositeTransformResult { - val typeResolver = FirTypeResolver.getInstance(functionTypeRef.session) + val typeResolver = FirTypeResolver.getInstance(session) functionTypeRef.transformChildren(this, data) return FirResolvedFunctionTypeRefImpl( functionTypeRef.psi, - functionTypeRef.session, + session, functionTypeRef.isMarkedNullable, functionTypeRef.annotations as MutableList, functionTypeRef.receiverTypeRef, @@ -48,7 +48,7 @@ class FirSpecificTypeResolverTransformer( private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult { return FirResolvedTypeRefImpl( - typeRef.session, + session, typeRef.psi, resolvedType, false, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt index bd208a76fe1..202c4184ed1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt @@ -29,7 +29,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { private val fullyComputed: MutableSet = mutableSetOf() override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - firSession = file.session + firSession = file.fileSession return super.transformFile(file, data) } @@ -176,7 +176,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { data: Nothing? ): CompositeTransformResult { return withScopeCleanup { - val session = regularClass.session + // ? Is it Ok to use original file session here ? val firProvider = FirProvider.getInstance(session) val classId = regularClass.symbol.classId lookupSuperTypes(regularClass, lookupInterfaces = false, deep = true, useSiteSession = session) 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 f4be697cf71..5ad8958dd87 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 @@ -20,7 +20,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( private lateinit var session: FirSession override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - session = file.session + session = file.fileSession return withScopeCleanup { towerScope.addImportingScopes(file, session) super.transformFile(file, data) @@ -36,7 +36,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( } return withScopeCleanup { - val session = regularClass.session + val session = session val firProvider = FirProvider.getInstance(session) val classId = regularClass.symbol.classId lookupSuperTypes(regularClass, lookupInterfaces = false, deep = true, useSiteSession = session) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index 1c0eb92ad4c..fdb704d7d0f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -120,15 +120,15 @@ class FirClassSubstitutionScope( psi, symbol, name, - member.receiverTypeRef?.withReplacedConeType(newReceiverType), - member.returnTypeRef.withReplacedConeType(newReturnType) + member.receiverTypeRef?.withReplacedConeType(this@FirClassSubstitutionScope.session, newReceiverType), + member.returnTypeRef.withReplacedConeType(this@FirClassSubstitutionScope.session, newReturnType) ).apply { status = member.status as FirDeclarationStatusImpl valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType -> with(valueParameter) { FirValueParameterImpl( this@FirClassSubstitutionScope.session, psi, - name, this.returnTypeRef.withReplacedConeType(newType), + name, this.returnTypeRef.withReplacedConeType(this@FirClassSubstitutionScope.session, newType), defaultValue, isCrossinline, isNoinline, isVararg ) } @@ -140,7 +140,7 @@ class FirClassSubstitutionScope( } -fun FirTypeRef.withReplacedConeType(newType: ConeKotlinType?): FirResolvedTypeRef { +fun FirTypeRef.withReplacedConeType(session: FirSession, newType: ConeKotlinType?): FirResolvedTypeRef { require(this is FirResolvedTypeRef) if (newType == null) return this diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt index 07af8c35581..8442259b705 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt @@ -18,6 +18,7 @@ class FirDefaultStarImportingScope(session: FirSession, lookupInFir: Boolean = f ?.filter { it.isAllUnder } ?.map { FirResolvedPackageStarImport( + session, FirImportImpl(session, null, it.fqName, isAllUnder = true, aliasName = null), it.fqName ) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt index 57f892828b2..f1abf15dfe8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt @@ -48,9 +48,6 @@ interface FirDeclarationStatus : FirElement { val isStatic: Boolean - override val psi: PsiElement? - get() = null - override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDeclarationStatus(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt index 8bb2b166577..6157720d0d3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.BaseTransformedType +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.visitors.FirVisitor @@ -13,6 +14,11 @@ import org.jetbrains.kotlin.name.FqName @BaseTransformedType interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnnotationContainer { + + @Suppress("DEPRECATION") + val fileSession: FirSession + get() = session + val name: String val packageFqName: FqName diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt index 38280b54d3a..099f4917a46 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt @@ -7,15 +7,16 @@ package org.jetbrains.kotlin.fir.declarations.impl import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl.Modifier.* open class FirDeclarationStatusImpl( - final override val session: FirSession, + session: FirSession, override val visibility: Visibility, override val modality: Modality? -) : FirDeclarationStatus { +) : FirAbstractElement(session, null), FirDeclarationStatus { protected var flags: Int = 0 private operator fun get(modifier: Modifier): Boolean = (flags and modifier.mask) != 0 diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index c6abb013414..2410f237f9f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -8,24 +8,21 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer abstract class FirDefaultPropertyAccessor( - final override val session: FirSession, - final override val psi: PsiElement?, + session: FirSession, + psi: PsiElement?, final override val isGetter: Boolean, visibility: Visibility -) : FirPropertyAccessor { +) : FirAbstractElement(session, psi), FirPropertyAccessor { override var status = FirDeclarationStatusImpl( session, visibility, Modality.FINAL ) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt index 2110bc2d6e1..461107cf2a8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.declarations.impl -import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvedImport @@ -14,9 +14,10 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name class FirResolvedImportImpl( + session: FirSession, val delegate: FirImport, override val resolvedFqName: ClassId -) : FirResolvedImport, FirImport { +) : FirAbstractElement(session, delegate.psi), FirResolvedImport, FirImport { override val packageFqName: FqName get() = resolvedFqName.packageFqName @@ -31,10 +32,4 @@ class FirResolvedImportImpl( override val isAllUnder: Boolean get() = delegate.isAllUnder - - override val psi: PsiElement? - get() = delegate.psi - - override val session: FirSession - get() = delegate.session } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedPackageStarImport.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedPackageStarImport.kt index ff5d7126d98..5d13e63c7d2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedPackageStarImport.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedPackageStarImport.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.declarations.impl -import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvedImport @@ -14,9 +14,10 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name class FirResolvedPackageStarImport( + session: FirSession, val delegate: FirImport, override val packageFqName: FqName -) : FirResolvedImport, FirImport { +) : FirAbstractElement(session, delegate.psi), FirResolvedImport, FirImport { override val relativeClassName: FqName? get() = null @@ -31,10 +32,4 @@ class FirResolvedPackageStarImport( override val isAllUnder: Boolean get() = delegate.isAllUnder - - override val psi: PsiElement? - get() = delegate.psi - - override val session: FirSession - get() = delegate.session } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt index 3d2612dfe1b..bb5f4b3646f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.types.impl import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.transformSingle @@ -15,9 +16,10 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirDelegatedTypeRefImpl( + session: FirSession, override var typeRef: FirTypeRef, override var delegate: FirExpression? -) : FirAbstractElement(typeRef.session, typeRef.psi), FirDelegatedTypeRef { +) : FirAbstractElement(session, typeRef.psi), FirDelegatedTypeRef { override val annotations: List get() = typeRef.annotations