[LL API] Pass the project instance to ProjectStructureProvider
Eliminate unnecessary PSI tree traversal by providing the 'Project' instance explicitly.
This commit is contained in:
+3
-2
@@ -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
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ class KtFirAnalysisSessionProvider(project: Project) : KtAnalysisSessionProvider
|
||||
}
|
||||
|
||||
override fun getAnalysisSession(useSiteKtElement: KtElement, factory: KtLifetimeTokenFactory): KtAnalysisSession {
|
||||
val module = ProjectStructureProvider.getModule(useSiteKtElement, contextualModule = null)
|
||||
val module = ProjectStructureProvider.getModule(project, useSiteKtElement, contextualModule = null)
|
||||
return getAnalysisSessionByUseSiteKtModule(module, factory)
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -32,8 +32,9 @@ abstract class AbstractSymbolRestoreFromDifferentModuleTest : AbstractAnalysisAp
|
||||
caretTag = "restoreAt"
|
||||
).single().first
|
||||
|
||||
val declarationModule = ProjectStructureProvider.getModule(declaration, contextualModule = null)
|
||||
val restoreAtModule = ProjectStructureProvider.getModule(restoreAt, contextualModule = null)
|
||||
val project = declaration.project
|
||||
val declarationModule = ProjectStructureProvider.getModule(project, declaration, contextualModule = null)
|
||||
val restoreAtModule = ProjectStructureProvider.getModule(project, restoreAt, contextualModule = null)
|
||||
|
||||
val (debugRendered, prettyRendered, pointer) = analyseForTest(declaration) {
|
||||
val symbol = declaration.getSymbol()
|
||||
|
||||
@@ -182,5 +182,5 @@ public abstract class KtAnalysisSession(final override val token: KtLifetimeToke
|
||||
}
|
||||
|
||||
public fun KtAnalysisSession.getModule(element: PsiElement): KtModule {
|
||||
return ProjectStructureProvider.getModule(element, useSiteModule)
|
||||
return ProjectStructureProvider.getModule(useSiteModule.project, element, useSiteModule)
|
||||
}
|
||||
+5
-1
@@ -94,7 +94,11 @@ abstract class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSim
|
||||
abstract fun getImportAlias(): KtImportAlias?
|
||||
|
||||
private fun isAssignmentResolved(project: Project, binaryExpression: KtBinaryExpression): Boolean {
|
||||
val sourceModule = ProjectStructureProvider.getModule(binaryExpression, contextualModule = null) as? KtSourceModule ?: return false
|
||||
val sourceModule = ProjectStructureProvider.getModule(project, binaryExpression, contextualModule = null)
|
||||
if (sourceModule !is KtSourceModule) {
|
||||
return false
|
||||
}
|
||||
|
||||
val reference = binaryExpression.operationReference.reference ?: return false
|
||||
val pluginPresenceService = project.getService(KtCompilerPluginsProvider::class.java)
|
||||
?: error("KtAssignResolutionPresenceService is not available as a service")
|
||||
|
||||
+1
-1
@@ -61,5 +61,5 @@ abstract class LLFirResolveSession {
|
||||
}
|
||||
|
||||
fun LLFirResolveSession.getModule(element: PsiElement): KtModule {
|
||||
return ProjectStructureProvider.getModule(element, useSiteKtModule)
|
||||
return ProjectStructureProvider.getModule(project, element, useSiteKtModule)
|
||||
}
|
||||
+1
-1
@@ -66,7 +66,7 @@ fun errorWithFirSpecificEntries(
|
||||
}
|
||||
|
||||
if (psi != null) {
|
||||
withPsiEntry("psi", psi, ProjectStructureProvider.getModule(psi, contextualModule = null))
|
||||
withPsiEntry("psi", psi, ProjectStructureProvider.getModule(psi.project, psi, contextualModule = null))
|
||||
}
|
||||
|
||||
if (coneType != null) {
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ abstract class AbstractFileStructureTest : AbstractLowLevelApiSingleFileTest() {
|
||||
}
|
||||
|
||||
private fun KtFile.getFileStructure(): FileStructure {
|
||||
val module = ProjectStructureProvider.getModule(this, contextualModule = null)
|
||||
val module = ProjectStructureProvider.getModule(project, this, contextualModule = null)
|
||||
val moduleFirResolveSession = module.getFirResolveSession(project)
|
||||
check(moduleFirResolveSession.isSourceSession)
|
||||
val session = moduleFirResolveSession.getSessionFor(module) as LLFirResolvableModuleSession
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ internal fun FirDeclaration.name(): String = symbol.name()
|
||||
|
||||
internal inline fun <R> resolveWithClearCaches(context: KtElement, action: (LLFirResolveSession) -> R): R {
|
||||
val project = context.project
|
||||
val module = ProjectStructureProvider.getModule(context, contextualModule = null)
|
||||
val module = ProjectStructureProvider.getModule(project, context, contextualModule = null)
|
||||
val resolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSessionNoCaching(module)
|
||||
return action(resolveSession)
|
||||
}
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ public abstract class ProjectStructureProvider {
|
||||
return project.getService(ProjectStructureProvider::class.java)
|
||||
}
|
||||
|
||||
public fun getModule(element: PsiElement, contextualModule: KtModule?): KtModule {
|
||||
return getInstance(element.project).getModule(element, contextualModule)
|
||||
public fun getModule(project: Project, element: PsiElement, contextualModule: KtModule?): KtModule {
|
||||
return getInstance(project).getModule(element, contextualModule)
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -94,7 +94,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
||||
.map { fqn.child(it) }
|
||||
|
||||
override fun createInstanceOfLightScript(script: KtScript): KtLightClass {
|
||||
val module = ProjectStructureProvider.getModule(script, contextualModule = null)
|
||||
val module = ProjectStructureProvider.getModule(project, script, contextualModule = null)
|
||||
return SymbolLightClassForScript(script, module)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user