diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt index 83171b990e4..f20b3c08006 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSession.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeProvider import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.types.KtType +import org.jetbrains.kotlin.idea.frontend.api.types.KtTypeRenderer import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.* @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.psi.* * - Should not be accessed from event dispatch thread * - Should not be accessed outside read action * - Should not be leaked outside read action it was created in + * - To be sure that session is not leaked it is forbidden to store it in a variable, consider working with it only in [analyze] context * - All entities retrieved from analysis facade should not be leaked outside the read action KtAnalysisSession was created in * * To pass a symbol from one read action to another use [KtSymbolPointer] which can be created from a symbol by [KtSymbol.createPointer] diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt index b6640157e15..ebb375bfcf9 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/KtAnalysisSessionProvider.kt @@ -13,9 +13,15 @@ abstract class KtAnalysisSessionProvider { abstract fun getAnalysisSessionFor(contextElement: KtElement): KtAnalysisSession } +@Suppress("DeprecatedCallableAddReplaceWith") +@Deprecated( + "Should not be directly used as it is not allowed to store KtAnalysisSession in a variable, consider using `analyze` instead", + level = DeprecationLevel.WARNING, +) fun getAnalysisSessionFor(contextElement: KtElement): KtAnalysisSession = contextElement.project.service().getAnalysisSessionFor(contextElement) +@Suppress("DEPRECATION") inline fun analyze(contextElement: KtElement, action: KtAnalysisSession.() -> R): R = getAnalysisSessionFor(contextElement).action()