[LL API] Remove KtCodeFragment-targeted conflict resolver from libraries

Before, 'KtCodeFragment's were analyzed as a part of their context
session. Now, a separate session is created for each code fragment,
and the LLLibraryScopeAwareCallConflictResolverFactory registration
moved there.
This commit is contained in:
Yan Zhulanow
2023-09-04 22:20:28 +09:00
committed by Space Team
parent 715f7d1a35
commit fa98945719
2 changed files with 1 additions and 12 deletions
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtCodeFragment
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
@@ -38,7 +37,7 @@ private class LLLibraryScopeAwareConeCallConflictResolver(
) : ConeCallConflictResolver() {
override fun chooseMaximallySpecificCandidates(candidates: Set<Candidate>, discriminateAbstracts: Boolean): Set<Candidate> {
val filteredCandidates = when {
candidates.size > 1 && bodyResolveComponents.file.psi is KtCodeFragment -> filterCodeFragmentCandidates(candidates)
candidates.size > 1 -> filterCodeFragmentCandidates(candidates)
else -> candidates
}
@@ -9,18 +9,14 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.*
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.*
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolver.LLLibraryScopeAwareCallConflictResolverFactory
import org.jetbrains.kotlin.analysis.project.structure.*
import org.jetbrains.kotlin.analysis.providers.createPackagePartProvider
import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.SessionConfiguration
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmTypeMapper
import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
import org.jetbrains.kotlin.fir.resolve.calls.callConflictResolverFactory
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
@@ -73,7 +69,6 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa
)
register(JavaSymbolProvider::class, javaSymbolProvider)
register(FirJvmTypeMapper::class, FirJvmTypeMapper(this))
registerLibraryScopeAwareCallConflictResolverFactory()
}
}
@@ -81,14 +76,9 @@ internal class LLFirJvmSessionFactory(project: Project) : LLFirAbstractSessionFa
return doCreateBinaryLibrarySession(module) {
registerJavaComponents(JavaModuleResolver.getInstance(project))
register(FirJvmTypeMapper::class, FirJvmTypeMapper(this))
registerLibraryScopeAwareCallConflictResolverFactory()
}
}
private fun FirSession.registerLibraryScopeAwareCallConflictResolverFactory() {
register(ConeCallConflictResolverFactory::class, LLLibraryScopeAwareCallConflictResolverFactory(callConflictResolverFactory))
}
override fun createProjectLibraryProvidersForScope(
session: LLFirSession,
moduleData: LLFirModuleData,