gradle.kts standalone scripts: load configuration after switching without prompt

This commit is contained in:
Sergey Rostov
2020-06-15 14:29:19 +03:00
parent 07654b4c0e
commit ace7ae19b4
2 changed files with 13 additions and 9 deletions
@@ -158,7 +158,8 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
file: KtFile, file: KtFile,
isFirstLoad: Boolean, isFirstLoad: Boolean,
forceSync: Boolean, forceSync: Boolean,
fromCacheOnly: Boolean fromCacheOnly: Boolean,
skipNotification: Boolean
): Boolean { ): Boolean {
val virtualFile = file.originalFile.virtualFile ?: return false val virtualFile = file.originalFile.virtualFile ?: return false
@@ -174,8 +175,8 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
loaders.firstOrNull { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) } loaders.firstOrNull { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) }
} else { } else {
val autoReloadEnabled = KotlinScriptingSettings.getInstance(project).autoReloadConfigurations(scriptDefinition) val autoReloadEnabled = KotlinScriptingSettings.getInstance(project).autoReloadConfigurations(scriptDefinition)
val postponeLoading = !autoReloadEnabled && async.any { it.isPostponedLoad(virtualFile) } val postponeLoading = !skipNotification && !autoReloadEnabled && async.any { it.isPostponedLoad(virtualFile) }
val forceSkipNotification = autoReloadEnabled || postponeLoading val forceSkipNotification = skipNotification || autoReloadEnabled || postponeLoading
if (postponeLoading) { if (postponeLoading) {
LoadScriptConfigurationNotificationFactory.showNotification(virtualFile, project) { LoadScriptConfigurationNotificationFactory.showNotification(virtualFile, project) {
@@ -384,7 +385,8 @@ abstract class DefaultScriptingSupportBase(val manager: CompositeScriptConfigura
file: KtFile, file: KtFile,
isFirstLoad: Boolean = getAppliedConfiguration(file.originalFile.virtualFile) == null, isFirstLoad: Boolean = getAppliedConfiguration(file.originalFile.virtualFile) == null,
forceSync: Boolean = false, forceSync: Boolean = false,
fromCacheOnly: Boolean = false fromCacheOnly: Boolean = false,
skipNotification: Boolean = false
): Boolean ): Boolean
fun getCachedConfigurationState(file: VirtualFile?): ScriptConfigurationState? { fun getCachedConfigurationState(file: VirtualFile?): ScriptConfigurationState? {
@@ -420,11 +422,11 @@ abstract class DefaultScriptingSupportBase(val manager: CompositeScriptConfigura
/** /**
* Load new configuration and suggest to apply it (only if it is changed) * Load new configuration and suggest to apply it (only if it is changed)
*/ */
fun ensureUpToDatedConfigurationSuggested(file: KtFile) { fun ensureUpToDatedConfigurationSuggested(file: KtFile, skipNotification: Boolean = false) {
reloadIfOutOfDate(file) reloadIfOutOfDate(file, skipNotification)
} }
private fun reloadIfOutOfDate(file: KtFile, isPostponedLoad: Boolean = false) { private fun reloadIfOutOfDate(file: KtFile, skipNotification: Boolean = false) {
if (!ScriptDefinitionsManager.getInstance(project).isReady()) return if (!ScriptDefinitionsManager.getInstance(project).isReady()) return
manager.updater.update { manager.updater.update {
@@ -434,7 +436,8 @@ abstract class DefaultScriptingSupportBase(val manager: CompositeScriptConfigura
if (state == null || !state.isUpToDate(project, virtualFile, file)) { if (state == null || !state.isUpToDate(project, virtualFile, file)) {
reloadOutOfDateConfiguration( reloadOutOfDateConfiguration(
file, file,
isFirstLoad = state == null isFirstLoad = state == null,
skipNotification = skipNotification
) )
} }
} }
@@ -397,7 +397,8 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(),
if (virtualFile != null) { if (virtualFile != null) {
val ktFile = PsiManager.getInstance(project).findFile(virtualFile) as? KtFile val ktFile = PsiManager.getInstance(project).findFile(virtualFile) as? KtFile
if (ktFile != null) { if (ktFile != null) {
ScriptConfigurationManager.getInstance(project).getConfiguration(ktFile) DefaultScriptingSupport.getInstance(project)
.ensureUpToDatedConfigurationSuggested(ktFile, skipNotification = true)
} }
} }
} }