diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java index 1959d21c4801f76ba63532e2c1bf50e7f2817113..ec51a5ee03c5db9f39a0f6900d83eea2b54b7d6c 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenImportingSettings.java @@ -37,6 +37,8 @@ public class MavenImportingSettings implements Cloneable { "generate-test-resources", "process-test-resources"}; public static final String UPDATE_FOLDERS_DEFAULT_PHASE = PROCESS_RESOURCES_PHASE; + public static final String DEFAULT_DEPENDENCY_TYPES = + "jar, test-jar, maven-plugin, ejb, ejb-client, jboss-har, jboss-sar, war, ear, bundle"; @NotNull private String dedicatedModuleDir = ""; private boolean lookForNested = false; @@ -56,7 +58,7 @@ public class MavenImportingSettings implements Cloneable { private GeneratedSourcesFolder generatedSourcesFolder = GeneratedSourcesFolder.AUTODETECT; - private String dependencyTypes = "jar, test-jar, maven-plugin, ejb, ejb-client, jboss-har, jboss-sar, war, ear, bundle"; + private String dependencyTypes = DEFAULT_DEPENDENCY_TYPES; private Set<String> myDependencyTypesAsSet; @NotNull private String vmOptionsForImporter = ""; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/statistics/MavenSettingsCollector.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/statistics/MavenSettingsCollector.kt index bc11bfdc92c03cf1deb8727b0d4c91692892ad69..3bfebac2b4d431831b197a69973aa296230bd560 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/statistics/MavenSettingsCollector.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/statistics/MavenSettingsCollector.kt @@ -5,9 +5,12 @@ import com.intellij.internal.statistic.beans.UsageDescriptor import com.intellij.internal.statistic.service.fus.collectors.ProjectUsagesCollector import com.intellij.internal.statistic.utils.getBooleanUsage import com.intellij.internal.statistic.utils.getEnumUsage +import com.intellij.openapi.project.ExternalStorageConfigurationManager import com.intellij.openapi.project.Project import org.jetbrains.idea.maven.execution.MavenExternalParameters.resolveMavenHome import org.jetbrains.idea.maven.execution.MavenRunner +import org.jetbrains.idea.maven.execution.MavenRunnerSettings +import org.jetbrains.idea.maven.project.MavenImportingSettings import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.utils.MavenUtil @@ -19,6 +22,11 @@ class MavenSettingsCollector : ProjectUsagesCollector() { if (!manager.isMavenizedProject) return emptySet() val usages = mutableSetOf<UsageDescriptor>() + + // to have a total users base line to calculate pertentages of settings + usages.add(getBooleanUsage("hasMavenProject", true)) + + // Main page val generalSettings = manager.generalSettings usages.add(getEnumUsage("checksumPolicy", generalSettings.checksumPolicy)) usages.add(getEnumUsage("failureBehavior", generalSettings.failureBehavior)) @@ -37,25 +45,59 @@ class MavenSettingsCollector : ProjectUsagesCollector() { catch (ignore: Exception) { // ignore invalid maven home configuration } + usages.add(getBooleanUsage("localRepository", generalSettings.localRepository.isNotBlank())) + usages.add(getBooleanUsage("userSettingsFile", generalSettings.userSettingsFile.isNotBlank())) + // Importing page val importingSettings = manager.importingSettings - usages.add(getEnumUsage("generatedSourcesFolder", importingSettings.generatedSourcesFolder)) - usages.add(getBooleanUsage("createModuleGroups", importingSettings.isCreateModuleGroups)) - usages.add(getBooleanUsage("createModulesForAggregators", importingSettings.isCreateModulesForAggregators)) - usages.add(getBooleanUsage("downloadDocsAutomatically", importingSettings.isDownloadDocsAutomatically)) - usages.add(getBooleanUsage("downloadSourcesAutomatically", importingSettings.isDownloadSourcesAutomatically)) - usages.add(getBooleanUsage("excludeTargetFolder", importingSettings.isExcludeTargetFolder)) + usages.add(getBooleanUsage("lookForNested", importingSettings.isLookForNested)) + + usages.add(getBooleanUsage("dedicatedModuleDir", importingSettings.dedicatedModuleDir.isNotBlank())) + usages.add(getBooleanUsage("storeProjectFilesExternally", ExternalStorageConfigurationManager.getInstance(project).isEnabled)) usages.add(getBooleanUsage("importAutomatically", importingSettings.isImportAutomatically)) + usages.add(getBooleanUsage("autoDetectCompiler", importingSettings.isAutoDetectCompiler)) + usages.add(getBooleanUsage("createModulesForAggregators", importingSettings.isCreateModulesForAggregators)) + usages.add(getBooleanUsage("createModuleGroups", importingSettings.isCreateModuleGroups)) usages.add(getBooleanUsage("keepSourceFolders", importingSettings.isKeepSourceFolders)) - usages.add(getBooleanUsage("lookForNested", importingSettings.isLookForNested)) + usages.add(getBooleanUsage("excludeTargetFolder", importingSettings.isExcludeTargetFolder)) usages.add(getBooleanUsage("useMavenOutput", importingSettings.isUseMavenOutput)) + + usages.add(getEnumUsage("generatedSourcesFolder", importingSettings.generatedSourcesFolder)) usages.add(UsageDescriptor("updateFoldersOnImportPhase." + importingSettings.updateFoldersOnImportPhase)) + usages.add(getBooleanUsage("downloadDocsAutomatically", importingSettings.isDownloadDocsAutomatically)) + usages.add(getBooleanUsage("downloadSourcesAutomatically", importingSettings.isDownloadSourcesAutomatically)) + usages.add(getBooleanUsage("customDependencyTypes", + MavenImportingSettings.DEFAULT_DEPENDENCY_TYPES != importingSettings.dependencyTypes)) + + usages.add(getJREUsage("jdkForImporter", importingSettings.jdkForImporter)) + usages.add(getBooleanUsage("hasVmOptionsForImporter", importingSettings.vmOptionsForImporter.isNotBlank())) + + // Ignored Files page + usages.add(getBooleanUsage("hasIgnoredFiles", manager.ignoredFilesPaths.isNotEmpty())) + usages.add(getBooleanUsage("hasIgnoredPatterns", manager.ignoredFilesPatterns.isNotEmpty())) + + // Runner page val runnerSettings = MavenRunner.getInstance(project).settings usages.add(getBooleanUsage("delegateBuildRun", runnerSettings.isDelegateBuildToMaven)); - usages.add(getBooleanUsage("passParentEnv", runnerSettings.isPassParentEnv)); usages.add(getBooleanUsage("runMavenInBackground", runnerSettings.isRunMavenInBackground)); + usages.add(getJREUsage("runnerJreName", runnerSettings.jreName)); + usages.add(getBooleanUsage("hasRunnerVmOptions", runnerSettings.vmOptions.isNotBlank())); + usages.add(getBooleanUsage("hasRunnerEnvVariables", !runnerSettings.environmentProperties.isNullOrEmpty())); + usages.add(getBooleanUsage("passParentEnv", runnerSettings.isPassParentEnv)); usages.add(getBooleanUsage("skipTests", runnerSettings.isSkipTests)); + usages.add(getBooleanUsage("hasRunnerMavenProperties", !runnerSettings.mavenProperties.isNullOrEmpty())); return usages } + + private fun getJREUsage(key: String, jreName: String?): UsageDescriptor { + val anonymizedName = when { + jreName.isNullOrBlank() -> "empty" + jreName in listOf(MavenRunnerSettings.USE_INTERNAL_JAVA, + MavenRunnerSettings.USE_PROJECT_JDK, + MavenRunnerSettings.USE_JAVA_HOME) -> jreName + else -> "custom" + } + return UsageDescriptor("$key.$anonymizedName", 1) + } }