[analysis api] move analysis session classes to separate packages, use KtAnalysisApiInternals to mark internal API
This commit is contained in:
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
@RequiresOptIn
|
||||
public annotation class ForbidKtResolveInternals
|
||||
|
||||
public object ForbidKtResolve {
|
||||
@OptIn(ForbidKtResolveInternals::class)
|
||||
public inline fun <R> forbidResolveIn(actionName: String, action: () -> R): R {
|
||||
if (resovleIsForbidenInActionWithName.get() != null) return action()
|
||||
resovleIsForbidenInActionWithName.set(actionName)
|
||||
return try {
|
||||
action()
|
||||
} finally {
|
||||
resovleIsForbidenInActionWithName.set(null)
|
||||
}
|
||||
}
|
||||
|
||||
@ForbidKtResolveInternals
|
||||
public val resovleIsForbidenInActionWithName: ThreadLocal<String?> = ThreadLocal.withInitial { null }
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
public object KtAnalysisAllowanceManager {
|
||||
@OptIn(KtAnalysisApiInternals::class)
|
||||
public inline fun <R> forbidAnalysisInside(actionName: String, action: () -> R): R {
|
||||
if (resolveIsForbiddenInActionWithName.get() != null) return action()
|
||||
resolveIsForbiddenInActionWithName.set(actionName)
|
||||
return try {
|
||||
action()
|
||||
} finally {
|
||||
resolveIsForbiddenInActionWithName.set(null)
|
||||
}
|
||||
}
|
||||
|
||||
@KtAnalysisApiInternals
|
||||
public val resolveIsForbiddenInActionWithName: ThreadLocal<String?> = ThreadLocal.withInitial { null }
|
||||
}
|
||||
@@ -6,11 +6,12 @@
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.components.*
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolProvider
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolProviderMixIn
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
|
||||
+5
-7
@@ -3,14 +3,16 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.session
|
||||
@file:OptIn(KtAnalysisApiInternals::class)
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.progress.ProgressIndicator
|
||||
import com.intellij.openapi.progress.Task
|
||||
import com.intellij.openapi.util.Computable
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -27,7 +29,6 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
* @see KtAnalysisSession
|
||||
* @see analyzeWithReadAction
|
||||
*/
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
public inline fun <R> analyze(
|
||||
useSiteKtElement: KtElement,
|
||||
nonDefaultLifetimeTokenFactory: KtLifetimeTokenFactory? = null,
|
||||
@@ -37,7 +38,6 @@ public inline fun <R> analyze(
|
||||
.analyse(useSiteKtElement, nonDefaultLifetimeTokenFactory, action)
|
||||
|
||||
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
public inline fun <R> analyze(
|
||||
ktModule: KtModule,
|
||||
nonDefaultLifetimeTokenFactory: KtLifetimeTokenFactory? = null,
|
||||
@@ -49,8 +49,6 @@ public inline fun <R> analyze(
|
||||
}
|
||||
|
||||
|
||||
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
public inline fun <R> analyzeInDependedAnalysisSession(
|
||||
originalFile: KtFile,
|
||||
elementToReanalyze: KtElement,
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
@RequiresOptIn("Internal Analysis API component which should not be used outside the Analysis API implementation modules as it does not have any compatibility guarantees")
|
||||
public annotation class KtAnalysisApiInternals
|
||||
|
||||
@RequiresOptIn("Analysis should not be allowed to be ran from EDT thread, otherwise it may cause IDE freezes")
|
||||
public annotation class KtAllowAnalysisOnEdt
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
@RequiresOptIn
|
||||
public annotation class KtInternalApiMarker
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.calls
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnostic
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
|
||||
public abstract class KtAnalysisSessionComponent : KtLifetimeOwner {
|
||||
protected abstract val analysisSession: KtAnalysisSession
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
|
||||
|
||||
+2
-2
@@ -5,13 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.scopes.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
+3
-3
@@ -5,10 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
public abstract class KtSmartCastProvider : KtAnalysisSessionComponent() {
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtFlexibleType
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.analysis.api.diagnostics
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
public interface KtDiagnostic : KtLifetimeOwner {
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.tokens
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||
+6
-4
@@ -3,23 +3,25 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.session
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ReadActionConfinementValidityTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
|
||||
@KtAnalysisApiInternals
|
||||
public abstract class KtDefaultLifetimeTokenProvider {
|
||||
public abstract fun getDefaultLifetimeTokenFactory(): KtLifetimeTokenFactory
|
||||
|
||||
public companion object {
|
||||
@KtAnalysisApiInternals
|
||||
public fun getService(project: Project): KtDefaultLifetimeTokenProvider =
|
||||
project.getService(KtDefaultLifetimeTokenProvider::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@KtAnalysisApiInternals
|
||||
public class KtReadActionConfinementDefaultLifetimeTokenProvider: KtDefaultLifetimeTokenProvider() {
|
||||
override fun getDefaultLifetimeTokenFactory(): KtLifetimeTokenFactory {
|
||||
return ReadActionConfinementValidityTokenFactory
|
||||
return KtReadActionConfinementLifetimeTokenFactory
|
||||
}
|
||||
}
|
||||
+2
-5
@@ -1,12 +1,9 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.assertIsValidAndAccessible
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime
|
||||
|
||||
public interface KtLifetimeOwner {
|
||||
public val token: KtLifetimeToken
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.tokens
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import kotlin.reflect.KClass
|
||||
+16
-20
@@ -1,17 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.tokens
|
||||
@file:OptIn(KtAnalysisApiInternals::class)
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||
import org.jetbrains.kotlin.analysis.api.*
|
||||
import org.jetbrains.kotlin.analysis.api.session.InvalidWayOfUsingAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisAllowanceManager
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@OptIn(KtAllowAnalysisOnEdt::class)
|
||||
public class KtReadActionConfinementLifetimeToken(project: Project) : KtLifetimeToken() {
|
||||
private val modificationTracker = project.createProjectWideOutOfBlockModificationTracker()
|
||||
private val onCreatedTimeStamp = modificationTracker.modificationCount
|
||||
@@ -20,44 +24,41 @@ public class KtReadActionConfinementLifetimeToken(project: Project) : KtLifetime
|
||||
return onCreatedTimeStamp == modificationTracker.modificationCount
|
||||
}
|
||||
|
||||
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class)
|
||||
override fun getInvalidationReason(): String {
|
||||
if (onCreatedTimeStamp != modificationTracker.modificationCount) return "PSI has changed since creation"
|
||||
error("Getting invalidation reason for valid validity token")
|
||||
}
|
||||
|
||||
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class, ForbidKtResolveInternals::class, InvalidWayOfUsingAnalysisSession::class)
|
||||
override fun isAccessible(): Boolean {
|
||||
val application = ApplicationManager.getApplication()
|
||||
if (application.isDispatchThread && !allowOnEdt.get()) return false
|
||||
if (ForbidKtResolve.resovleIsForbidenInActionWithName.get() != null) return false
|
||||
if (KtAnalysisAllowanceManager.resolveIsForbiddenInActionWithName.get() != null) return false
|
||||
if (!application.isReadAccessAllowed) return false
|
||||
if (!ReadActionConfinementValidityTokenFactory.isInsideAnalysisContext()) return false
|
||||
if (!KtReadActionConfinementLifetimeTokenFactory.isInsideAnalysisContext()) return false
|
||||
return true
|
||||
}
|
||||
|
||||
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class, ForbidKtResolveInternals::class, InvalidWayOfUsingAnalysisSession::class)
|
||||
override fun getInaccessibilityReason(): String {
|
||||
val application = ApplicationManager.getApplication()
|
||||
if (application.isDispatchThread && !allowOnEdt.get()) return "Called in EDT thread"
|
||||
if (!application.isReadAccessAllowed) return "Called outside read action"
|
||||
ForbidKtResolve.resovleIsForbidenInActionWithName.get()?.let { actionName ->
|
||||
KtAnalysisAllowanceManager.resolveIsForbiddenInActionWithName.get()?.let { actionName ->
|
||||
return "Resolve is forbidden in $actionName"
|
||||
}
|
||||
if (!ReadActionConfinementValidityTokenFactory.isInsideAnalysisContext()) return "Called outside analyse method"
|
||||
if (!KtReadActionConfinementLifetimeTokenFactory.isInsideAnalysisContext()) return "Called outside analyse method"
|
||||
error("Getting inaccessibility reason for validity token when it is accessible")
|
||||
}
|
||||
|
||||
|
||||
public companion object {
|
||||
@HackToForceAllowRunningAnalyzeOnEDT
|
||||
@KtAnalysisApiInternals
|
||||
public val allowOnEdt: ThreadLocal<Boolean> = ThreadLocal.withInitial { false }
|
||||
}
|
||||
|
||||
public override val factory: KtLifetimeTokenFactory = ReadActionConfinementValidityTokenFactory
|
||||
public override val factory: KtLifetimeTokenFactory = KtReadActionConfinementLifetimeTokenFactory
|
||||
}
|
||||
|
||||
public object ReadActionConfinementValidityTokenFactory : KtLifetimeTokenFactory() {
|
||||
public object KtReadActionConfinementLifetimeTokenFactory : KtLifetimeTokenFactory() {
|
||||
override val identifier: KClass<out KtLifetimeToken> = KtReadActionConfinementLifetimeToken::class
|
||||
|
||||
override fun create(project: Project): KtLifetimeToken = KtReadActionConfinementLifetimeToken(project)
|
||||
@@ -75,18 +76,13 @@ public object ReadActionConfinementValidityTokenFactory : KtLifetimeTokenFactory
|
||||
internal fun isInsideAnalysisContext() = currentAnalysisContextEnteringCount.get() > 0
|
||||
|
||||
}
|
||||
|
||||
@RequiresOptIn("All frontend related work should not be allowed to be ran from EDT thread. Only use it as a temporary solution")
|
||||
public annotation class HackToForceAllowRunningAnalyzeOnEDT
|
||||
|
||||
/**
|
||||
* All frontend related work should not be allowed to be ran from EDT thread. Only use it as a temporary solution.
|
||||
*
|
||||
* @see KtAnalysisSession
|
||||
* @see KtReadActionConfinementLifetimeToken
|
||||
*/
|
||||
@HackToForceAllowRunningAnalyzeOnEDT
|
||||
public inline fun <T> hackyAllowRunningOnEdt(action: () -> T): T {
|
||||
@KtAllowAnalysisOnEdt
|
||||
public inline fun <T> allowAnalysisOnEdt(action: () -> T): T {
|
||||
if (KtReadActionConfinementLifetimeToken.allowOnEdt.get()) return action()
|
||||
KtReadActionConfinementLifetimeToken.allowOnEdt.set(true)
|
||||
try {
|
||||
+4
-3
@@ -1,15 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api
|
||||
package org.jetbrains.kotlin.analysis.api.lifetime.impl
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ApplicationListener
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
|
||||
@KtInternalApiMarker
|
||||
@KtAnalysisApiInternals
|
||||
public class NoWriteActionInAnalyseCallChecker(parentDisposable: Disposable) {
|
||||
init {
|
||||
val listener = object : ApplicationListener {
|
||||
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.scopes
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
|
||||
|
||||
+6
-20
@@ -10,41 +10,31 @@ import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtInternalApiMarker
|
||||
import org.jetbrains.kotlin.analysis.api.NoWriteActionInAnalyseCallChecker
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.impl.NoWriteActionInAnalyseCallChecker
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtDefaultLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
@RequiresOptIn("To use analysis session, consider using analyze/analyzeWithReadAction/analyseInModalWindow methods")
|
||||
public annotation class InvalidWayOfUsingAnalysisSession
|
||||
|
||||
@RequiresOptIn
|
||||
public annotation class KtAnalysisSessionProviderInternals
|
||||
|
||||
/**
|
||||
* Provides [KtAnalysisSession] by [contextElement]
|
||||
* Should not be used directly, consider using [analyse]/[analyzeWithReadAction]/[analyzeInModalWindow] instead
|
||||
*/
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
@KtAnalysisApiInternals
|
||||
public abstract class KtAnalysisSessionProvider(public val project: Project) : Disposable {
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
@OptIn(KtInternalApiMarker::class)
|
||||
public val noWriteActionInAnalyseCallChecker: NoWriteActionInAnalyseCallChecker = NoWriteActionInAnalyseCallChecker(this)
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public abstract fun getAnalysisSession(useSiteKtElement: KtElement, factory: KtLifetimeTokenFactory): KtAnalysisSession
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public abstract fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public abstract fun getAnalysisSessionByUseSiteKtModule(useSiteKtModule: KtModule, factory: KtLifetimeTokenFactory): KtAnalysisSession
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public inline fun <R> analyzeWithSymbolAsContext(
|
||||
contextSymbol: KtSymbol,
|
||||
action: KtAnalysisSession.() -> R
|
||||
@@ -53,7 +43,6 @@ public abstract class KtAnalysisSessionProvider(public val project: Project) : D
|
||||
return action(analysisSession)
|
||||
}
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public inline fun <R> analyseInDependedAnalysisSession(
|
||||
originalFile: KtFile,
|
||||
elementToReanalyze: KtElement,
|
||||
@@ -69,7 +58,6 @@ public abstract class KtAnalysisSessionProvider(public val project: Project) : D
|
||||
return analyse(dependedAnalysisSession, factory, action)
|
||||
}
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public inline fun <R> analyse(
|
||||
useSiteKtElement: KtElement,
|
||||
nonDefaultLifetimeTokenFactory: KtLifetimeTokenFactory?,
|
||||
@@ -80,7 +68,6 @@ public abstract class KtAnalysisSessionProvider(public val project: Project) : D
|
||||
return analyse(getAnalysisSession(useSiteKtElement, factory), factory, action)
|
||||
}
|
||||
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public inline fun <R> analyze(
|
||||
useSiteKtModule: KtModule,
|
||||
nonDefaultLifetimeTokenFactory: KtLifetimeTokenFactory?,
|
||||
@@ -92,8 +79,6 @@ public abstract class KtAnalysisSessionProvider(public val project: Project) : D
|
||||
return analyse(getAnalysisSessionByUseSiteKtModule(useSiteKtModule, factory), factory, action)
|
||||
}
|
||||
|
||||
@OptIn(KtAnalysisSessionProviderInternals::class, KtInternalApiMarker::class)
|
||||
@InvalidWayOfUsingAnalysisSession
|
||||
public inline fun <R> analyse(
|
||||
analysisSession: KtAnalysisSession,
|
||||
factory: KtLifetimeTokenFactory,
|
||||
@@ -115,6 +100,7 @@ public abstract class KtAnalysisSessionProvider(public val project: Project) : D
|
||||
override fun dispose() {}
|
||||
|
||||
public companion object {
|
||||
@KtAnalysisApiInternals
|
||||
public fun getInstance(project: Project): KtAnalysisSessionProvider =
|
||||
ServiceManager.getService(project, KtAnalysisSessionProvider::class.java)
|
||||
}
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.symbols
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.annotationsByClassId
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.api.symbols
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
|
||||
public interface KtSymbol : KtLifetimeOwner {
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
* * for class & type alias symbols if its qualified name was not changed
|
||||
* * for package symbol if the package is still exists
|
||||
*
|
||||
* @see org.jetbrains.kotlin.analysis.api.ReadActionConfinementValidityToken
|
||||
* @see org.jetbrains.kotlin.analysis.api.ReadActionConfinementKtLifetimeToken
|
||||
*/
|
||||
public abstract class KtSymbolPointer<out S : KtSymbol> {
|
||||
/**
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.types
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
|
||||
|
||||
public interface KtSubstitutor : KtLifetimeOwner {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.api.types
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtTypeArgument
|
||||
import org.jetbrains.kotlin.analysis.api.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotated
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
|
||||
|
||||
Reference in New Issue
Block a user