From f0794dbc0a0d2cb60d203005321b6ec6c85d697a Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 24 Jul 2018 17:00:00 +0300 Subject: [PATCH] Ability to disable migration detection (KT-23401) -- to disable --- idea/src/META-INF/plugin.xml | 5 +++ idea/src/META-INF/plugin.xml.172 | 5 +++ idea/src/META-INF/plugin.xml.173 | 5 +++ idea/src/META-INF/plugin.xml.182 | 5 +++ idea/src/META-INF/plugin.xml.as31 | 5 +++ idea/src/META-INF/plugin.xml.as32 | 5 +++ idea/src/META-INF/plugin.xml.as33 | 5 +++ .../KotlinMigrationProjectComponent.kt | 9 +++++ .../ui/MigrationNotificationDialog.kt | 11 +++++- .../ui/MigrationNotificationForm.form | 2 +- .../idea/migration/CodeMigrationAction.kt | 11 ++++++ .../migration/CodeMigrationToggleAction.kt | 36 +++++++++++++++++++ 12 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationToggleAction.kt diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 438251e6ffd..c44273b2ddc 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -117,6 +117,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.172 b/idea/src/META-INF/plugin.xml.172 index 27cfa4cc048..76d29c25190 100644 --- a/idea/src/META-INF/plugin.xml.172 +++ b/idea/src/META-INF/plugin.xml.172 @@ -117,6 +117,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.173 b/idea/src/META-INF/plugin.xml.173 index 14fa467c112..694fcda736b 100644 --- a/idea/src/META-INF/plugin.xml.173 +++ b/idea/src/META-INF/plugin.xml.173 @@ -117,6 +117,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.182 b/idea/src/META-INF/plugin.xml.182 index 76a34ad2796..f7dceb6749f 100644 --- a/idea/src/META-INF/plugin.xml.182 +++ b/idea/src/META-INF/plugin.xml.182 @@ -118,6 +118,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.as31 b/idea/src/META-INF/plugin.xml.as31 index bd508749395..3f778c6c6f5 100644 --- a/idea/src/META-INF/plugin.xml.as31 +++ b/idea/src/META-INF/plugin.xml.as31 @@ -117,6 +117,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.as32 b/idea/src/META-INF/plugin.xml.as32 index fd0c1a1c30a..a0b9bce6133 100644 --- a/idea/src/META-INF/plugin.xml.as32 +++ b/idea/src/META-INF/plugin.xml.as32 @@ -117,6 +117,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/META-INF/plugin.xml.as33 b/idea/src/META-INF/plugin.xml.as33 index d9b3e13d5cb..4f112b3e082 100644 --- a/idea/src/META-INF/plugin.xml.as33 +++ b/idea/src/META-INF/plugin.xml.as33 @@ -116,6 +116,11 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt index bc5075f65ad..c421541ea33 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.configuration.ui.MigrationNotificationDialog import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID import org.jetbrains.kotlin.idea.framework.MAVEN_SYSTEM_ID import org.jetbrains.kotlin.idea.migration.CodeMigrationAction +import org.jetbrains.kotlin.idea.migration.CodeMigrationToggleAction import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.versions.LibInfo @@ -43,11 +44,19 @@ class KotlinMigrationProjectComponent(val project: Project) { @Synchronized fun onImportAboutToStart() { + if (!CodeMigrationToggleAction.isEnabled(project)) { + return + } + old = MigrationState.build(project) } @Synchronized fun onImportFinished() { + if (!CodeMigrationToggleAction.isEnabled(project)) { + return + } + new = MigrationState.build(project) val migrationInfo = prepareMigrationInfo(old, new) ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt index baa9e3bf3da..adf119b3102 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt @@ -3,9 +3,10 @@ package org.jetbrains.kotlin.idea.configuration.ui import com.intellij.openapi.project.Project import com.intellij.openapi.ui.DialogWrapper import org.jetbrains.kotlin.idea.configuration.MigrationInfo +import org.jetbrains.kotlin.idea.migration.CodeMigrationToggleAction import javax.swing.JComponent -internal class MigrationNotificationDialog(project: Project?, migrationInfo: MigrationInfo) : DialogWrapper(project, false) { +internal class MigrationNotificationDialog(val project: Project, migrationInfo: MigrationInfo) : DialogWrapper(project, false) { private val form = MigrationNotificationForm() init { @@ -21,12 +22,20 @@ internal class MigrationNotificationDialog(project: Project?, migrationInfo: Mig form.apiVersionInfo.isVisible = migrationInfo.oldApiVersion != migrationInfo.newApiVersion form.apiVersionInfo.text = "API version: ${migrationInfo.oldApiVersion} to ${migrationInfo.newApiVersion}" + form.disableMigrationDetectionCheckBox.isSelected = !CodeMigrationToggleAction.isEnabled(project) + init() } override fun createCenterPanel(): JComponent = form.mainPanel private fun saveSettings() { + CodeMigrationToggleAction.setEnabled(project, !form.disableMigrationDetectionCheckBox.isSelected) + } + + override fun doCancelAction() { + saveSettings() + super.doCancelAction() } override fun doOKAction() { diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form index 20b432c1673..41a24890e0a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form @@ -76,7 +76,7 @@ - + diff --git a/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationAction.kt b/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationAction.kt index ce86c102c0f..aedb5862b90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationAction.kt @@ -5,7 +5,18 @@ package org.jetbrains.kotlin.idea.migration +import com.intellij.openapi.actionSystem.AnActionEvent + class CodeMigrationAction : CodeInspectionAction("Code Migration", "Code migration") { + override fun update(e: AnActionEvent?) { + super.update(e) + + val project = e?.project + if (project != null) { + e.presentation.isEnabledAndVisible = CodeMigrationToggleAction.isEnabled(project) + } + } + override fun getHelpTopic(): String { return "reference.dialogs.cleanup.scope" } diff --git a/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationToggleAction.kt b/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationToggleAction.kt new file mode 100644 index 00000000000..d162da21e7a --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/migration/CodeMigrationToggleAction.kt @@ -0,0 +1,36 @@ +/* + * 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.migration + +import com.intellij.ide.util.PropertiesComponent +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.ToggleAction +import com.intellij.openapi.project.Project + +class CodeMigrationToggleAction : ToggleAction() { + override fun isSelected(e: AnActionEvent): Boolean { + val project = e.project ?: return false + return isEnabled(project) + } + + override fun setSelected(e: AnActionEvent, state: Boolean) { + val project = e.project ?: return + setEnabled(project, state) + } + + companion object { + private const val MIGRATION_OPTION = "kotlin.migration.detection.enabled" + + fun setEnabled(project: Project, state: Boolean) { + PropertiesComponent.getInstance(project).setValue(MIGRATION_OPTION, state, true) + } + + fun isEnabled(project: Project): Boolean { + return PropertiesComponent.getInstance(project).getBoolean(MIGRATION_OPTION, true) + } + } +} +