Move build system and targets statistics collection from StartupActivity to FUS State Collector
This commit is contained in:
+66
@@ -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<UsageDescriptor> {
|
||||||
|
val usages = mutableSetOf<UsageDescriptor>()
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -3481,9 +3481,6 @@
|
|||||||
<resolveScopeProvider implementation="org.jetbrains.kotlin.idea.core.script.dependencies.ScriptDependenciesResolveScopeProvider"/>
|
<resolveScopeProvider implementation="org.jetbrains.kotlin.idea.core.script.dependencies.ScriptDependenciesResolveScopeProvider"/>
|
||||||
|
|
||||||
<checkinHandlerFactory implementation="org.jetbrains.kotlin.idea.vcs.BunchFileCheckInHandlerFactory"/>
|
<checkinHandlerFactory implementation="org.jetbrains.kotlin.idea.vcs.BunchFileCheckInHandlerFactory"/>
|
||||||
|
|
||||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.framework.TargetRetrieveActivity"/>
|
|
||||||
|
|
||||||
<stripTrailingSpacesFilterFactory implementation="org.jetbrains.kotlin.idea.editor.KotlinStripTrailingSpacesFilterFactory"/>
|
<stripTrailingSpacesFilterFactory implementation="org.jetbrains.kotlin.idea.editor.KotlinStripTrailingSpacesFilterFactory"/>
|
||||||
|
|
||||||
<navbar implementation="org.jetbrains.kotlin.idea.navigationToolbar.KotlinNavBarModelExtension" order="first"/>
|
<navbar implementation="org.jetbrains.kotlin.idea.navigationToolbar.KotlinNavBarModelExtension" order="first"/>
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<statistics.counterUsagesCollector groupId="kotlin.ide.j2k" version="1"/>
|
<statistics.counterUsagesCollector groupId="kotlin.ide.j2k" version="1"/>
|
||||||
<statistics.counterUsagesCollector groupId="kotlin.ide.editor" version="1"/>
|
<statistics.counterUsagesCollector groupId="kotlin.ide.editor" version="1"/>
|
||||||
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.IDESettingsFUSCollector"/>
|
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.IDESettingsFUSCollector"/>
|
||||||
|
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/>
|
||||||
|
|
||||||
<trafficLightRendererContributor implementation="org.jetbrains.kotlin.idea.core.script.ScriptTrafficLightRendererContributor"/>
|
<trafficLightRendererContributor implementation="org.jetbrains.kotlin.idea.core.script.ScriptTrafficLightRendererContributor"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
<statistics.counterUsagesCollector groupId="kotlin.ide.j2k" version="1"/>
|
<statistics.counterUsagesCollector groupId="kotlin.ide.j2k" version="1"/>
|
||||||
<statistics.counterUsagesCollector groupId="kotlin.ide.editor" version="1"/>
|
<statistics.counterUsagesCollector groupId="kotlin.ide.editor" version="1"/>
|
||||||
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.IDESettingsFUSCollector"/>
|
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.IDESettingsFUSCollector"/>
|
||||||
|
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/>
|
||||||
|
|
||||||
<trafficLightRendererContributor implementation="org.jetbrains.kotlin.idea.core.script.ScriptTrafficLightRendererContributor"/>
|
<trafficLightRendererContributor implementation="org.jetbrains.kotlin.idea.core.script.ScriptTrafficLightRendererContributor"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user