From 21b7d873e7819f3bf8df48b38e9e73f609f66ca5 Mon Sep 17 00:00:00 2001 From: Anton Yalyshev Date: Wed, 18 Sep 2019 19:50:36 +0300 Subject: [PATCH] Move build system and targets statistics collection from StartupActivity to FUS State Collector --- .../ProjectConfigurationCollector.kt | 66 +++++++++++++++++++ idea/resources/META-INF/plugin-common.xml | 3 - idea/resources/META-INF/plugin.xml | 1 + idea/resources/META-INF/plugin.xml.191 | 1 + .../idea/framework/TargetRetrieveActivity.kt | 55 ---------------- 5 files changed, 68 insertions(+), 58 deletions(-) create mode 100644 idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/ProjectConfigurationCollector.kt delete mode 100644 idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/ProjectConfigurationCollector.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/ProjectConfigurationCollector.kt new file mode 100644 index 00000000000..46cc685bb33 --- /dev/null +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/ProjectConfigurationCollector.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.statistics + +import com.intellij.facet.ProjectFacetManager +import com.intellij.internal.statistic.beans.UsageDescriptor +import com.intellij.internal.statistic.eventLog.FeatureUsageData +import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector +import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.KotlinPluginUtil +import org.jetbrains.kotlin.idea.configuration.BuildSystemType +import org.jetbrains.kotlin.idea.configuration.getBuildSystemType +import org.jetbrains.kotlin.idea.facet.KotlinFacetType +import org.jetbrains.kotlin.idea.project.platform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.konan.isNative + +class ProjectConfigurationCollector : ProjectUsagesCollector() { + + override fun getUsages(project: Project): Set { + val usages = mutableSetOf() + val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID) + if (modulesWithFacet.isNotEmpty()) { + modulesWithFacet.forEach { + val buildSystem = getBuildSystemType(it) + val platform = getPlatform(it) + val data = FeatureUsageData() + .addData("pluginVersion", KotlinPluginUtil.getPluginVersion()) + .addData("system", buildSystem) + .addData("platform", platform) + val usageDescriptor = UsageDescriptor("Build", data) + usages.add(usageDescriptor) + } + } + return usages + } + + private fun getPlatform(it: Module): String { + return when { + it.platform.isJvm() -> "jvm" + it.platform.isJs() -> "js" + it.platform.isCommon() -> "common" + it.platform.isNative() -> "native" + else -> "unknown" + } + } + + private fun getBuildSystemType(it: Module): String { + val buildSystem = it.getBuildSystemType() + return when { + buildSystem == BuildSystemType.JPS -> "JPS" + buildSystem.toString().toLowerCase().contains("maven") -> "Maven" + buildSystem.toString().toLowerCase().contains("gradle") -> "Gradle" + else -> "unknown" + } + } + + override fun getGroupId() = "kotlin.project.configuration" + override fun getVersion(): Int = 1 +} diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index cc75b54c663..114605a36f9 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -3481,9 +3481,6 @@ - - - diff --git a/idea/resources/META-INF/plugin.xml b/idea/resources/META-INF/plugin.xml index 9911f796809..7517f9e44a6 100644 --- a/idea/resources/META-INF/plugin.xml +++ b/idea/resources/META-INF/plugin.xml @@ -77,6 +77,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/resources/META-INF/plugin.xml.191 b/idea/resources/META-INF/plugin.xml.191 index 4e1b39e4eef..ee46f33f143 100644 --- a/idea/resources/META-INF/plugin.xml.191 +++ b/idea/resources/META-INF/plugin.xml.191 @@ -77,6 +77,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio. + diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt b/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt deleted file mode 100644 index 73e705ebf92..00000000000 --- a/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. - * 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.framework - -import com.intellij.facet.ProjectFacetManager -import com.intellij.openapi.project.Project -import com.intellij.openapi.startup.StartupActivity -import org.jetbrains.kotlin.idea.configuration.BuildSystemType -import org.jetbrains.kotlin.idea.configuration.getBuildSystemType -import org.jetbrains.kotlin.idea.facet.KotlinFacetType -import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.idea.statistics.FUSEventGroups -import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger -import org.jetbrains.kotlin.idea.util.projectStructure.allModules -import org.jetbrains.kotlin.platform.isCommon -import org.jetbrains.kotlin.platform.js.isJs -import org.jetbrains.kotlin.platform.jvm.isJvm -import org.jetbrains.kotlin.platform.konan.isNative - -class TargetRetrieveActivity : StartupActivity { - - override fun runActivity(project: Project) { - //todo: log later to avoid loading during startup - - val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID) - if (modulesWithFacet.isNotEmpty()) { - modulesWithFacet.forEach { - val buildSystem = it.getBuildSystemType() - // TODO(dsavvinov): review that - val platform = when { - it.platform.isJvm() -> "jvm" - it.platform.isJs() -> "js" - it.platform.isCommon() -> "common" - it.platform.isNative() -> "native" - else -> "unknown" - } - when { - buildSystem == BuildSystemType.JPS -> - KotlinFUSLogger.log( - FUSEventGroups.JPSTarget, - platform - ) - buildSystem.toString().toLowerCase().contains("maven") -> - KotlinFUSLogger.log( - FUSEventGroups.MavenTarget, - platform - ) - } - } - } - } -} \ No newline at end of file