gradle.kts: update notifications when scripting support was changed

This commit is contained in:
Sergey Rostov
2020-06-14 20:38:41 +03:00
parent caa5aadc98
commit 0234678804
7 changed files with 31 additions and 5 deletions
@@ -62,7 +62,7 @@ object LoadScriptConfigurationNotificationFactory {
if (project.isDisposed) return@invokeLater if (project.isDisposed) return@invokeLater
val fileEditorManager = FileEditorManager.getInstance(project) val fileEditorManager = FileEditorManager.getInstance(project)
(fileEditorManager.getSelectedEditor(this))?.let { fileEditorManager.getAllEditors(this).forEach {
f(it, fileEditorManager) f(it, fileEditorManager)
} }
} }
@@ -337,6 +337,16 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
} }
} }
fun ensureNotificationsRemoved(file: VirtualFile) {
if (cache.remove(file)) {
saveReports(file, listOf())
file.removeScriptDependenciesNotificationPanel(project)
}
// this notification can be shown before something will be in cache
LoadScriptConfigurationNotificationFactory.hideNotification(file, project)
}
companion object { companion object {
fun getInstance(project: Project) = fun getInstance(project: Project) =
(ScriptConfigurationManager.getInstance(project) as CompositeScriptConfigurationManager).default (ScriptConfigurationManager.getInstance(project) as CompositeScriptConfigurationManager).default
@@ -30,6 +30,7 @@ interface ScriptConfigurationCache {
fun setApplied(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) fun setApplied(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot)
fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot)
fun remove(file: VirtualFile): Boolean
fun allApplied(): List<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>> fun allApplied(): List<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
fun clear() fun clear()
@@ -33,6 +33,9 @@ open class ScriptConfigurationMemoryCache(
memoryCache.put(file, old.copy(applied = configurationSnapshot)) memoryCache.put(file, old.copy(applied = configurationSnapshot))
} }
override fun remove(file: VirtualFile) =
memoryCache.remove(file)
@Synchronized @Synchronized
override fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) { override fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) {
val old = memoryCache[file] ?: ScriptConfigurationState() val old = memoryCache[file] ?: ScriptConfigurationState()
@@ -23,12 +23,14 @@ import com.intellij.psi.PsiManager
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.util.EDT import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.KtFile
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
@@ -233,7 +235,7 @@ class ScriptClassRootsUpdater(
private fun updateHighlighting(project: Project, filter: (VirtualFile) -> Boolean) { private fun updateHighlighting(project: Project, filter: (VirtualFile) -> Boolean) {
if (!project.isOpen) return if (!project.isOpen) return
val openFiles = FileEditorManager.getInstance(project).openFiles val openFiles = FileEditorManager.getInstance(project).allEditors.mapNotNull { it.file }
val openedScripts = openFiles.filter { filter(it) } val openedScripts = openFiles.filter { filter(it) }
if (openedScripts.isEmpty()) return if (openedScripts.isEmpty()) return
@@ -243,7 +245,12 @@ class ScriptClassRootsUpdater(
openedScripts.forEach { openedScripts.forEach {
PsiManager.getInstance(project).findFile(it)?.let { psiFile -> PsiManager.getInstance(project).findFile(it)?.let { psiFile ->
DaemonCodeAnalyzer.getInstance(project).restart(psiFile) if (psiFile is KtFile) {
// start loading for files that previously was cached by custom scripting support
ScriptConfigurationManager.getInstance(project).getConfiguration(psiFile)
DaemonCodeAnalyzer.getInstance(project).restart(psiFile)
}
} }
} }
} }
@@ -39,7 +39,7 @@ class MissingGradleScriptConfigurationNotificationProvider(private val project:
wasNotImportedAfterCreation -> EditorNotificationPanel().apply { wasNotImportedAfterCreation -> EditorNotificationPanel().apply {
text(KotlinIdeaGradleBundle.message("notification.wasNotImportedAfterCreation.text")) text(KotlinIdeaGradleBundle.message("notification.wasNotImportedAfterCreation.text"))
createActionLabel(getMissingConfigurationActionText()) { createActionLabel(getMissingConfigurationActionText()) {
linkProject(project) runPartialGradleImport(project)
} }
} }
notEvaluatedInLastImport -> EditorNotificationPanel().apply { notEvaluatedInLastImport -> EditorNotificationPanel().apply {
@@ -19,6 +19,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport
import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport
import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport.Companion.EPN import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport.Companion.EPN
import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder
@@ -315,7 +316,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(),
if (old is Imported && newRoot !is Imported) { if (old is Imported && newRoot !is Imported) {
removeData(old.pathPrefix) removeData(old.pathPrefix)
} }
if (old is Imported || newRoot is Imported) { if (old !is Legacy || newRoot !is Legacy) {
updater.invalidateAndCommit() updater.invalidateAndCommit()
} }
@@ -366,6 +367,10 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(),
if (project.isDisposed) return@launch if (project.isDisposed) return@launch
openedScripts.forEach { openedScripts.forEach {
if (isApplicable(it)) {
DefaultScriptingSupport.getInstance(project).ensureNotificationsRemoved(it)
}
if (restartAnalyzer) { if (restartAnalyzer) {
// this required only for "pause" state // this required only for "pause" state
val ktFile = PsiManager.getInstance(project).findFile(it) val ktFile = PsiManager.getInstance(project).findFile(it)