@@ -44,6 +44,8 @@ import com.google.devtools.ksp.symbol.Origin
44
44
import com.intellij.core.CoreApplicationEnvironment
45
45
import com.intellij.mock.MockProject
46
46
import com.intellij.openapi.Disposable
47
+ import com.intellij.openapi.application.ApplicationManager
48
+ import com.intellij.openapi.application.runWriteAction
47
49
import com.intellij.openapi.project.Project
48
50
import com.intellij.openapi.util.Disposer
49
51
import com.intellij.openapi.vfs.StandardFileSystems
@@ -53,6 +55,7 @@ import com.intellij.psi.PsiManager
53
55
import com.intellij.psi.PsiTreeChangeAdapter
54
56
import com.intellij.psi.PsiTreeChangeListener
55
57
import com.intellij.psi.search.GlobalSearchScope
58
+ import com.intellij.util.ui.EDT
56
59
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
57
60
import org.jetbrains.kotlin.analysis.api.KaImplementationDetail
58
61
import org.jetbrains.kotlin.analysis.api.platform.KotlinMessageBusProvider
@@ -539,12 +542,14 @@ class KotlinSymbolProcessing(
539
542
}
540
543
541
544
fun dropCaches () {
542
- KotlinGlobalModificationService .getInstance(project).publishGlobalSourceModuleStateModification()
543
- KaSessionProvider .getInstance(project).clearCaches()
544
- psiManager.dropResolveCaches()
545
- psiManager.dropPsiCaches()
545
+ maybeRunInWriteAction {
546
+ KotlinGlobalModificationService .getInstance(project).publishGlobalSourceModuleStateModification()
547
+ KaSessionProvider .getInstance(project).clearCaches()
548
+ psiManager.dropResolveCaches()
549
+ psiManager.dropPsiCaches()
546
550
547
- KSObjectCacheManager .clear()
551
+ KSObjectCacheManager .clear()
552
+ }
548
553
}
549
554
550
555
var rounds = 0
@@ -623,7 +628,9 @@ class KotlinSymbolProcessing(
623
628
dropCaches()
624
629
codeGenerator.closeFiles()
625
630
} finally {
626
- Disposer .dispose(projectDisposable)
631
+ maybeRunInWriteAction {
632
+ Disposer .dispose(projectDisposable)
633
+ }
627
634
}
628
635
629
636
return if (logger.hasError) ExitCode .PROCESSING_ERROR else ExitCode .OK
@@ -668,6 +675,8 @@ fun String?.toKotlinVersion(): KotlinVersion {
668
675
@Suppress(" unused" )
669
676
@OptIn(KaImplementationDetail ::class )
670
677
internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf (
678
+ it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap ::class .java,
679
+ it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap ::class .java,
671
680
org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSourceWithSmartPointerFactory ::class .java,
672
681
org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KaBaseModuleProvider ::class .java,
673
682
org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService ::class .java,
@@ -677,7 +686,7 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
677
686
org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStandaloneFirDirectInheritorsProvider ::class .java,
678
687
org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLRealFirElementByPsiElementChooser ::class .java,
679
688
org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService ::class .java,
680
- org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization. LLStubBasedLibrarySymbolProviderFactory ::class .java,
689
+ org.jetbrains.kotlin.analysis.low.level.api.fir.symbolProviders.factories. LLStubOriginLibrarySymbolProviderFactory ::class .java,
681
690
org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionChecker ::class .java,
682
691
org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionRegistry ::class .java,
683
692
org.jetbrains.kotlin.analysis.api.impl.base.symbols.pointers.KaBasePsiSymbolPointerCreator ::class .java,
@@ -698,6 +707,8 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
698
707
com.intellij.diagnostic.ActivityCategory ::class .java,
699
708
com.intellij.openapi.application.JetBrainsProtocolHandler ::class .java,
700
709
com.intellij.openapi.editor.impl.EditorDocumentPriorities ::class .java,
710
+ com.intellij.platform.diagnostic.telemetry.TelemetryManager ::class .java,
711
+ com.intellij.psi.impl.PsiSubstitutorImpl ::class .java,
701
712
com.intellij.psi.tree.ChildRoleBase ::class .java,
702
713
com.intellij.util.xmlb.Constants ::class .java,
703
714
com.intellij.xml.CommonXmlStrings ::class .java,
@@ -725,3 +736,17 @@ fun TargetPlatform.getPlatformInfo(kspConfig: KSPConfig): List<PlatformInfo> =
725
736
else -> UnknownPlatformInfoImpl (platform.toString())
726
737
}
727
738
}
739
+
740
+ private fun <R > maybeRunInWriteAction (f : () -> R ) {
741
+ synchronized(EDT ::class .java) {
742
+ if (! EDT .isCurrentThreadEdt())
743
+ EDT .updateEdt()
744
+ if (ApplicationManager .getApplication() != null ) {
745
+ runWriteAction {
746
+ f()
747
+ }
748
+ } else {
749
+ f()
750
+ }
751
+ }
752
+ }
0 commit comments