diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java index 052fab66c695..79273e021b09 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java @@ -79,7 +79,7 @@ import java.util.stream.Collectors; import static com.intellij.ide.CommandLineProcessorKt.isIdeStartupWizardEnabled; import static com.intellij.ide.SpecialConfigFiles.*; import static com.intellij.ide.plugins.BundledPluginsState.BUNDLED_PLUGINS_FILENAME; -import static com.intellij.openapi.application.ImportOldConfigsState.InitialImportScenario.*; +import static com.intellij.openapi.application.ImportOldConfigsUsagesCollector.InitialImportScenario.*; import static com.intellij.openapi.application.migrations.Localization242Kt.enableL10nIfPluginInstalled; import static com.intellij.openapi.application.migrations.PluginMigrationKt.MIGRATION_INSTALLED_PLUGINS_TXT; import static com.intellij.platform.ide.bootstrap.SplashManagerKt.hideSplash; @@ -175,7 +175,7 @@ public final class ConfigImportHelper { var vmOptionFileChanged = false; var vmOptionsLines = (List)null; var currentlyDisabledPlugins = (List)null; - var importScenarioStatistics = (ImportOldConfigsState.InitialImportScenario)null; + var importScenarioStatistics = (ImportOldConfigsUsagesCollector.InitialImportScenario)null; try { var oldConfigDirAndOldIdePath = (Pair<@NotNull Path, @Nullable Path>)null; @@ -305,7 +305,8 @@ public final class ConfigImportHelper { settings.importFinished(newConfigDir, otherProductPrefixes); } - ImportOldConfigsState.Companion.getInstance().reportImportScenario(importScenarioStatistics); + ImportOldConfigsUsagesCollector.INSTANCE.reportImportScenario(importScenarioStatistics); + if (importScenarioStatistics == IMPORT_SETTINGS_ACTION && vmOptionsLines != null) { var vmOptionsFile = newConfigDir.resolve(VMOptions.getFileName()); try { diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsPanel.java b/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsPanel.java index 9a4579f1b0b8..dbee9149d0e4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsPanel.java @@ -189,7 +189,7 @@ final class ImportOldConfigsPanel extends JDialog { } @Nullable Pair getSelectedFile() { - ImportOldConfigsState.Companion.getInstance().saveImportOldConfigType(myRbImportAuto, myRbImport, myRbDoNotImport, myResult != null); + ImportOldConfigsUsagesCollector.INSTANCE.saveImportOldConfigType(myRbImportAuto, myRbImport, myRbDoNotImport, myResult != null); if (myRbImportAuto.isSelected()) { return new Pair<>(myGuessedOldConfigDirs.get(Math.max(myComboBoxOldPaths.getSelectedIndex(), 0)), null); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsUsagesCollector.kt b/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsUsagesCollector.kt index a8a8328e8e0f..6620e00940a0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsUsagesCollector.kt +++ b/platform/platform-impl/src/com/intellij/openapi/application/ImportOldConfigsUsagesCollector.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.application import com.intellij.ide.ApplicationActivity @@ -9,96 +9,54 @@ import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesColle import javax.swing.JRadioButton internal object ImportOldConfigsUsagesCollector : CounterUsagesCollector() { - private val EVENT_GROUP = EventLogGroup("import.old.config", 4) - private val IMPORT_DIALOG_SHOWN_EVENT = EVENT_GROUP.registerEvent("import.dialog.shown", - Enum("selected", ImportOldConfigType::class.java), - Boolean("config_folder_exists")) - private val INITIAL_IMPORT_SCENARIO = EVENT_GROUP.registerEvent("import.initially", - Enum("initial_import_scenario", ImportOldConfigsState.InitialImportScenario::class.java)) - - override fun getGroup(): EventLogGroup = EVENT_GROUP - - internal class Trigger : ApplicationActivity { - override suspend fun execute() { - val state = ImportOldConfigsState.getInstance() - val initialImportScenario = state.initialImportScenario - if (initialImportScenario != null) { - INITIAL_IMPORT_SCENARIO.log(initialImportScenario) - } - if (state.wasOldConfigPanelOpened()) { - IMPORT_DIALOG_SHOWN_EVENT.log(state.type, state.doesSourceConfigFolderExist()) - } - } - } - - enum class ImportOldConfigType { - FROM_PREVIOUS, - FROM_CUSTOM, - DO_NOT_IMPORT, - OTHER, - NOT_INITIALIZED - } -} - -internal class ImportOldConfigsState { - @Volatile - var initialImportScenario: InitialImportScenario? = null - private set - - @Volatile - private var oldConfigPanelWasOpened = false - - @Volatile - private var sourceConfigFolderExists = false - - @Volatile - var type: ImportOldConfigsUsagesCollector.ImportOldConfigType = ImportOldConfigsUsagesCollector.ImportOldConfigType.NOT_INITIALIZED - private set - - companion object { - private val _instance = ImportOldConfigsState() - fun getInstance(): ImportOldConfigsState = _instance - - private fun getOldImportType(previous: JRadioButton, - custom: JRadioButton, - doNotImport: JRadioButton): ImportOldConfigsUsagesCollector.ImportOldConfigType { - if (previous.isSelected) { - return ImportOldConfigsUsagesCollector.ImportOldConfigType.FROM_PREVIOUS - } - if (custom.isSelected) { - return ImportOldConfigsUsagesCollector.ImportOldConfigType.FROM_CUSTOM - } - return if (doNotImport.isSelected) ImportOldConfigsUsagesCollector.ImportOldConfigType.DO_NOT_IMPORT else ImportOldConfigsUsagesCollector.ImportOldConfigType.OTHER - } + private enum class ImportOldConfigType { + FROM_PREVIOUS, FROM_CUSTOM, DO_NOT_IMPORT, OTHER, NOT_INITIALIZED } enum class InitialImportScenario { - CLEAN_CONFIGS, - IMPORTED_FROM_PREVIOUS_VERSION, - IMPORTED_FROM_OTHER_PRODUCT, - IMPORTED_FROM_CLOUD, - CONFIG_DIRECTORY_NOT_FOUND, - SHOW_DIALOG_NO_CONFIGS_FOUND, - SHOW_DIALOG_CONFIGS_ARE_TOO_OLD, - SHOW_DIALOG_REQUESTED_BY_PROPERTY, - IMPORT_SETTINGS_ACTION, + CLEAN_CONFIGS, IMPORTED_FROM_PREVIOUS_VERSION, IMPORTED_FROM_OTHER_PRODUCT, @Suppress("unused") IMPORTED_FROM_CLOUD, CONFIG_DIRECTORY_NOT_FOUND, + SHOW_DIALOG_NO_CONFIGS_FOUND, SHOW_DIALOG_CONFIGS_ARE_TOO_OLD, SHOW_DIALOG_REQUESTED_BY_PROPERTY, IMPORT_SETTINGS_ACTION, RESTORE_DEFAULT_ACTION } + private val GROUP = EventLogGroup("import.old.config", 4) + + private val IMPORT_DIALOG_SHOWN_EVENT = + GROUP.registerEvent("import.dialog.shown", Enum("selected", ImportOldConfigType::class.java), Boolean("config_folder_exists")) + + private val INITIAL_IMPORT_SCENARIO = + GROUP.registerEvent("import.initially", Enum("initial_import_scenario", InitialImportScenario::class.java)) + + @Volatile private var initialImportScenario = null as InitialImportScenario? + @Volatile private var oldConfigPanelWasOpened = false + @Volatile private var sourceConfigFolderExists = false + @Volatile private var importType = ImportOldConfigType.NOT_INITIALIZED + + override fun getGroup(): EventLogGroup = GROUP + fun reportImportScenario(strategy: InitialImportScenario) { initialImportScenario = strategy } - fun saveImportOldConfigType(previous: JRadioButton, - custom: JRadioButton, - doNotImport: JRadioButton, - configFolderExists: Boolean) { + fun saveImportOldConfigType(previous: JRadioButton, custom: JRadioButton, doNotImport: JRadioButton, configFolderExists: Boolean) { oldConfigPanelWasOpened = true sourceConfigFolderExists = configFolderExists - type = getOldImportType(previous, custom, doNotImport) + importType = when { + previous.isSelected -> ImportOldConfigType.FROM_PREVIOUS + custom.isSelected -> ImportOldConfigType.FROM_CUSTOM + doNotImport.isSelected -> ImportOldConfigType.DO_NOT_IMPORT + else -> ImportOldConfigType.OTHER + } } - fun wasOldConfigPanelOpened(): Boolean = oldConfigPanelWasOpened - - fun doesSourceConfigFolderExist(): Boolean = sourceConfigFolderExists + internal class Trigger : ApplicationActivity { + override suspend fun execute() { + initialImportScenario?.let { + INITIAL_IMPORT_SCENARIO.log(it) + } + if (oldConfigPanelWasOpened) { + IMPORT_DIALOG_SHOWN_EVENT.log(importType, sourceConfigFolderExists) + } + } + } }