From 748e2135989eea5c1b48a3cc643b82f343eb2206 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 24 Apr 2018 16:39:31 +0300 Subject: [PATCH] Move Kotlin update channel setting to settings dialog (KT-23980) #KT-23980 Fixed --- idea/src/META-INF/plugin.xml | 3 + idea/src/META-INF/plugin.xml.172 | 3 + idea/src/META-INF/plugin.xml.181 | 3 + idea/src/META-INF/plugin.xml.182 | 3 + idea/src/META-INF/plugin.xml.as31 | 3 + idea/src/META-INF/plugin.xml.as32 | 3 + .../actions/ConfigurePluginUpdatesAction.kt | 110 +----------------- .../actions/ConfigurePluginUpdatesForm.java | 34 ------ .../KotlinLanguageConfiguration.kt | 109 +++++++++++++++++ .../ui}/ConfigurePluginUpdatesForm.form | 2 +- .../ui/ConfigurePluginUpdatesForm.java | 28 +++++ 11 files changed, 161 insertions(+), 140 deletions(-) delete mode 100644 idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.java create mode 100644 idea/src/org/jetbrains/kotlin/idea/configuration/KotlinLanguageConfiguration.kt rename idea/src/org/jetbrains/kotlin/idea/{actions => configuration/ui}/ConfigurePluginUpdatesForm.form (97%) create mode 100644 idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 72fca631b56..615d649fee4 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -447,6 +447,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/META-INF/plugin.xml.172 b/idea/src/META-INF/plugin.xml.172 index 723e8e3deac..52de155e6e3 100644 --- a/idea/src/META-INF/plugin.xml.172 +++ b/idea/src/META-INF/plugin.xml.172 @@ -447,6 +447,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/META-INF/plugin.xml.181 b/idea/src/META-INF/plugin.xml.181 index 7fb872bc835..b76c7b42b65 100644 --- a/idea/src/META-INF/plugin.xml.181 +++ b/idea/src/META-INF/plugin.xml.181 @@ -447,6 +447,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/META-INF/plugin.xml.182 b/idea/src/META-INF/plugin.xml.182 index ddad10d2f2e..2f4b30d5e1e 100644 --- a/idea/src/META-INF/plugin.xml.182 +++ b/idea/src/META-INF/plugin.xml.182 @@ -448,6 +448,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/META-INF/plugin.xml.as31 b/idea/src/META-INF/plugin.xml.as31 index f1240d2baea..ca1958bec0c 100644 --- a/idea/src/META-INF/plugin.xml.as31 +++ b/idea/src/META-INF/plugin.xml.as31 @@ -447,6 +447,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/META-INF/plugin.xml.as32 b/idea/src/META-INF/plugin.xml.as32 index acf73307133..3c7332c2128 100644 --- a/idea/src/META-INF/plugin.xml.as32 +++ b/idea/src/META-INF/plugin.xml.as32 @@ -447,6 +447,9 @@ displayName="Kotlin Compiler" parentId="project.propCompiler"/> + + diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt index 01f1169ef76..201497dea95 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt @@ -16,115 +16,15 @@ package org.jetbrains.kotlin.idea.actions +import com.intellij.ide.actions.ShowSettingsUtilImpl import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.project.DumbAwareAction -import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.DialogWrapper -import com.intellij.openapi.updateSettings.impl.UpdateSettings -import org.jetbrains.kotlin.idea.KotlinPluginUpdater -import org.jetbrains.kotlin.idea.KotlinPluginUtil -import org.jetbrains.kotlin.idea.PluginUpdateStatus -import org.jetbrains.kotlin.idea.actions.ConfigurePluginUpdatesDialog.EAPChannels.EAP_1_2 -import org.jetbrains.kotlin.idea.actions.ConfigurePluginUpdatesDialog.EAPChannels.EAP_1_3 -import javax.swing.JComponent +import org.jetbrains.kotlin.idea.configuration.KotlinUpdatesSettingsConfigurable class ConfigurePluginUpdatesAction : DumbAwareAction() { override fun actionPerformed(e: AnActionEvent) { - ConfigurePluginUpdatesDialog(e.project).show() - } -} - -class ConfigurePluginUpdatesDialog(project: Project?) : DialogWrapper(project, false) { - private val form = ConfigurePluginUpdatesForm() - private val initialSelectedChannel: Int - private var update: PluginUpdateStatus.Update? = null - - init { - title = "Configure Kotlin Plugin Updates" - form.updateCheckProgressIcon.suspend() - form.updateCheckProgressIcon.setPaintPassiveIcon(false) - - form.checkForUpdatesNowButton.addActionListener { - saveSettings() - form.updateCheckProgressIcon.resume() - resetUpdateStatus() - KotlinPluginUpdater.getInstance().runUpdateCheck{ pluginUpdateStatus -> - form.updateCheckProgressIcon.suspend() - when (pluginUpdateStatus) { - PluginUpdateStatus.LatestVersionInstalled -> - form.updateStatusLabel.text = "You have the latest version of the plugin (${KotlinPluginUtil.getPluginVersion()}) installed." - - is PluginUpdateStatus.Update -> { - update = pluginUpdateStatus - form.installButton.isVisible = true - form.updateStatusLabel.text = "A new version ${pluginUpdateStatus.pluginDescriptor.version} is available" - } - - is PluginUpdateStatus.CheckFailed -> - form.updateStatusLabel.text = "Update check failed: ${pluginUpdateStatus.message}" - } - - false // do not auto-retry update check - } - } - - form.installButton.isVisible = false - form.installButton.addActionListener { - update?.let { - close(OK_EXIT_CODE) - KotlinPluginUpdater.getInstance().installPluginUpdate(it) - } - } - - form.channelCombo.addActionListener { - resetUpdateStatus() - } - - fun EAPChannels.indexIfAvailable() = if (hasChannel) uiIndex else null - initialSelectedChannel = EAP_1_3.indexIfAvailable() ?: - EAP_1_2.indexIfAvailable() ?: 0 - - form.channelCombo.selectedIndex = initialSelectedChannel - init() - } - - private fun resetUpdateStatus() { - form.updateStatusLabel.text = " " - form.installButton.isVisible = false - } - - override fun createCenterPanel(): JComponent = form.mainPanel - - private fun saveSettings() { - saveSelectedChannel(form.channelCombo.selectedIndex) - } - - private fun saveSelectedChannel(channel: Int) { - val hosts = UpdateSettings.getInstance().storedPluginHosts - hosts.removeIf { - it.startsWith("https://plugins.jetbrains.com/plugins/") && - (it.endsWith("/6954") || it.endsWith(KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString)) - } - when (channel) { - EAP_1_3.uiIndex -> hosts.add(EAP_1_3.url) - EAP_1_2.uiIndex -> hosts.add(EAP_1_2.url) - } - } - - override fun doOKAction() { - saveSettings() - super.doOKAction() - } - - override fun doCancelAction() { - saveSelectedChannel(initialSelectedChannel) - super.doCancelAction() - } - - enum class EAPChannels(val url: String, val uiIndex: Int) { - EAP_1_2("https://plugins.jetbrains.com/plugins/eap-1.2/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 1), - EAP_1_3("https://plugins.jetbrains.com/plugins/eap-next/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 2); - - val hasChannel: Boolean get() = url in UpdateSettings.getInstance().pluginHosts + val project = e.getData(CommonDataKeys.PROJECT) + ShowSettingsUtilImpl.showSettingsDialog(project, KotlinUpdatesSettingsConfigurable.ID, "") } } diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.java b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.java deleted file mode 100644 index 6c72a2143ac..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.idea.actions; - -import com.intellij.util.ui.AsyncProcessIcon; - -import javax.swing.*; - -public class ConfigurePluginUpdatesForm { - public JComboBox channelCombo; - public JButton checkForUpdatesNowButton; - public JPanel mainPanel; - public AsyncProcessIcon updateCheckProgressIcon; - public JLabel updateStatusLabel; - public JButton installButton; - - private void createUIComponents() { - updateCheckProgressIcon = new AsyncProcessIcon("Plugin update check progress"); - } -} diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinLanguageConfiguration.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinLanguageConfiguration.kt new file mode 100644 index 00000000000..810c0302537 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinLanguageConfiguration.kt @@ -0,0 +1,109 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration + +import com.intellij.openapi.options.Configurable +import com.intellij.openapi.options.SearchableConfigurable +import com.intellij.openapi.updateSettings.impl.UpdateSettings +import org.jetbrains.kotlin.idea.KotlinPluginUpdater +import org.jetbrains.kotlin.idea.KotlinPluginUtil +import org.jetbrains.kotlin.idea.PluginUpdateStatus +import org.jetbrains.kotlin.idea.configuration.ui.ConfigurePluginUpdatesForm +import javax.swing.JComponent + +class KotlinUpdatesSettingsConfigurable() : SearchableConfigurable, Configurable.NoScroll { + companion object { + const val ID = "preferences.language.Kotlin" + + private fun saveSelectedChannel(channel: Int) { + val hosts = UpdateSettings.getInstance().storedPluginHosts + hosts.removeIf { + it.startsWith("https://plugins.jetbrains.com/plugins/") && + (it.endsWith("/6954") || it.endsWith(KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString)) + } + when (channel) { + EAPChannels.EAP_1_3.uiIndex -> hosts.add(EAPChannels.EAP_1_3.url) + EAPChannels.EAP_1_2.uiIndex -> hosts.add(EAPChannels.EAP_1_2.url) + } + } + + enum class EAPChannels(val url: String, val uiIndex: Int) { + EAP_1_2("https://plugins.jetbrains.com/plugins/eap-1.2/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 1), + EAP_1_3("https://plugins.jetbrains.com/plugins/eap-next/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 2); + + private val hasChannel: Boolean get() = url in UpdateSettings.getInstance().pluginHosts + + fun indexIfAvailable() = if (hasChannel) uiIndex else null + } + } + + private val form = ConfigurePluginUpdatesForm() + private var update: PluginUpdateStatus.Update? = null + + private var savedChannel: Int = EAPChannels.EAP_1_3.indexIfAvailable() ?: EAPChannels.EAP_1_2.indexIfAvailable() ?: 0 + + override fun getId(): String = ID + + override fun getDisplayName(): String = "Kotlin Updates" + + override fun isModified(): Boolean { + return savedChannel != form.channelCombo.selectedIndex + } + + override fun apply() { + saveSettings() + } + + override fun createComponent(): JComponent? { + form.updateCheckProgressIcon.suspend() + form.updateCheckProgressIcon.setPaintPassiveIcon(false) + + form.checkForUpdatesNowButton.addActionListener { + saveSettings() + form.updateCheckProgressIcon.resume() + form.resetUpdateStatus() + KotlinPluginUpdater.getInstance().runUpdateCheck{ pluginUpdateStatus -> + form.updateCheckProgressIcon.suspend() + when (pluginUpdateStatus) { + PluginUpdateStatus.LatestVersionInstalled -> + form.updateStatusLabel.text = "You have the latest version of the plugin (${KotlinPluginUtil.getPluginVersion()}) installed." + + is PluginUpdateStatus.Update -> { + update = pluginUpdateStatus + form.installButton.isVisible = true + form.updateStatusLabel.text = "A new version ${pluginUpdateStatus.pluginDescriptor.version} is available" + } + + is PluginUpdateStatus.CheckFailed -> + form.updateStatusLabel.text = "Update check failed: ${pluginUpdateStatus.message}" + } + + false // do not auto-retry update check + } + } + + form.installButton.isVisible = false + form.installButton.addActionListener { + update?.let { + KotlinPluginUpdater.getInstance().installPluginUpdate(it) + } + } + + form.channelCombo.addActionListener { + form.resetUpdateStatus() + } + + form.channelCombo.selectedIndex = savedChannel + + return form.mainPanel + } + + private fun saveSettings() { + savedChannel = form.channelCombo.selectedIndex + saveSelectedChannel(savedChannel) + } +} + diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.form b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.form similarity index 97% rename from idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.form rename to idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.form index d0316e0783e..6b1a891c511 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesForm.form +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.form @@ -1,5 +1,5 @@ -
+ diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java new file mode 100644 index 00000000000..3f27fb557cd --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration.ui; + +import com.intellij.util.ui.AsyncProcessIcon; + +import javax.swing.*; + +public class ConfigurePluginUpdatesForm { + public JComboBox channelCombo; + public JButton checkForUpdatesNowButton; + public JPanel mainPanel; + public AsyncProcessIcon updateCheckProgressIcon; + public JLabel updateStatusLabel; + public JButton installButton; + + private void createUIComponents() { + updateCheckProgressIcon = new AsyncProcessIcon("Plugin update check progress"); + } + + public void resetUpdateStatus() { + updateStatusLabel.setText(" "); + installButton.setVisible(false); + } +}