FIR. Fix currentFile unset in specific type resolver in some cases
This commit is contained in:
+10
-4
@@ -200,8 +200,11 @@ private fun createOtherScopesForNestedClassesOrCompanion(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun FirRegularClass.resolveSupertypesInTheAir(session: FirSession): List<FirTypeRef> {
|
fun FirRegularClass.resolveSupertypesInTheAir(session: FirSession): List<FirTypeRef> {
|
||||||
return FirSupertypeResolverVisitor(session, SupertypeComputationSession(), ScopeSession())
|
return FirSupertypeResolverVisitor(session, SupertypeComputationSession(), ScopeSession()).run {
|
||||||
.resolveSpecificClassLikeSupertypes(this, superTypeRefs)
|
withFile(session.firProvider.getFirClassifierContainerFile(this@resolveSupertypesInTheAir.symbol)) {
|
||||||
|
resolveSpecificClassLikeSupertypes(this@resolveSupertypesInTheAir, superTypeRefs)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class FirSupertypeResolverVisitor(
|
open class FirSupertypeResolverVisitor(
|
||||||
@@ -211,7 +214,7 @@ open class FirSupertypeResolverVisitor(
|
|||||||
private val scopeForLocalClass: PersistentList<FirScope>? = null,
|
private val scopeForLocalClass: PersistentList<FirScope>? = null,
|
||||||
private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null,
|
private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null,
|
||||||
private val firProviderInterceptor: FirProviderInterceptor? = null,
|
private val firProviderInterceptor: FirProviderInterceptor? = null,
|
||||||
private var useSiteFile: FirFile? = null,
|
@property:PrivateForInline var useSiteFile: FirFile? = null,
|
||||||
containingDeclarations: List<FirDeclaration> = emptyList(),
|
containingDeclarations: List<FirDeclaration> = emptyList(),
|
||||||
) : FirDefaultVisitor<Unit, Any?>() {
|
) : FirDefaultVisitor<Unit, Any?>() {
|
||||||
private val supertypeGenerationExtensions = session.extensionService.supertypeGenerators
|
private val supertypeGenerationExtensions = session.extensionService.supertypeGenerators
|
||||||
@@ -225,7 +228,8 @@ open class FirSupertypeResolverVisitor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <R> withFile(file: FirFile, block: () -> R): R {
|
@OptIn(PrivateForInline::class)
|
||||||
|
inline fun <R> withFile(file: FirFile, block: () -> R): R {
|
||||||
val oldFile = useSiteFile
|
val oldFile = useSiteFile
|
||||||
try {
|
try {
|
||||||
useSiteFile = file
|
useSiteFile = file
|
||||||
@@ -345,6 +349,8 @@ open class FirSupertypeResolverVisitor(
|
|||||||
val scopes = prepareScopes(classLikeDeclaration)
|
val scopes = prepareScopes(classLikeDeclaration)
|
||||||
|
|
||||||
val transformer = FirSpecificTypeResolverTransformer(session, supertypeSupplier = supertypeComputationSession.supertypesSupplier)
|
val transformer = FirSpecificTypeResolverTransformer(session, supertypeSupplier = supertypeComputationSession.supertypesSupplier)
|
||||||
|
|
||||||
|
@OptIn(PrivateForInline::class)
|
||||||
val resolvedTypesRefs = transformer.withFile(useSiteFile) {
|
val resolvedTypesRefs = transformer.withFile(useSiteFile) {
|
||||||
resolveSuperTypeRefs(
|
resolveSuperTypeRefs(
|
||||||
transformer,
|
transformer,
|
||||||
|
|||||||
+6
@@ -151,4 +151,10 @@ private class FirAnnotationResolveTransformer(
|
|||||||
predicateBasedProvider.registerAnnotatedDeclaration(declaration, owners)
|
predicateBasedProvider.registerAnnotatedDeclaration(declaration, owners)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transformFile(file: FirFile, data: Multimap<AnnotationFqn, FirRegularClass>): FirFile {
|
||||||
|
typeResolverTransformer.withFile(file) {
|
||||||
|
return super.transformFile(file, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user