From 29cbe81f8d9b3ecd2a20de83d8ec0f75a9c18485 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 25 Nov 2015 14:17:01 +0300 Subject: [PATCH] diff: fix UsagesCollector do not report multiple UsageDescriptors with the same key - they will not be merged --- .../diff/statistics/DiffUsagesCollector.kt | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.kt b/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.kt index f3a5948d8759..461f6eaa1229 100644 --- a/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.kt +++ b/platform/diff-impl/src/com/intellij/diff/statistics/DiffUsagesCollector.kt @@ -28,6 +28,7 @@ import com.intellij.util.containers.ContainerUtil class DiffUsagesCollector : UsagesCollector() { companion object { val ID = GroupDescriptor.create("Diff") + val VERSION = 1 } override fun getGroupId(): GroupDescriptor { @@ -35,30 +36,44 @@ class DiffUsagesCollector : UsagesCollector() { } override fun getUsages(): Set { - val usages = ContainerUtil.newHashSet() + val usages: MutableMap = ContainerUtil.newHashMap() + usages["Total"] = 1 + + + listOf(DiffPlaces.DEFAULT, DiffPlaces.CHANGES_VIEW, DiffPlaces.COMMIT_DIALOG).forEach { place -> + val diffSettings = DiffSettingsHolder.getInstance().getSettings(place) + val textSettings = TextDiffSettingsHolder.getInstance().getSettings(place) + + usages.increment("TextDiffSettings.IgnorePolicy", textSettings.ignorePolicy) + usages.increment("TextDiffSettings.HighlightPolicy", textSettings.highlightPolicy) + usages.increment("TextDiffSettings.ExpandByDefault", textSettings.isExpandByDefault) + usages.increment("DiffSettings.isUnifiedTool", isUnifiedToolDefault(diffSettings)) + } - processUsages(DiffPlaces.DEFAULT, usages) - processUsages(DiffPlaces.CHANGES_VIEW, usages) - processUsages(DiffPlaces.COMMIT_DIALOG, usages) val diffSettings = DiffSettingsHolder.getInstance().getSettings(null) - usages.add(UsageDescriptor("diff.DiffSettings.Default.IterateNextFile", if (diffSettings.isGoToNextFileOnNextDifference) 1 else 0)) + usages.increment("DiffSettings.IterateNextFile", diffSettings.isGoToNextFileOnNextDifference) - return usages + + return usages.map { it -> UsageDescriptor("diff.$VERSION.${it.key}", it.value) }.toSet() } - private fun processUsages(place: String, usages: MutableSet) { - val diffSettings = DiffSettingsHolder.getInstance().getSettings(place) - val textSettings = TextDiffSettingsHolder.getInstance().getSettings(place) - - usages.add(UsageDescriptor("diff.TextDiffSettings.Default.IgnorePolicy." + textSettings.ignorePolicy.name, 1)) - usages.add(UsageDescriptor("diff.TextDiffSettings.Default.HighlightPolicy." + textSettings.highlightPolicy.name, 1)) - usages.add(UsageDescriptor("diff.TextDiffSettings.Default.ExpandByDefault", if (textSettings.isExpandByDefault) 1 else 0)) - - val toolOrder = diffSettings.diffToolsOrder + private fun isUnifiedToolDefault(settings: DiffSettingsHolder.DiffSettings): Boolean { + val toolOrder = settings.diffToolsOrder val defaultToolIndex = ContainerUtil.indexOf(toolOrder, SimpleDiffTool::class.java.canonicalName) val unifiedToolIndex = ContainerUtil.indexOf(toolOrder, UnifiedDiffTool::class.java.canonicalName) - val isUnifiedDefault = unifiedToolIndex != -1 && unifiedToolIndex < defaultToolIndex - usages.add(UsageDescriptor("diff.DiffSettings.Default.isUnifiedTool", if (isUnifiedDefault) 1 else 0)) + return unifiedToolIndex != -1 && unifiedToolIndex < defaultToolIndex + } + + private fun MutableMap.increment(key: String) { + put(key, (get(key) ?: 0) + 1) + } + + private fun MutableMap.increment(prefix: String, suffix: Enum<*>) { + increment("$prefix.${suffix.name}") + } + + private fun MutableMap.increment(key: String, condition: Boolean) { + if (condition) increment(key) } }