diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerKtImpl.kt b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerKtImpl.kt index 3811206d525a..c66c1e0b3012 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerKtImpl.kt +++ b/platform/lang-impl/src/com/intellij/execution/impl/ExecutionManagerKtImpl.kt @@ -128,16 +128,7 @@ class ExecutionManagerKtImpl(project: Project) : ExecutionManagerImpl(project) { private fun triggerUsage(environment: ExecutionEnvironment) { val runConfiguration = environment.runnerAndConfigurationSettings?.configuration ?: return val configurationFactory = runConfiguration.factory ?: return - val configurationType = configurationFactory.type - if (configurationType is UnknownConfigurationType) return - - var key = configurationType.id - if (configurationType.configurationFactories.size > 1) { - key += "." + configurationFactory.id - } - - FUSProjectUsageTrigger.getInstance(environment.project).trigger(RunConfigurationUsageTriggerCollector::class.java, key, - FUSUsageContext.create(environment.executor.id)) + RunConfigurationUsageTriggerCollector.trigger(environment.project, configurationFactory, environment.executor) } private class ProcessExecutionListener(private val project: Project, diff --git a/platform/lang-impl/src/com/intellij/execution/impl/statistics/AbstractRunConfigurationTypeUsagesCollector.java b/platform/lang-impl/src/com/intellij/execution/impl/statistics/AbstractRunConfigurationTypeUsagesCollector.java index f69a89be1c6f..fd3501553a77 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/statistics/AbstractRunConfigurationTypeUsagesCollector.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/statistics/AbstractRunConfigurationTypeUsagesCollector.java @@ -10,10 +10,14 @@ import com.intellij.execution.configurations.UnknownConfigurationType; import com.intellij.internal.statistic.beans.UsageDescriptor; import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext; import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector; +import com.intellij.internal.statistic.utils.PluginType; +import com.intellij.internal.statistic.utils.StatisticsUtilKt; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.HashSet; import java.util.Objects; @@ -40,21 +44,15 @@ public abstract class AbstractRunConfigurationTypeUsagesCollector extends Projec continue; } - final ConfigurationType configurationType = configurationFactory.getType(); - if (configurationType instanceof UnknownConfigurationType) { - continue; - } - final StringBuilder keyBuilder = new StringBuilder(); - keyBuilder.append(configurationType.getId()); - if (configurationType.getConfigurationFactories().length > 1) { - keyBuilder.append(".").append(configurationFactory.getId()); - } - final Template template = new Template(keyBuilder.toString(), createContext(settings, runConfiguration)); - if (templates.containsKey(template)) { - templates.increment(template); - } - else { - templates.put(template, 1); + final String key = toReportedId(configurationFactory); + if (StringUtil.isNotEmpty(key)) { + final Template template = new Template(key, createContext(settings, runConfiguration)); + if (templates.containsKey(template)) { + templates.increment(template); + } + else { + templates.put(template, 1); + } } } } @@ -65,6 +63,25 @@ public abstract class AbstractRunConfigurationTypeUsagesCollector extends Projec return result; } + @Nullable + public static String toReportedId(@NotNull ConfigurationFactory factory) { + final ConfigurationType configurationType = factory.getType(); + if (configurationType instanceof UnknownConfigurationType) { + return null; + } + + final PluginType type = StatisticsUtilKt.getPluginType(configurationType.getClass()); + if (!type.isSafeToReport()) { + return null; + } + final StringBuilder keyBuilder = new StringBuilder(); + keyBuilder.append(configurationType.getId()); + if (configurationType.getConfigurationFactories().length > 1) { + keyBuilder.append(".").append(factory.getId()); + } + return keyBuilder.toString(); + } + private static FUSUsageContext createContext(@NotNull RunnerAndConfigurationSettings settings, @NotNull RunConfiguration runConfiguration) { return FUSUsageContext.create( diff --git a/platform/lang-impl/src/com/intellij/execution/impl/statistics/RunConfigurationUsageTriggerCollector.java b/platform/lang-impl/src/com/intellij/execution/impl/statistics/RunConfigurationUsageTriggerCollector.java index b1612f3dda22..d2becd3399fa 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/statistics/RunConfigurationUsageTriggerCollector.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/statistics/RunConfigurationUsageTriggerCollector.java @@ -1,13 +1,32 @@ // Copyright 2000-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 file. package com.intellij.execution.impl.statistics; +import com.intellij.execution.Executor; +import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.internal.statistic.service.fus.collectors.FUSProjectUsageTrigger; +import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext; import com.intellij.internal.statistic.service.fus.collectors.ProjectUsageTriggerCollector; +import com.intellij.internal.statistic.utils.PluginType; +import com.intellij.internal.statistic.utils.StatisticsUtilKt; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; public class RunConfigurationUsageTriggerCollector extends ProjectUsageTriggerCollector { + private static final String UNKNOWN = "UNKNOWN"; + @NotNull @Override public String getGroupId() { return "statistics.run.configuration.start"; } + + public static void trigger(@NotNull Project project, @NotNull ConfigurationFactory factory, @NotNull Executor executor) { + final String key = AbstractRunConfigurationTypeUsagesCollector.toReportedId(factory); + if (StringUtil.isNotEmpty(key)) { + final PluginType type = StatisticsUtilKt.getPluginType(executor.getClass()); + final FUSUsageContext context = FUSUsageContext.create(type.isSafeToReport() ? executor.getId() : UNKNOWN); + FUSProjectUsageTrigger.getInstance(project).trigger(RunConfigurationUsageTriggerCollector.class, key, context); + } + } }