diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt index c9e8c042ee7..c580859c0fa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinMigrationProjectComponent.kt @@ -5,11 +5,7 @@ package org.jetbrains.kotlin.idea.configuration -import com.intellij.openapi.actionSystem.ActionManager -import com.intellij.openapi.actionSystem.ActionPlaces -import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.module.Module @@ -26,11 +22,10 @@ import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl -import org.jetbrains.kotlin.idea.configuration.ui.MigrationNotificationDialog +import org.jetbrains.kotlin.idea.configuration.ui.showMigrationNotification import org.jetbrains.kotlin.idea.facet.KotlinFacet 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.migration.applicableMigrationTools import org.jetbrains.kotlin.idea.project.languageVersionSettings @@ -111,19 +106,7 @@ class KotlinMigrationProjectComponent(val project: Project) { } ApplicationManager.getApplication().invokeLater { - val migrationNotificationDialog = MigrationNotificationDialog(project, migrationInfo) - migrationNotificationDialog.show() - - if (migrationNotificationDialog.isOK) { - val action = ActionManager.getInstance().getAction(CodeMigrationAction.ACTION_ID) - - val dataContext = getDataContextFromDialog(migrationNotificationDialog) - if (dataContext != null) { - val actionEvent = AnActionEvent.createFromAnAction(action, null, ActionPlaces.ACTION_SEARCH, dataContext) - - action.actionPerformed(actionEvent) - } - } + showMigrationNotification(project, migrationInfo) } } finally { notifyFinish(migrationInfo, hasApplicableTools) diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt deleted file mode 100644 index b9d5bd1ef39..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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.ide.DataManager -import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.ui.DialogWrapper - -@Suppress("UNUSED_PARAMETER") -internal fun getDataContextFromDialog(wrapper: DialogWrapper): DataContext? = DataManager.getInstance().dataContextFromFocus.result \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt.173 b/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt.173 deleted file mode 100644 index 0389511b28f..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/MigrationUtils.kt.173 +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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.ide.DataManager -import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.ui.DialogWrapper - -@Suppress("UNUSED_PARAMETER") -internal fun getDataContextFromDialog(wrapper: DialogWrapper): DataContext? = - DataManager.getInstance().getDataContext(wrapper.window) \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt deleted file mode 100644 index adf119b3102..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationDialog.kt +++ /dev/null @@ -1,46 +0,0 @@ -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(val project: Project, migrationInfo: MigrationInfo) : DialogWrapper(project, false) { - private val form = MigrationNotificationForm() - - init { - title = "Kotlin Migration (Experimental)" - setOKButtonText("Migrate") - - form.libraryInfo.isVisible = migrationInfo.oldStdlibVersion != migrationInfo.newStdlibVersion - form.libraryInfo.text = "Standard library: ${migrationInfo.oldStdlibVersion} to ${migrationInfo.newStdlibVersion}" - - form.languageVersionInfo.isVisible = migrationInfo.oldLanguageVersion != migrationInfo.newLanguageVersion - form.languageVersionInfo.text = "Language version: ${migrationInfo.oldLanguageVersion} to ${migrationInfo.newLanguageVersion}" - - 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() { - saveSettings() - super.doOKAction() - } - -} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form deleted file mode 100644 index 41a24890e0a..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.form +++ /dev/null @@ -1,84 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.java b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.java deleted file mode 100644 index fd44cce83f3..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/MigrationNotificationForm.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 javax.swing.*; - -public class MigrationNotificationForm { - public JCheckBox disableMigrationDetectionCheckBox; - public JPanel mainPanel; - public JLabel libraryInfo; - public JLabel languageVersionInfo; - public JLabel apiVersionInfo; -} diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/migrationNotification.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/migrationNotification.kt new file mode 100644 index 00000000000..ff7402a77b6 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/migrationNotification.kt @@ -0,0 +1,57 @@ +/* + * 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.notification.* +import com.intellij.openapi.actionSystem.ActionManager +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.impl.SimpleDataContext +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.configuration.MigrationInfo +import org.jetbrains.kotlin.idea.migration.CodeMigrationAction +import org.jetbrains.kotlin.idea.migration.CodeMigrationToggleAction + +internal fun showMigrationNotification(project: Project, migrationInfo: MigrationInfo) { + val detectedChangeMessage = buildString { + appendBr("Detected migration:") + if (migrationInfo.oldStdlibVersion != migrationInfo.newStdlibVersion) { + appendIndentBr("Standard library: ${migrationInfo.oldStdlibVersion} -> ${migrationInfo.newStdlibVersion}") + } + + if (migrationInfo.oldLanguageVersion != migrationInfo.newLanguageVersion) { + appendIndentBr("Language version: ${migrationInfo.oldLanguageVersion} -> ${migrationInfo.newLanguageVersion}") + } + + if (migrationInfo.oldApiVersion != migrationInfo.newApiVersion) { + appendIndentBr("API version: ${migrationInfo.oldApiVersion} -> ${migrationInfo.newApiVersion}") + } + } + + KOTLIN_MIGRATION_NOTIFICATION_GROUP + .createNotification( + KOTLIN_MIGRATION_NOTIFICATION_ID, + "Migrations for Kotlin code are available

$detectedChangeMessage", + NotificationType.WARNING, + null + ) + .also { notification -> + notification.addAction(NotificationAction.createSimple("Run migrations") { + val projectContext = SimpleDataContext.getProjectContext(project) + val action = ActionManager.getInstance().getAction(CodeMigrationAction.ACTION_ID) + Notification.fire(notification, action, projectContext) + + notification.expire() + }) + } + .notify(project) +} + +private fun StringBuilder.appendBr(line: String) = this.append("$line
") +private fun StringBuilder.appendIndentBr(line: String) = appendBr("  $line") + +private const val KOTLIN_MIGRATION_NOTIFICATION_ID = "Kotlin Migration" +private val KOTLIN_MIGRATION_NOTIFICATION_GROUP = + NotificationGroup(KOTLIN_MIGRATION_NOTIFICATION_ID, NotificationDisplayType.STICKY_BALLOON, true)