AA: add analyzeWithKtModule API for analyzing without KtElement
This commit is contained in:
committed by
Ilya Kirillov
parent
ef0160c026
commit
7b038860b5
+5
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -36,5 +37,9 @@ class KtFe10AnalysisSessionProvider : KtAnalysisSessionProvider() {
|
|||||||
throw UnsupportedOperationException("getAnalysisSessionBySymbol() should not be used on KtFe10AnalysisSession")
|
throw UnsupportedOperationException("getAnalysisSessionBySymbol() should not be used on KtFe10AnalysisSession")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getAnalysisSessionByModule(ktModule: KtModule, factory: KtLifetimeTokenFactory): KtAnalysisSession {
|
||||||
|
throw UnsupportedOperationException("getAnalysisSessionByModule() should not be used on KtFe10AnalysisSession")
|
||||||
|
}
|
||||||
|
|
||||||
override fun clearCaches() {}
|
override fun clearCaches() {}
|
||||||
}
|
}
|
||||||
+6
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
|
|
||||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
@@ -29,6 +30,11 @@ class KtFirAnalysisSessionProvider(project: Project) : CachingKtAnalysisSessionP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getFirResolveSession(contextModule: KtModule): LLFirResolveSession {
|
||||||
|
checkNotNull(contextModule.project)
|
||||||
|
return contextModule.getFirResolveSession(contextModule.project!!)
|
||||||
|
}
|
||||||
|
|
||||||
override fun createAnalysisSession(
|
override fun createAnalysisSession(
|
||||||
firResolveSession: LLFirResolveSession,
|
firResolveSession: LLFirResolveSession,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
|
|||||||
+11
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -29,6 +30,8 @@ abstract class CachingKtAnalysisSessionProvider<State : Any>(private val project
|
|||||||
protected abstract fun getFirResolveSession(contextElement: KtElement): State
|
protected abstract fun getFirResolveSession(contextElement: KtElement): State
|
||||||
protected abstract fun getFirResolveSession(contextSymbol: KtSymbol): State
|
protected abstract fun getFirResolveSession(contextSymbol: KtSymbol): State
|
||||||
|
|
||||||
|
protected abstract fun getFirResolveSession(contextModule: KtModule): State
|
||||||
|
|
||||||
protected abstract fun createAnalysisSession(
|
protected abstract fun createAnalysisSession(
|
||||||
firResolveSession: State,
|
firResolveSession: State,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
@@ -43,6 +46,14 @@ abstract class CachingKtAnalysisSessionProvider<State : Any>(private val project
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun getAnalysisSessionByModule(ktModule: KtModule, factory: KtLifetimeTokenFactory): KtAnalysisSession {
|
||||||
|
val firResolveSession = getFirResolveSession(ktModule)
|
||||||
|
return cache.getAnalysisSession(firResolveSession to factory.identifier) {
|
||||||
|
val validityToken = factory.create(project)
|
||||||
|
createAnalysisSession(firResolveSession, validityToken)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final override fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession {
|
final override fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession {
|
||||||
val firResolveSession = getFirResolveSession(contextSymbol)
|
val firResolveSession = getFirResolveSession(contextSymbol)
|
||||||
val token = contextSymbol.token
|
val token = contextSymbol.token
|
||||||
|
|||||||
+16
-1
@@ -15,8 +15,9 @@ import com.intellij.openapi.util.Computable
|
|||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtAlwaysAccessibleLifetimeTokenFactory
|
import org.jetbrains.kotlin.analysis.api.tokens.KtAlwaysAccessibleLifetimeTokenFactory
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.ReadActionConfinementValidityTokenFactoryFactory
|
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
import org.jetbrains.kotlin.analysis.api.tokens.KtLifetimeTokenFactory
|
||||||
|
import org.jetbrains.kotlin.analysis.api.tokens.ReadActionConfinementValidityTokenFactoryFactory
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
@@ -42,6 +43,9 @@ public abstract class KtAnalysisSessionProvider : Disposable {
|
|||||||
@InvalidWayOfUsingAnalysisSession
|
@InvalidWayOfUsingAnalysisSession
|
||||||
public abstract fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession
|
public abstract fun getAnalysisSessionBySymbol(contextSymbol: KtSymbol): KtAnalysisSession
|
||||||
|
|
||||||
|
@InvalidWayOfUsingAnalysisSession
|
||||||
|
public abstract fun getAnalysisSessionByModule(ktModule: KtModule, factory: KtLifetimeTokenFactory): KtAnalysisSession
|
||||||
|
|
||||||
@InvalidWayOfUsingAnalysisSession
|
@InvalidWayOfUsingAnalysisSession
|
||||||
public inline fun <R> analyzeWithSymbolAsContext(
|
public inline fun <R> analyzeWithSymbolAsContext(
|
||||||
contextSymbol: KtSymbol,
|
contextSymbol: KtSymbol,
|
||||||
@@ -173,3 +177,14 @@ public inline fun <R> analyseInModalWindow(
|
|||||||
task.queue()
|
task.queue()
|
||||||
return task.result
|
return task.result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
|
public inline fun <R> analyzeWithKtModule(
|
||||||
|
ktModule: KtModule,
|
||||||
|
tokenFactory: KtLifetimeTokenFactory,
|
||||||
|
crossinline action: KtAnalysisSession.() -> R
|
||||||
|
): R {
|
||||||
|
checkNotNull(ktModule.project)
|
||||||
|
val sessionProvider = KtAnalysisSessionProvider.getInstance(ktModule.project!!)
|
||||||
|
return sessionProvider.getAnalysisSessionByModule(ktModule, tokenFactory).action()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user