diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/CliFe10AnalysisFacade.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/CliFe10AnalysisFacade.kt index 94db7c301d9..d5e0f7e6ff9 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/CliFe10AnalysisFacade.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/CliFe10AnalysisFacade.kt @@ -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) } } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10AnalysisSession.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10AnalysisSession.kt index 9f54623bfde..10540022c0c 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10AnalysisSession.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10AnalysisSession.kt @@ -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) } } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CliAnalysisSessionProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CliAnalysisSessionProvider.kt index 543956aae58..eee9688a8b3 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CliAnalysisSessionProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CliAnalysisSessionProvider.kt @@ -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 { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt index 6827c4ca79c..f47b8ea88e0 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSessionProvider.kt @@ -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) } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolRestoreFromDifferentModuleTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolRestoreFromDifferentModuleTest.kt index cb0cd33f26b..bbfd1572494 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolRestoreFromDifferentModuleTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSymbolRestoreFromDifferentModuleTest.kt @@ -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() diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt index 8976cb63d27..9054d3fc28e 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/KtAnalysisSession.kt @@ -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) } \ No newline at end of file diff --git a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt index d209bd86f1f..1ea7e121a64 100644 --- a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt +++ b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt @@ -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") diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LLFirResolveSession.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LLFirResolveSession.kt index eae525c8f94..d324ebf0172 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LLFirResolveSession.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LLFirResolveSession.kt @@ -61,5 +61,5 @@ abstract class LLFirResolveSession { } fun LLFirResolveSession.getModule(element: PsiElement): KtModule { - return ProjectStructureProvider.getModule(element, useSiteKtModule) + return ProjectStructureProvider.getModule(project, element, useSiteKtModule) } \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt index 8118138f226..5f52b8a79f4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/exceptionUtils.kt @@ -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) { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt index 7ad5d6bfb83..1cee31b742f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt @@ -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 diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/firTestUtils.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/firTestUtils.kt index 6615fa2b8d8..9c0cdc4cf17 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/firTestUtils.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/firTestUtils.kt @@ -40,7 +40,7 @@ internal fun FirDeclaration.name(): String = symbol.name() internal inline fun 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) } diff --git a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt index 7e9199c84ce..34dc12cb1b0 100644 --- a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt +++ b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/ProjectStructureProvider.kt @@ -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) } } } \ No newline at end of file diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt index acafe39a22d..7ed1d438d6b 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt @@ -94,7 +94,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase