diff --git a/platform/external-system-api/resources/messages/ExternalSystemBundle.properties b/platform/external-system-api/resources/messages/ExternalSystemBundle.properties
index b847d218018d..f2fd6847b45e 100644
--- a/platform/external-system-api/resources/messages/ExternalSystemBundle.properties
+++ b/platform/external-system-api/resources/messages/ExternalSystemBundle.properties
@@ -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
diff --git a/platform/external-system-impl/resources/META-INF/ExternalSystemExtensions.xml b/platform/external-system-impl/resources/META-INF/ExternalSystemExtensions.xml
index ae4c86e1b5c6..3e78a679aad7 100644
--- a/platform/external-system-impl/resources/META-INF/ExternalSystemExtensions.xml
+++ b/platform/external-system-impl/resources/META-INF/ExternalSystemExtensions.xml
@@ -22,15 +22,21 @@
implementation="com.intellij.openapi.externalSystem.service.project.ExternalSystemWorkingDirectoryProvider"/>
-
-
+
+
+
+
+
+
+
diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTrackerSettings.kt b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTrackerSettings.kt
index 224bce7b2093..a62236d1bd6e 100644
--- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTrackerSettings.kt
+++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/autoimport/AutoImportProjectTrackerSettings.kt
@@ -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 {
+class AutoImportProjectTrackerSettings(
+ private val project: Project
+) : ExternalSystemProjectTrackerSettings, PersistentStateComponent {
- 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
+ }
}
}
\ No newline at end of file
diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/ExternalSystemGroupConfigurable.kt b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/ExternalSystemGroupConfigurable.kt
new file mode 100644
index 000000000000..c2088d591cc5
--- /dev/null
+++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/ExternalSystemGroupConfigurable.kt
@@ -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 BaseBuilder.radioButtonGroup(
+ property: KMutableProperty0,
+ title: String? = null,
+ init: RadioButtonGroupBuilder.() -> Unit
+ ) {
+ buttonGroup(title) {
+ RadioButtonGroupBuilder(
+ property).init()
+ }
+ }
+
+ class RadioButtonGroupBuilder(private val property: KMutableProperty0) {
+ fun Cell.radioButton(value: T, @Nls text: String, @Nls comment: String? = null) {
+ radioButton(text, { property.get() == value }, { if (it) property.set(value) }, comment)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/autoimport/AutoImportTestCase.kt b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/autoimport/AutoImportTestCase.kt
index 79c59373bf6b..71569d133681 100644
--- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/autoimport/AutoImportTestCase.kt
+++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/autoimport/AutoImportTestCase.kt
@@ -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 {
- 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)
diff --git a/platform/platform-api/resources/messages/OptionsBundle.properties b/platform/platform-api/resources/messages/OptionsBundle.properties
index 293b6088e6f8..5be51fec0418 100644
--- a/platform/platform-api/resources/messages/OptionsBundle.properties
+++ b/platform/platform-api/resources/messages/OptionsBundle.properties
@@ -217,9 +217,6 @@ configurable.group.project.settings.description=\
configurable.group.build.settings.display.name=Build, Execution, Deployment
configurable.group.build.settings.description=\
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=\
- Configure your project integration with different build tools.
configurable.group.language.settings.display.name=Languages \\& Frameworks
configurable.group.language.settings.description=\
Configure the settings related to specific frameworks and technologies used in your project.
diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml
index 18279718c4eb..487ee0af442f 100644
--- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml
+++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml
@@ -35,9 +35,6 @@
helpTopic="configurable.group.build.help.topic"
displayNameKey="configurable.group.build.settings.display.name"
descriptionKey="configurable.group.build.settings.description"/>
-
diff --git a/platform/platform-tests/testSrc/com/intellij/ide/settings/ConfigurableExtensionPointUtilTest.java b/platform/platform-tests/testSrc/com/intellij/ide/settings/ConfigurableExtensionPointUtilTest.java
index bc38a3422492..83812b33ee21 100644
--- a/platform/platform-tests/testSrc/com/intellij/ide/settings/ConfigurableExtensionPointUtilTest.java
+++ b/platform/platform-tests/testSrc/com/intellij/ide/settings/ConfigurableExtensionPointUtilTest.java
@@ -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",