From c3a85da24597c08f5db8093bc257563db135d57c Mon Sep 17 00:00:00 2001 From: Sergei Vorobyov Date: Wed, 10 Jun 2020 13:00:42 +0300 Subject: [PATCH] IDEA-238567 added auto-reload settings option added default auto-reload option GitOrigin-RevId: 625f1e3b715f45381746547396f7a54da760b352 --- .../messages/ExternalSystemBundle.properties | 9 +++ .../META-INF/ExternalSystemExtensions.xml | 12 +++- .../AutoImportProjectTrackerSettings.kt | 19 ++++-- .../ExternalSystemGroupConfigurable.kt | 67 +++++++++++++++++++ .../autoimport/AutoImportTestCase.kt | 4 +- .../messages/OptionsBundle.properties | 3 - .../src/META-INF/PlatformExtensions.xml | 3 - .../ConfigurableExtensionPointUtilTest.java | 5 -- 8 files changed, 102 insertions(+), 20 deletions(-) create mode 100644 platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/ExternalSystemGroupConfigurable.kt 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",