[LL API] Pass the project instance to ProjectStructureProvider

Eliminate unnecessary PSI tree traversal by providing the 'Project'
instance explicitly.
This commit is contained in:
Yan Zhulanow
2023-05-15 15:58:20 +09:00
committed by Space Team
parent bb37a959d4
commit c6d8876f9f
13 changed files with 26 additions and 19 deletions
@@ -68,8 +68,9 @@ class CliFe10AnalysisFacade : Fe10AnalysisFacade {
}
private fun getHandler(useSiteElement: KtElement): KtFe10AnalysisHandlerExtension {
val ktModule = ProjectStructureProvider.getModule(useSiteElement, contextualModule = null)
return KtFe10AnalysisHandlerExtension.getInstance(ktModule.project, ktModule)
val project = useSiteElement.project
val ktModule = ProjectStructureProvider.getModule(project, useSiteElement, contextualModule = null)
return KtFe10AnalysisHandlerExtension.getInstance(project, ktModule)
}
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.components.*
@@ -26,9 +27,9 @@ class KtFe10AnalysisSession(
val analysisContext: Fe10AnalysisContext,
override val useSiteModule: KtModule
) : KtAnalysisSession(analysisContext.token) {
constructor(contextElement: KtElement, token: KtLifetimeToken) : this(
Fe10AnalysisContext(Fe10AnalysisFacade.getInstance(contextElement.project), contextElement, token),
ProjectStructureProvider.getModule(contextElement, contextualModule = null)
constructor(project: Project, contextElement: KtElement, token: KtLifetimeToken) : this(
Fe10AnalysisContext(Fe10AnalysisFacade.getInstance(project), contextElement, token),
ProjectStructureProvider.getModule(project, contextElement, contextualModule = null)
)
@@ -70,6 +71,6 @@ class KtFe10AnalysisSession(
override fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession =
withValidityAssertion {
KtFe10AnalysisSession(elementToReanalyze, token)
KtFe10AnalysisSession(originalKtFile.project, elementToReanalyze, token)
}
}
@@ -18,7 +18,7 @@ import java.lang.UnsupportedOperationException
@OptIn(KtAnalysisApiInternals::class)
class KtFe10AnalysisSessionProvider(project: Project) : KtAnalysisSessionProvider(project) {
override fun getAnalysisSession(useSiteKtElement: KtElement, factory: KtLifetimeTokenFactory): KtAnalysisSession {
return KtFe10AnalysisSession(useSiteKtElement, factory.create(project))
return KtFe10AnalysisSession(project, useSiteKtElement, factory.create(project))
}
override fun getAnalysisSessionByUseSiteKtModule(useSiteKtModule: KtModule, factory: KtLifetimeTokenFactory): KtAnalysisSession {