diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt index ee99dc3c589..879929932a0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt @@ -20,6 +20,8 @@ import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +const val ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE = "_root_ide_package_" + class FirQualifiedNameResolver(private val components: BodyResolveComponents) { private val session = components.session private var qualifierStack = mutableListOf() @@ -66,6 +68,11 @@ class FirQualifiedNameResolver(private val components: BodyResolveComponents) { } val symbolProvider = session.symbolProvider var qualifierParts = qualifierStack.asReversed().map { it.name.asString() } + + val fakeRootIdePrefixIsPresent = qualifierParts.firstOrNull() == ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE + if (fakeRootIdePrefixIsPresent) { + qualifierParts = qualifierParts.drop(1) + } var resolved: PackageOrClass? do { resolved = resolveToPackageOrClass( @@ -78,6 +85,11 @@ class FirQualifiedNameResolver(private val components: BodyResolveComponents) { if (resolved != null) { qualifierPartsToDrop = qualifierParts.size - 1 + // we would need to drop fake package too + if (fakeRootIdePrefixIsPresent) { + qualifierPartsToDrop += 1 + } + return buildResolvedQualifier { this.source = source packageFqName = resolved.packageFqName diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt index 747080b6ad7..71dd06d09b7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirQualifierResolverImpl.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.NoMutableState +import org.jetbrains.kotlin.fir.ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol @@ -29,6 +30,10 @@ class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver() } override fun resolveSymbol(parts: List): FirClassifierSymbol<*>? { + if (parts.firstOrNull()?.name?.asString() == ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE) { + return resolveSymbol(parts.drop(1)) + } + val firProvider = session.symbolProvider if (parts.isNotEmpty()) {