mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[Kotlin] support calling analyze with KtModule in FE10 implementation of Analysis API
^KT-65307 fixed GitOrigin-RevId: 6dc9ef7a2a83c49e15f45d1398025e6b921ac6da
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5ee2359817
commit
2afd4db1ab
+34
-15
@@ -3,14 +3,18 @@ package org.jetbrains.kotlin.base.fe10.analysis
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||
import org.jetbrains.kotlin.idea.FrontendInternals
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.RootKindFilter
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.matches
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.moduleInfo
|
||||
import org.jetbrains.kotlin.idea.base.util.Frontend10ApiUsage
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||
@@ -31,28 +35,43 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
|
||||
import org.jetbrains.kotlin.util.CancellationChecker
|
||||
|
||||
@OptIn(FrontendInternals::class)
|
||||
internal class IdeFe10AnalysisFacade(private val project: Project): Fe10AnalysisFacade {
|
||||
private inline fun <reified T: Any> getFe10Service(element: KtElement): T {
|
||||
return element.getResolutionFacade().getFrontendService(T::class.java)
|
||||
internal class IdeFe10AnalysisFacade(private val project: Project) : Fe10AnalysisFacade {
|
||||
|
||||
@OptIn(Frontend10ApiUsage::class)
|
||||
override fun getAnalysisContext(ktModule: KtModule, token: KtLifetimeToken): Fe10AnalysisContext {
|
||||
val moduleInfo = ktModule.moduleInfo
|
||||
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacadeByModuleInfo(moduleInfo, ktModule.platform)
|
||||
return resolutionFacade.getAnalysisContext(token)
|
||||
}
|
||||
|
||||
override fun getResolveSession(element: KtElement): ResolveSession = getFe10Service(element)
|
||||
override fun getDeprecationResolver(element: KtElement): DeprecationResolver = getFe10Service(element)
|
||||
override fun getCallResolver(element: KtElement): CallResolver = getFe10Service(element)
|
||||
override fun getKotlinToResolvedCallTransformer(element: KtElement): KotlinToResolvedCallTransformer = getFe10Service(element)
|
||||
override fun getKotlinTypeRefiner(element: KtElement): KotlinTypeRefiner = getFe10Service(element)
|
||||
|
||||
override fun getOverloadingConflictResolver(element: KtElement): OverloadingConflictResolver<ResolvedCall<*>> {
|
||||
override fun getAnalysisContext(element: KtElement, token: KtLifetimeToken): Fe10AnalysisContext {
|
||||
val resolutionFacade = element.getResolutionFacade()
|
||||
val moduleDescriptor = resolutionFacade.moduleDescriptor
|
||||
return resolutionFacade.getAnalysisContext(token)
|
||||
}
|
||||
|
||||
private fun ResolutionFacade.getAnalysisContext(token: KtLifetimeToken): Fe10AnalysisContext {
|
||||
return Fe10AnalysisContext(
|
||||
facade = this@IdeFe10AnalysisFacade,
|
||||
resolveSession = getFrontendService(ResolveSession::class.java),
|
||||
deprecationResolver = getFrontendService(DeprecationResolver::class.java),
|
||||
callResolver = getFrontendService<CallResolver>(CallResolver::class.java),
|
||||
kotlinToResolvedCallTransformer = getFrontendService(KotlinToResolvedCallTransformer::class.java),
|
||||
overloadingConflictResolver = getOverloadingConflictResolver(),
|
||||
kotlinTypeRefiner = getFrontendService(KotlinTypeRefiner::class.java),
|
||||
token = token,
|
||||
)
|
||||
}
|
||||
|
||||
private fun ResolutionFacade.getOverloadingConflictResolver(): OverloadingConflictResolver<ResolvedCall<*>> {
|
||||
val moduleDescriptor = moduleDescriptor
|
||||
|
||||
return createOverloadingConflictResolver(
|
||||
moduleDescriptor.builtIns,
|
||||
moduleDescriptor,
|
||||
resolutionFacade.getFrontendService(TypeSpecificityComparator::class.java),
|
||||
resolutionFacade.getFrontendService(PlatformOverloadsSpecificityComparator::class.java),
|
||||
resolutionFacade.getFrontendService(CancellationChecker::class.java),
|
||||
resolutionFacade.getFrontendService(KotlinTypeRefiner::class.java)
|
||||
getFrontendService(TypeSpecificityComparator::class.java),
|
||||
getFrontendService(PlatformOverloadsSpecificityComparator::class.java),
|
||||
getFrontendService(CancellationChecker::class.java),
|
||||
getFrontendService(KotlinTypeRefiner::class.java),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -6,9 +6,10 @@ import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.moduleInfo.IdeaModuleInfo
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache
|
||||
|
||||
interface KotlinCacheService {
|
||||
@@ -34,6 +35,7 @@ interface KotlinCacheService {
|
||||
|
||||
fun getSuppressionCache(): KotlinSuppressCache
|
||||
fun getResolutionFacadeByModuleInfo(moduleInfo: ModuleInfo, platform: TargetPlatform): ResolutionFacade?
|
||||
fun getResolutionFacadeByModuleInfo(moduleInfo: IdeaModuleInfo, platform: TargetPlatform): ResolutionFacade
|
||||
|
||||
fun getResolutionFacadeByModuleInfo(moduleInfo: ModuleInfo, settings: PlatformAnalysisSettings): ResolutionFacade?
|
||||
}
|
||||
+1
-1
@@ -548,7 +548,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
return getResolutionFacadeByModuleInfo(moduleInfo, platform)
|
||||
}
|
||||
|
||||
private fun getResolutionFacadeByModuleInfo(moduleInfo: IdeaModuleInfo, platform: TargetPlatform): ResolutionFacade {
|
||||
override fun getResolutionFacadeByModuleInfo(moduleInfo: IdeaModuleInfo, platform: TargetPlatform): ResolutionFacade {
|
||||
val settings = moduleInfo.platformSettings(platform)
|
||||
return getResolutionFacadeByModuleInfoAndSettings(moduleInfo, settings)
|
||||
}
|
||||
|
||||
+5
-1
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.idea.FrontendInternals
|
||||
import org.jetbrains.kotlin.idea.fir.fe10.binding.KtSymbolBasedBindingContext
|
||||
import org.jetbrains.kotlin.idea.base.projectStructure.moduleInfo.IdeaModuleInfo
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
@@ -106,6 +106,10 @@ class KtSymbolBasedKotlinCacheServiceImpl(private val project: Project) : Kotlin
|
||||
override fun getResolutionFacadeByModuleInfo(moduleInfo: ModuleInfo, platform: TargetPlatform): ResolutionFacade =
|
||||
TODO("Not yet implemented")
|
||||
|
||||
override fun getResolutionFacadeByModuleInfo(moduleInfo: IdeaModuleInfo, platform: TargetPlatform): ResolutionFacade {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun getResolutionFacadeByModuleInfo(moduleInfo: ModuleInfo, settings: PlatformAnalysisSettings): ResolutionFacade? {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user