IDEA-238567 added auto-reload settings option

added default auto-reload option

GitOrigin-RevId: 625f1e3b715f45381746547396f7a54da760b352
This commit is contained in:
Sergei Vorobyov
2020-06-10 22:14:25 +03:00
committed by intellij-monorepo-bot
parent 468f93071b
commit c3a85da245
8 changed files with 102 additions and 20 deletions
@@ -11,6 +11,15 @@ orphan.modules.text=The IDE modules below were removed by the {0} project reload
local.history.remove.orphan.modules=Remove orphan modules after project reload
# Settings.
settings.build.tools.display.name=Build Tools
settings.build.tools.auto.reload.radio.button.group.title=Auto-reload project after:
settings.build.tools.auto.reload.radio.button.all.label=Any changes
settings.build.tools.auto.reload.radio.button.all.comment=Reloads a project after any changes made to build script files.
settings.build.tools.auto.reload.radio.button.selective.label=External changes
settings.build.tools.auto.reload.radio.button.selective.comment=Reloads a project after VCS updates and changes made to build script files outside the IDE.
settings.build.tools.auto.reload.radio.button.none.label=Internal events
settings.build.tools.auto.reload.radio.button.none.comment=Reloads a project only if caches in a project are corrupted, invalidated, or don\u2019t exist.
setting.type.location.deduced={0} location is deduced
setting.type.location.unknown={0} location is unknown
setting.type.location.explicit.correct={0} location is defined
@@ -22,15 +22,21 @@
implementation="com.intellij.openapi.externalSystem.service.project.ExternalSystemWorkingDirectoryProvider"/>
<applicationService serviceInterface="com.intellij.openapi.externalSystem.util.environment.Environment"
serviceImplementation="com.intellij.openapi.externalSystem.util.environment.SystemEnvironment"/>
<!--Project structure management services-->
<applicationService serviceInterface="com.intellij.openapi.externalSystem.service.project.ProjectDataManager"
serviceImplementation="com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl"/>
<!--Auto-reload-->
<projectService serviceInterface="com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTracker"
serviceImplementation="com.intellij.openapi.externalSystem.autoimport.AutoImportProjectTracker"/>
<projectService serviceInterface="com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTrackerSettings"
serviceImplementation="com.intellij.openapi.externalSystem.autoimport.AutoImportProjectTrackerSettings"/>
<projectService serviceImplementation="com.intellij.openapi.externalSystem.autoimport.ProjectNotificationAware"/>
<editorFloatingToolbarProvider implementation="com.intellij.openapi.externalSystem.autoimport.ProjectRefreshFloatingProvider"/>
<projectConfigurable groupId="build" id="build.tools" groupWeight="1000"
instance="com.intellij.openapi.externalSystem.service.settings.ExternalSystemGroupConfigurable"/>
<!--Project structure management services-->
<applicationService serviceInterface="com.intellij.openapi.externalSystem.service.project.ProjectDataManager"
serviceImplementation="com.intellij.openapi.externalSystem.service.project.manage.ProjectDataManagerImpl"/>
<projectService serviceInterface="com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManager"
serviceImplementation="com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl"/>
<externalSystemSettingsListener implementation="com.intellij.openapi.externalSystem.service.project.autoimport.ExternalProjectsSettingsWatcher"/>
@@ -8,22 +8,25 @@ import com.intellij.openapi.components.StoragePathMacros.WORKSPACE_FILE
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTrackerSettings.AutoReloadType
import com.intellij.openapi.observable.properties.AtomicLazyProperty
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManager
import org.jetbrains.annotations.ApiStatus
@State(name = "AutoImportSettings", storages = [Storage(WORKSPACE_FILE)])
class AutoImportProjectTrackerSettings : ExternalSystemProjectTrackerSettings, PersistentStateComponent<AutoImportProjectTrackerSettings.State> {
class AutoImportProjectTrackerSettings(
private val project: Project
) : ExternalSystemProjectTrackerSettings, PersistentStateComponent<AutoImportProjectTrackerSettings.State> {
internal val autoReloadTypeProperty = AtomicLazyProperty { AutoReloadType.SELECTIVE }
internal val autoReloadTypeProperty = AtomicLazyProperty { getDefaultAutoReloadType(project) }
override var autoReloadType by autoReloadTypeProperty
override fun getState() = State(autoReloadType)
override fun loadState(state: State) {
autoReloadType = state.autoReloadType
autoReloadType = state.autoReloadType ?: getDefaultAutoReloadType(project)
}
data class State(var autoReloadType: AutoReloadType = AutoReloadType.SELECTIVE)
data class State(var autoReloadType: AutoReloadType? = null)
companion object {
@JvmStatic
@@ -31,5 +34,13 @@ class AutoImportProjectTrackerSettings : ExternalSystemProjectTrackerSettings, P
fun getInstance(project: Project): AutoImportProjectTrackerSettings {
return ExternalSystemProjectTrackerSettings.getInstance(project) as AutoImportProjectTrackerSettings
}
private fun getDefaultAutoReloadType(project: Project): AutoReloadType {
if (project.isDefault) return AutoReloadType.SELECTIVE
val projectManager = ProjectManager.getInstance()
val defaultProject = projectManager.defaultProject
val settings = ExternalSystemProjectTrackerSettings.getInstance(defaultProject)
return settings.autoReloadType
}
}
}
@@ -0,0 +1,67 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.externalSystem.service.settings
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTrackerSettings
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTrackerSettings.AutoReloadType.*
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle.message
import com.intellij.openapi.options.BoundConfigurable
import com.intellij.openapi.project.Project
import com.intellij.ui.layout.*
import org.jetbrains.annotations.Nls
import kotlin.reflect.KMutableProperty0
class ExternalSystemGroupConfigurable(project: Project) : BoundConfigurable(message("settings.build.tools.display.name")) {
private val settings = ExternalSystemProjectTrackerSettings.getInstance(
project)
override fun createPanel() = panel {
row {
radioButtonGroup(
property = settings::autoReloadType,
title = message("settings.build.tools.auto.reload.radio.button.group.title")
) {
row {
radioButton(
value = ALL,
text = message("settings.build.tools.auto.reload.radio.button.all.label"),
comment = message("settings.build.tools.auto.reload.radio.button.all.comment")
)
}
row {
radioButton(
value = SELECTIVE,
text = message("settings.build.tools.auto.reload.radio.button.selective.label"),
comment = message("settings.build.tools.auto.reload.radio.button.selective.comment")
)
}
row {
radioButton(
value = NONE,
text = message("settings.build.tools.auto.reload.radio.button.none.label"),
comment = message("settings.build.tools.auto.reload.radio.button.none.comment")
)
}
}
}
}
companion object {
fun <T> BaseBuilder.radioButtonGroup(
property: KMutableProperty0<T>,
title: String? = null,
init: RadioButtonGroupBuilder<T>.() -> Unit
) {
buttonGroup(title) {
RadioButtonGroupBuilder(
property).init()
}
}
class RadioButtonGroupBuilder<T>(private val property: KMutableProperty0<T>) {
fun Cell.radioButton(value: T, @Nls text: String, @Nls comment: String? = null) {
radioButton(text, { property.get() == value }, { if (it) property.set(value) }, comment)
}
}
}
}
@@ -278,7 +278,7 @@ abstract class AutoImportTestCase : ExternalSystemTestCase() {
override fun setUp() {
super.setUp()
testDisposable = Disposer.newDisposable()
myProject.replaceService(ExternalSystemProjectTrackerSettings::class.java, AutoImportProjectTrackerSettings(), testDisposable)
myProject.replaceService(ExternalSystemProjectTrackerSettings::class.java, AutoImportProjectTrackerSettings(myProject), testDisposable)
myProject.replaceService(ExternalSystemProjectTracker::class.java, AutoImportProjectTracker(myProject), testDisposable)
}
@@ -309,7 +309,7 @@ abstract class AutoImportTestCase : ExternalSystemTestCase() {
AutoImportProjectTracker.State() to AutoImportProjectTrackerSettings.State(),
test: SimpleTestBench.(VirtualFile) -> Unit
): Pair<AutoImportProjectTracker.State, AutoImportProjectTrackerSettings.State> {
return myProject.replaceService(ExternalSystemProjectTrackerSettings::class.java, AutoImportProjectTrackerSettings()) {
return myProject.replaceService(ExternalSystemProjectTrackerSettings::class.java, AutoImportProjectTrackerSettings(myProject)) {
myProject.replaceService(ExternalSystemProjectTracker::class.java, AutoImportProjectTracker(myProject)) {
val systemId = ProjectSystemId("External System")
val projectId = ExternalSystemProjectId(systemId, projectPath)
@@ -217,9 +217,6 @@ configurable.group.project.settings.description=<html><body>\
configurable.group.build.settings.display.name=Build, Execution, Deployment
configurable.group.build.settings.description=<html><body>\
Configure the project Execution settings, set up Deployment options and customize the Debugger behavior.
configurable.group.build.tools.settings.display.name=Build Tools
configurable.group.build.tools.settings.description=<html><body>\
Configure your project integration with different build tools.
configurable.group.language.settings.display.name=Languages \\& Frameworks
configurable.group.language.settings.description=<html><body>\
Configure the settings related to specific frameworks and technologies used in your project.
@@ -35,9 +35,6 @@
helpTopic="configurable.group.build.help.topic"
displayNameKey="configurable.group.build.settings.display.name"
descriptionKey="configurable.group.build.settings.description"/>
<groupConfigurable id="build.tools" parentId="build" weight="1000"
displayNameKey="configurable.group.build.tools.settings.display.name"
descriptionKey="configurable.group.build.tools.settings.description"/>
<groupConfigurable id="profiler" parentId="build"
displayNameKey="configurable.group.profiler.settings.display.name"
descriptionKey="configurable.group.profiler.settings.description"/>
@@ -367,8 +367,6 @@ public class ConfigurableExtensionPointUtilTest extends LightPlatformTestCase {
wrapConfigurable("editor.3", "parentId:editor", "groupWeight:-1"),
wrapConfigurable("editor.2", "parentId:editor"),
wrapConfigurable("editor.1", "parentId:editor"),
wrapConfigurable("build.tools.raven", "parentId:build.tools"),
wrapConfigurable("build.tools.maven", "parentId:build.tools"),
wrapConfigurable("build.center", "parentId:build"),
wrapConfigurable("build.upper", "parentId:build", "groupWeight:1000000"),
wrapConfigurable("build.lower", "parentId:build", "groupWeight:-1000000"),
@@ -395,9 +393,6 @@ public class ConfigurableExtensionPointUtilTest extends LightPlatformTestCase {
node("editor.4")),
node("configurable.group.build",
node("build.upper"),
node("configurable.group.build.tools",
node("build.tools.maven"),
node("build.tools.raven")),
node("build.center"),
node("build.lower")),
node("configurable.group.tools",