diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java index 1bb093cf4808..066b65d747d9 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.java @@ -10,7 +10,7 @@ import com.intellij.internal.statistic.eventLog.FeatureUsageLogger; import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent; import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext; import com.intellij.internal.statistic.utils.PluginInfo; -import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.internal.statistic.utils.PluginInfoDetectorKt; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.RoamingType; @@ -34,6 +34,7 @@ public class ActionsCollectorImpl extends ActionsCollector implements Persistent private static final String DEFAULT_ID = "third.party.plugin.action"; private static final HashMap ourPrefixesBlackList = new HashMap<>(); + static { ourPrefixesBlackList.put("RemoteTool_", "Remote External Tool"); ourPrefixesBlackList.put("Tool_", "External Tool"); @@ -50,13 +51,13 @@ public class ActionsCollectorImpl extends ActionsCollector implements Persistent boolean isContextMenu = event != null && event.isFromContextMenu(); final String place = event != null ? event.getPlace() : ""; - final PluginInfo info = StatisticsUtilKt.getPluginInfo(context); + final PluginInfo info = PluginInfoDetectorKt.getPluginInfo(context); final FeatureUsageDataBuilder builder = new FeatureUsageDataBuilder(). addFeatureContext(FUSUsageContext.OS_CONTEXT). addPluginInfo(info). addData("context_menu", isContextMenu); - final boolean isDevelopedByJB = info.getType().isDevelopedByJetBrains(); + final boolean isDevelopedByJB = info.isDevelopedByJetBrains(); if (isContextMenu && isDevelopedByJB) { builder.addPlace(place); } diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/IntentionsCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/IntentionsCollector.java index 4828a8a48eae..cf8ffdca4954 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/IntentionsCollector.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/IntentionsCollector.java @@ -11,7 +11,7 @@ import com.intellij.internal.statistic.eventLog.FeatureUsageLogger; import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent; import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext; import com.intellij.internal.statistic.utils.PluginInfo; -import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.internal.statistic.utils.PluginInfoDetectorKt; import com.intellij.lang.Language; import com.intellij.openapi.components.*; import com.intellij.openapi.util.text.StringUtil; @@ -49,9 +49,10 @@ public class IntentionsCollector implements PersistentStateComponent PREFIXES_TO_STRIP = Arrays.asList("com.intellij.codeInsight.", "com.intellij."); + public void record(@NotNull IntentionAction action, @NotNull Language language) { final Class clazz = getOriginalHandlerClass(action); - final PluginInfo info = StatisticsUtilKt.getPluginInfo(clazz); + final PluginInfo info = PluginInfoDetectorKt.getPluginInfo(clazz); final Map data = new FeatureUsageDataBuilder(). addFeatureContext(FUSUsageContext.OS_CONTEXT). @@ -59,7 +60,7 @@ public class IntentionsCollector implements PersistentStateComponent valueConverter, long...ranges) { + protected static String findBucket(long value, Function valueConverter, long... ranges) { double[] dRanges = new double[ranges.length]; for (int i = 0; i < dRanges.length; i++) { dRanges[i] = ranges[i]; @@ -107,7 +108,7 @@ public class MainMenuCollector implements PersistentStateComponent valueConverter.apply(d.longValue()), dRanges); } - protected static String findBucket(double value, Function valueConverter, double...ranges) { + protected static String findBucket(double value, Function valueConverter, double... ranges) { for (double range : ranges) { if (range == value) { return valueConverter.apply(value); @@ -134,6 +135,7 @@ public class MainMenuCollector implements PersistentStateComponent ourBlackList = new HashMap<>(); + static { ourBlackList.put("com.intellij.ide.ReopenProjectAction", "Reopen Project"); ourBlackList.put("com.intellij.openapi.wm.impl.ProjectWindowAction", "Switch Project"); @@ -163,7 +165,7 @@ public class MainMenuCollector implements PersistentStateComponent items = new ArrayList<>(); while (src instanceof MenuItem) { - items.add (0, ((MenuItem)src).getLabel()); + items.add(0, ((MenuItem)src).getLabel()); src = ((MenuItem)src).getParent(); } if (items.size() > 1) { diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/ui/persistence/ToolbarClicksCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/ui/persistence/ToolbarClicksCollector.java index f31ed86f6851..c3aaef6a6366 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/ui/persistence/ToolbarClicksCollector.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/ui/persistence/ToolbarClicksCollector.java @@ -8,7 +8,7 @@ import com.intellij.internal.statistic.eventLog.FeatureUsageLogger; import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent; import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext; import com.intellij.internal.statistic.utils.PluginInfo; -import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.internal.statistic.utils.PluginInfoDetectorKt; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.ActionWithDelegate; import com.intellij.openapi.actionSystem.AnAction; @@ -52,9 +52,9 @@ public class ToolbarClicksCollector implements PersistentStateComponent): PluginInfo { + val pluginId = PluginManagerCore.getPluginByClassName(clazz.name) ?: return PluginInfo(PluginType.PLATFORM, null) + return getPluginInfoById(pluginId) +} + +/** + * Returns if this code is coming from IntelliJ platform, a plugin created by JetBrains (bundled or not) or from official repository, + * so API from it may be reported + */ +fun getPluginInfoById(pluginId: PluginId?): PluginInfo { + if (pluginId == null) return PluginInfo(PluginType.UNKNOWN, null) + + return getPluginInfoByDescriptor(PluginManager.getPlugin(pluginId)) +} + +/** + * Returns if this code is coming from IntelliJ platform, a plugin created by JetBrains (bundled or not) or from official repository, + * so API from it may be reported + */ +fun getPluginInfoByDescriptor(plugin: IdeaPluginDescriptor?): PluginInfo { + if (plugin == null) return PluginInfo(PluginType.UNKNOWN, null) + + val id = plugin.pluginId.idString + if (PluginManagerMain.isDevelopedByJetBrains(plugin)) { + return if (plugin.isBundled) { + PluginInfo(PluginType.JB_BUNDLED, id) + } + else { + PluginInfo(PluginType.JB_NOT_BUNDLED, id) + } + } + + // only plugins installed from some repository (not bundled and not provided via classpath in development IDE instance - + // they are also considered bundled) would be reported + val listed = !plugin.isBundled && isSafeToReport(id) + return if (listed) { + PluginInfo(PluginType.LISTED, id) + } + else { + PluginInfo(PluginType.NOT_LISTED, null) + } +} + +enum class PluginType { + PLATFORM, JB_BUNDLED, JB_NOT_BUNDLED, LISTED, NOT_LISTED, UNKNOWN; + + fun isPlatformOrJBBundled(): Boolean { + return this == PLATFORM || this == JB_BUNDLED + } + + fun isDevelopedByJetBrains(): Boolean { + return isPlatformOrJBBundled() || this == JB_NOT_BUNDLED + } + + fun isSafeToReport(): Boolean { + return isDevelopedByJetBrains() || this == LISTED + } +} + +class PluginInfo(val type: PluginType, val id: String?) { + + fun isDevelopedByJetBrains(): Boolean { + return type.isDevelopedByJetBrains() + } + + fun isSafeToReport(): Boolean { + return type.isSafeToReport() + } +} \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/utils/StatisticsUtil.kt b/platform/platform-impl/src/com/intellij/internal/statistic/utils/StatisticsUtil.kt index 54e7dd380e62..58a3acaeaf8e 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/utils/StatisticsUtil.kt +++ b/platform/platform-impl/src/com/intellij/internal/statistic/utils/StatisticsUtil.kt @@ -286,49 +286,6 @@ fun getPluginType(clazz: Class<*>): PluginType { return if (listed) PluginType.LISTED else PluginType.NOT_LISTED } -fun getPluginInfo(clazz: Class<*>): PluginInfo { - val pluginId = PluginManagerCore.getPluginByClassName(clazz.name) ?: return PluginInfo(PluginType.PLATFORM, null) - val plugin = PluginManager.getPlugin(pluginId) ?: return PluginInfo(PluginType.UNKNOWN, null) - - val id = plugin.pluginId.idString - if (PluginManagerMain.isDevelopedByJetBrains(plugin)) { - return if (plugin.isBundled) { - PluginInfo(PluginType.JB_BUNDLED, id) - } - else { - PluginInfo(PluginType.JB_NOT_BUNDLED, id) - } - } - - // only plugins installed from some repository (not bundled and not provided via classpath in development IDE instance - - // they are also considered bundled) would be reported - val listed = !plugin.isBundled && isSafeToReport(pluginId.idString) - return if (listed) { - PluginInfo(PluginType.LISTED, id) - } - else { - PluginInfo(PluginType.NOT_LISTED, null) - } -} - -enum class PluginType { - PLATFORM, JB_BUNDLED, JB_NOT_BUNDLED, LISTED, NOT_LISTED, UNKNOWN; - - fun isPlatformOrJBBundled(): Boolean { - return this == PLATFORM || this == JB_BUNDLED - } - - fun isDevelopedByJetBrains(): Boolean { - return isPlatformOrJBBundled() || this == JB_NOT_BUNDLED - } - - fun isSafeToReport(): Boolean { - return isDevelopedByJetBrains() || this == LISTED; - } -} - -class PluginInfo(val type: PluginType, val id: String?) - private class DelayModificationTracker internal constructor(delay: Long, unit: TimeUnit) : ModificationTracker { private val myStamp = System.currentTimeMillis()