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
val fileEditorManager = FileEditorManager.getInstance(project)
(fileEditorManager.getSelectedEditor(this))?.let {
fileEditorManager.getAllEditors(this).forEach {
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 {
fun getInstance(project: Project) =
(ScriptConfigurationManager.getInstance(project) as CompositeScriptConfigurationManager).default
@@ -30,6 +30,7 @@ interface ScriptConfigurationCache {
fun setApplied(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot)
fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot)
fun remove(file: VirtualFile): Boolean
fun allApplied(): List<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
fun clear()
@@ -33,6 +33,9 @@ open class ScriptConfigurationMemoryCache(
memoryCache.put(file, old.copy(applied = configurationSnapshot))
}
override fun remove(file: VirtualFile) =
memoryCache.remove(file)
@Synchronized
override fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) {
val old = memoryCache[file] ?: ScriptConfigurationState()
@@ -23,12 +23,14 @@ import com.intellij.psi.PsiManager
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
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.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.idea.util.application.runReadAction
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.AtomicReference
@@ -233,7 +235,7 @@ class ScriptClassRootsUpdater(
private fun updateHighlighting(project: Project, filter: (VirtualFile) -> Boolean) {
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) }
if (openedScripts.isEmpty()) return
@@ -243,7 +245,12 @@ class ScriptClassRootsUpdater(
openedScripts.forEach {
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 {
text(KotlinIdeaGradleBundle.message("notification.wasNotImportedAfterCreation.text"))
createActionLabel(getMissingConfigurationActionText()) {
linkProject(project)
runPartialGradleImport(project)
}
}
notEvaluatedInLastImport -> EditorNotificationPanel().apply {
@@ -19,6 +19,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
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.DefaultScriptingSupport
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.ucache.ScriptClassRootsBuilder
@@ -315,7 +316,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(),
if (old is Imported && newRoot !is Imported) {
removeData(old.pathPrefix)
}
if (old is Imported || newRoot is Imported) {
if (old !is Legacy || newRoot !is Legacy) {
updater.invalidateAndCommit()
}
@@ -366,6 +367,10 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(),
if (project.isDisposed) return@launch
openedScripts.forEach {
if (isApplicable(it)) {
DefaultScriptingSupport.getInstance(project).ensureNotificationsRemoved(it)
}
if (restartAnalyzer) {
// this required only for "pause" state
val ktFile = PsiManager.getInstance(project).findFile(it)