@@ -65,6 +65,7 @@ import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinGlobalModif
65
65
import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinModificationTrackerFactory
66
66
import org.jetbrains.kotlin.analysis.api.platform.packages.KotlinPackagePartProviderFactory
67
67
import org.jetbrains.kotlin.analysis.api.platform.packages.KotlinPackageProviderFactory
68
+ import org.jetbrains.kotlin.analysis.api.platform.permissions.KotlinAnalysisPermissionOptions
68
69
import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KotlinByModulesResolutionScopeProvider
69
70
import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KotlinResolutionScopeProvider
70
71
import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
@@ -78,14 +79,14 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStan
78
79
import org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStandaloneDeclarationProviderMerger
79
80
import org.jetbrains.kotlin.analysis.api.standalone.base.modification.KotlinStandaloneGlobalModificationService
80
81
import org.jetbrains.kotlin.analysis.api.standalone.base.modification.KotlinStandaloneModificationTrackerFactory
82
+ import org.jetbrains.kotlin.analysis.api.standalone.base.permissions.KotlinStandaloneAnalysisPermissionOptions
81
83
import org.jetbrains.kotlin.analysis.api.standalone.base.projectStructure.FirStandaloneServiceRegistrar
82
84
import org.jetbrains.kotlin.analysis.api.standalone.base.projectStructure.StandaloneProjectFactory
83
85
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
84
86
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLSealedInheritorsProvider
85
87
import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleBuilder
86
88
import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleProviderBuilder
87
89
import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtSdkModule
88
- import org.jetbrains.kotlin.analysis.project.structure.impl.KaSourceModuleImpl
89
90
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots
90
91
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironmentMode
91
92
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
@@ -136,6 +137,9 @@ class KotlinSymbolProcessing(
136
137
// Let exceptions pop through to the caller. Don't catch and convert them to, e.g., INTERNAL_ERROR.
137
138
}
138
139
140
+ private var applicationServiceRegistered = false
141
+ private var applicationServiceRegisteredLock = object {}
142
+
139
143
init {
140
144
// We depend on swing (indirectly through PSI or something), so we want to declare headless mode,
141
145
// to avoid accidentally starting the UI thread. But, don't set it if it was set externally.
@@ -145,7 +149,7 @@ class KotlinSymbolProcessing(
145
149
setupIdeaStandaloneExecution()
146
150
}
147
151
148
- @OptIn(KaExperimentalApi ::class )
152
+ @OptIn(KaExperimentalApi ::class , KaImplementationDetail :: class )
149
153
private fun createAASession (
150
154
compilerConfiguration : CompilerConfiguration ,
151
155
projectDisposable : Disposable ,
@@ -238,6 +242,21 @@ class KotlinSymbolProcessing(
238
242
StandaloneProjectFactory .createPackagePartsProvider(
239
243
libraryRoots,
240
244
)
245
+
246
+ synchronized(applicationServiceRegisteredLock) {
247
+ if (! applicationServiceRegistered) {
248
+ applicationServiceRegistered = true
249
+ val application = kotlinCoreProjectEnvironment.environment.application
250
+ application.registerService(
251
+ org.jetbrains.kotlin.analysis.api.permissions.KaAnalysisPermissionRegistry ::class .java,
252
+ org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionRegistry ::class .java
253
+ )
254
+ application.registerService(
255
+ KotlinAnalysisPermissionOptions ::class .java,
256
+ KotlinStandaloneAnalysisPermissionOptions ::class .java
257
+ )
258
+ }
259
+ }
241
260
registerProjectServices(
242
261
kotlinCoreProjectEnvironment,
243
262
ktFiles,
@@ -331,6 +350,7 @@ class KotlinSymbolProcessing(
331
350
}
332
351
}
333
352
353
+ @OptIn(KaExperimentalApi ::class )
334
354
private fun prepareAllKSFiles (
335
355
kotlinCoreProjectEnvironment : KotlinCoreProjectEnvironment ,
336
356
modules : List <KaModule >,
@@ -339,8 +359,8 @@ class KotlinSymbolProcessing(
339
359
val project = kotlinCoreProjectEnvironment.project
340
360
val ktFiles = mutableSetOf<KtFile >()
341
361
val javaFiles = mutableSetOf<PsiJavaFile >()
342
- modules.filterIsInstance<KaSourceModuleImpl >().forEach {
343
- it.sourceRoots .forEach {
362
+ modules.filterIsInstance<KaSourceModule >().forEach {
363
+ it.psiRoots .forEach {
344
364
when (it) {
345
365
is KtFile -> ktFiles.add(it)
346
366
is PsiJavaFile -> if (javaFileManager != null ) javaFiles.add(it)
@@ -652,6 +672,8 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
652
672
org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService ::class .java,
653
673
org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.LLStubBasedLibrarySymbolProviderFactory ::class .java,
654
674
org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionChecker ::class .java,
675
+ org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionRegistry ::class .java,
676
+ org.jetbrains.kotlin.analysis.api.permissions.KaAnalysisPermissionRegistry ::class .java,
655
677
org.jetbrains.kotlin.analysis.api.platform.KotlinProjectMessageBusProvider ::class .java,
656
678
org.jetbrains.kotlin.analysis.api.platform.permissions.KaAnalysisPermissionChecker ::class .java,
657
679
org.jetbrains.kotlin.analysis.api.platform.projectStructure.KotlinSimpleGlobalSearchScopeMerger ::class .java,
0 commit comments