From bc9339c6a797a9837daaa9ea3feaff73fb88c1a1 Mon Sep 17 00:00:00 2001 From: Suzy Kostumyan Date: Fri, 30 Jan 2026 14:14:35 +0400 Subject: [PATCH] DO-2480 update FUS reporting lib version to 1.0.226 GitOrigin-RevId: d948984cd7822bfb344eb3b26f640a1e876dd4ad --- ...brains_fus_reporting_ap_validation_all.xml | 12 +-- ...> com_jetbrains_fus_reporting_fus_api.xml} | 12 +-- lib/BUILD.bazel | 22 +++--- lib/MODULE.bazel | 32 ++++---- platform/build-scripts/BUILD.bazel | 2 +- .../intellij.platform.buildScripts.iml | 2 +- .../build/CommunityLibraryLicenses.kt | 2 +- .../ABExperimentOptionIdValidationRule.kt | 2 +- .../RunConfigurationValidatorTest.java | 2 +- platform/platform-tests/BUILD.bazel | 2 +- .../intellij.platform.tests.iml | 2 +- .../metadata/EventSchemeBuilderTest.kt | 56 ++++++++++++++ .../filter/TestGroupFilterRulesBuilder.kt | 2 +- .../BaseSensitiveDataValidatorTest.kt | 6 +- .../FeatureUsageCustomValidatorsTest.kt | 2 +- .../FeatureUsageCustomValidatorsUtilTest.kt | 4 +- .../validator/LocalFileValidationRuleTest.kt | 2 +- .../validator/ProductivityValidatorTest.kt | 2 +- .../validator/SensitiveDataValidatorTest.kt | 12 +-- platform/statistics/BUILD.bazel | 8 +- .../StatisticsEventLogToolWindow.kt | 18 ++--- .../StatisticsEventLogToolWindowTest.kt | 13 ++-- .../scheme/EventLogMetadataServiceTest.kt | 3 +- .../intellij.platform.statistics.iml | 2 +- .../statistic/eventLog/QodanaEventsData.kt | 2 +- .../eventLog/events/BaseEventFields.kt | 14 +++- .../statistic/eventLog/events/EventFields.kt | 17 +++-- .../uploader/EventLogExternalUploader.kt | 2 +- .../IntellijSensitiveDataValidator.kt | 26 ++++++- .../validator/ValidationResultType.kt | 74 +++++++++++++++++++ .../rules/impl/ComposerValidationRule.kt | 4 +- .../rules/impl/CustomValidationRule.java | 21 ++++-- .../rules/utils/CustomRuleProducer.java | 2 +- .../CompositeValidationRulesStorage.kt | 8 +- .../validator/storage/FusComponentProvider.kt | 8 +- .../ValidationRulesStorageProvider.java | 2 +- platform/statistics/uploader/BUILD.bazel | 2 +- .../intellij.platform.statistics.uploader.iml | 2 +- .../metadata/EventLogMetadataUtils.java | 2 +- .../impl/shared/XDebuggerActionsCollector.kt | 3 +- .../FilePredictorFeaturesValidatorTest.kt | 2 +- .../statistics/MavenPluginCollectorTest.kt | 2 +- .../fus/ReworkedTerminalUsageCollector.kt | 2 +- 43 files changed, 299 insertions(+), 118 deletions(-) rename .idea/libraries/{com_jetbrains_fus_reporting_api.xml => com_jetbrains_fus_reporting_fus_api.xml} (56%) create mode 100644 platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/ValidationResultType.kt diff --git a/.idea/libraries/com_jetbrains_fus_reporting_ap_validation_all.xml b/.idea/libraries/com_jetbrains_fus_reporting_ap_validation_all.xml index 902b2210510f..961e3d995577 100644 --- a/.idea/libraries/com_jetbrains_fus_reporting_ap_validation_all.xml +++ b/.idea/libraries/com_jetbrains_fus_reporting_ap_validation_all.xml @@ -1,20 +1,20 @@ - + - - 9921601d14966cf0f9231fd2b92ba9a5b65b02c92a3a9ebc2049c8b2710a2eea + + ab4e876b971e66217e311205823a626d10fc751999998ea67fe637277151a224 - + - + - + \ No newline at end of file diff --git a/.idea/libraries/com_jetbrains_fus_reporting_api.xml b/.idea/libraries/com_jetbrains_fus_reporting_fus_api.xml similarity index 56% rename from .idea/libraries/com_jetbrains_fus_reporting_api.xml rename to .idea/libraries/com_jetbrains_fus_reporting_fus_api.xml index f5c3ae38b601..00aef8265632 100644 --- a/.idea/libraries/com_jetbrains_fus_reporting_api.xml +++ b/.idea/libraries/com_jetbrains_fus_reporting_fus_api.xml @@ -1,18 +1,18 @@ - - + + - - bd122fb2110ec009cf3143aef5e2d473611b5e015c0d2701686eb94200e538ca + + a0928c000cbffdb10f73966a4e3ee2ca884aede38c9ac908212554b067898a8b - + - + \ No newline at end of file diff --git a/lib/BUILD.bazel b/lib/BUILD.bazel index 8b34bc843f1d..878851ad722b 100644 --- a/lib/BUILD.bazel +++ b/lib/BUILD.bazel @@ -842,32 +842,32 @@ jvm_import( ) copy_file( - name = "com.jetbrains.fus.reporting/ap-validation-all-1.0.205.jar_copy", - src = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_205_http//file", - out = "com.jetbrains.fus.reporting/ap-validation-all-1.0.205.jar", + name = "com.jetbrains.fus.reporting/ap-validation-all-1.0.226.jar_copy", + src = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_226_http//file", + out = "com.jetbrains.fus.reporting/ap-validation-all-1.0.226.jar", allow_symlink = True, visibility = ["//visibility:public"] ) jvm_import( name = "com-jetbrains-fus-reporting-ap-validation-all", - jar = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_205_http//file", - source_jar = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_205-sources_http//file", + jar = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_226_http//file", + source_jar = "@com_jetbrains_fus_reporting-ap-validation-all-1_0_226-sources_http//file", visibility = ["//visibility:public"] ) copy_file( - name = "com.jetbrains.fus.reporting/api-1.0.205.jar_copy", - src = "@com_jetbrains_fus_reporting-api-1_0_205_http//file", - out = "com.jetbrains.fus.reporting/api-1.0.205.jar", + name = "com.jetbrains.fus.reporting/fus-api-1.0.226.jar_copy", + src = "@com_jetbrains_fus_reporting-fus-api-1_0_226_http//file", + out = "com.jetbrains.fus.reporting/fus-api-1.0.226.jar", allow_symlink = True, visibility = ["//visibility:public"] ) jvm_import( - name = "com-jetbrains-fus-reporting-api", - jar = "@com_jetbrains_fus_reporting-api-1_0_205_http//file", - source_jar = "@com_jetbrains_fus_reporting-api-1_0_205-sources_http//file", + name = "com-jetbrains-fus-reporting-fus-api", + jar = "@com_jetbrains_fus_reporting-fus-api-1_0_226_http//file", + source_jar = "@com_jetbrains_fus_reporting-fus-api-1_0_226-sources_http//file", visibility = ["//visibility:public"] ) diff --git a/lib/MODULE.bazel b/lib/MODULE.bazel index 05ea24dc9532..e6fbb54170ab 100644 --- a/lib/MODULE.bazel +++ b/lib/MODULE.bazel @@ -455,31 +455,31 @@ http_file( ) http_file( - name = "com_jetbrains_fus_reporting-ap-validation-all-1_0_205_http", - url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/ap-validation-all/1.0.205/ap-validation-all-1.0.205.jar", - sha256 = "9921601d14966cf0f9231fd2b92ba9a5b65b02c92a3a9ebc2049c8b2710a2eea", - downloaded_file_path = "ap-validation-all-1.0.205.jar" + name = "com_jetbrains_fus_reporting-ap-validation-all-1_0_226_http", + url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/ap-validation-all/1.0.226/ap-validation-all-1.0.226.jar", + sha256 = "ab4e876b971e66217e311205823a626d10fc751999998ea67fe637277151a224", + downloaded_file_path = "ap-validation-all-1.0.226.jar" ) http_file( - name = "com_jetbrains_fus_reporting-ap-validation-all-1_0_205-sources_http", - url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/ap-validation-all/1.0.205/ap-validation-all-1.0.205-sources.jar", - sha256 = "57629ade1163f0c382a38eae0b127eb83e1f8aae36b6ca98242bcb2453f0e7b7", - downloaded_file_path = "ap-validation-all-1.0.205-sources.jar" + name = "com_jetbrains_fus_reporting-ap-validation-all-1_0_226-sources_http", + url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/ap-validation-all/1.0.226/ap-validation-all-1.0.226-sources.jar", + sha256 = "c6deada2fac53b8ea6523dbda77597b128006674616f140f04df23264c6d1aa3", + downloaded_file_path = "ap-validation-all-1.0.226-sources.jar" ) http_file( - name = "com_jetbrains_fus_reporting-api-1_0_205_http", - url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/api/1.0.205/api-1.0.205.jar", - sha256 = "bd122fb2110ec009cf3143aef5e2d473611b5e015c0d2701686eb94200e538ca", - downloaded_file_path = "api-1.0.205.jar" + name = "com_jetbrains_fus_reporting-fus-api-1_0_226_http", + url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/fus-api/1.0.226/fus-api-1.0.226.jar", + sha256 = "a0928c000cbffdb10f73966a4e3ee2ca884aede38c9ac908212554b067898a8b", + downloaded_file_path = "fus-api-1.0.226.jar" ) http_file( - name = "com_jetbrains_fus_reporting-api-1_0_205-sources_http", - url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/api/1.0.205/api-1.0.205-sources.jar", - sha256 = "5ce874a15878312c16eeafc73ff14e28e1fc0b72961eb6156cb8c46c04f66aac", - downloaded_file_path = "api-1.0.205-sources.jar" + name = "com_jetbrains_fus_reporting-fus-api-1_0_226-sources_http", + url = "https://cache-redirector.jetbrains.com/packages.jetbrains.team/maven/p/ij/intellij-dependencies/com/jetbrains/fus/reporting/fus-api/1.0.226/fus-api-1.0.226-sources.jar", + sha256 = "26bfa6c94159b402cb0373100e6531c50f1604f9fe802486bbe34412f175c023", + downloaded_file_path = "fus-api-1.0.226-sources.jar" ) http_file( diff --git a/platform/build-scripts/BUILD.bazel b/platform/build-scripts/BUILD.bazel index 9fad2a634fce..8a877650ad3d 100644 --- a/platform/build-scripts/BUILD.bazel +++ b/platform/build-scripts/BUILD.bazel @@ -82,7 +82,7 @@ jvm_library( "@lib//:netty-tcnative-boringssl", "//platform/util/coroutines", "@community//build:zip", - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", "@lib//:platform-build_scripts-netty", "@lib//:platform-build_scripts-jetbrains-intellij-deps-coverage-reporter", diff --git a/platform/build-scripts/intellij.platform.buildScripts.iml b/platform/build-scripts/intellij.platform.buildScripts.iml index 054ecec10347..781a5e5cb92b 100644 --- a/platform/build-scripts/intellij.platform.buildScripts.iml +++ b/platform/build-scripts/intellij.platform.buildScripts.iml @@ -227,7 +227,7 @@ - + diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt index 03316255bc1a..274d0b57ac25 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt @@ -1410,7 +1410,7 @@ object CommunityLibraryLicenses { jetbrainsLibrary("ai.grazie.spell.hunspell.en"), jetbrainsLibrary("cloud-config-client"), jetbrainsLibrary("com.jetbrains.fus.reporting.ap.validation.all"), - jetbrainsLibrary("com.jetbrains.fus.reporting.api"), + jetbrainsLibrary("com.jetbrains.fus.reporting.fus-api"), jetbrainsLibrary("completion-log-events"), jetbrainsLibrary("completion-performance-kotlin"), jetbrainsLibrary("completion-ranking-cpp-exp"), diff --git a/platform/experiment/src/com/intellij/platform/experiment/ab/impl/statistic/ABExperimentOptionIdValidationRule.kt b/platform/experiment/src/com/intellij/platform/experiment/ab/impl/statistic/ABExperimentOptionIdValidationRule.kt index 9ac3f5292173..b7039b40883b 100644 --- a/platform/experiment/src/com/intellij/platform/experiment/ab/impl/statistic/ABExperimentOptionIdValidationRule.kt +++ b/platform/experiment/src/com/intellij/platform/experiment/ab/impl/statistic/ABExperimentOptionIdValidationRule.kt @@ -1,7 +1,7 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.platform.experiment.ab.impl.statistic -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.intellij.internal.statistic.eventLog.validator.ValidationResultType; import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.platform.experiment.ab.impl.ABExperimentOption diff --git a/platform/lang-impl/testSources/com/intellij/execution/impl/statistics/RunConfigurationValidatorTest.java b/platform/lang-impl/testSources/com/intellij/execution/impl/statistics/RunConfigurationValidatorTest.java index 1e8bfe717163..72c43a0552d8 100644 --- a/platform/lang-impl/testSources/com/intellij/execution/impl/statistics/RunConfigurationValidatorTest.java +++ b/platform/lang-impl/testSources/com/intellij/execution/impl/statistics/RunConfigurationValidatorTest.java @@ -4,7 +4,7 @@ package com.intellij.execution.impl.statistics; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.impl.statistics.RunConfigurationTypeUsagesCollector.RunConfigurationUtilValidator; import com.intellij.internal.statistic.eventLog.FeatureUsageData; -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType; +import com.jetbrains.fus.reporting.api.ValidationResultType; import com.intellij.internal.statistic.eventLog.validator.rules.EventContext; import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule; import com.intellij.openapi.Disposable; diff --git a/platform/platform-tests/BUILD.bazel b/platform/platform-tests/BUILD.bazel index 78a329ed3b3f..27d86f3c27ae 100644 --- a/platform/platform-tests/BUILD.bazel +++ b/platform/platform-tests/BUILD.bazel @@ -200,7 +200,7 @@ jvm_library( "//platform/pluginSystem/parser/impl", "//platform/pluginSystem/parser/impl:impl_test_lib", "//platform/platform-impl/update-checker", - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", "//platform/platform-impl/eel:ide-impl-wsl", "//platform/syntax/syntax-psi-tests:psi-tests_test_lib", diff --git a/platform/platform-tests/intellij.platform.tests.iml b/platform/platform-tests/intellij.platform.tests.iml index fd80e89da886..906fff80ed9f 100644 --- a/platform/platform-tests/intellij.platform.tests.iml +++ b/platform/platform-tests/intellij.platform.tests.iml @@ -147,7 +147,7 @@ - + diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/EventSchemeBuilderTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/EventSchemeBuilderTest.kt index e6122d7a6f98..4a19034f4afd 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/EventSchemeBuilderTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/EventSchemeBuilderTest.kt @@ -46,6 +46,62 @@ class EventSchemeBuilderTest : BasePlatformTestCase() { doFieldTest(EventFields.String("class", listOf("foo", "bar")), hashSetOf("{enum:foo|bar}")) } + fun `test generate string field with required true`() { + doFieldTest( + EventFields.String("status", listOf("open", "closed"), required = true), + hashSetOf("{enum:open|closed}", "{required:true}") + ) + } + + fun `test generate string field with required false`() { + doFieldTest( + EventFields.String("status", listOf("open", "closed"), required = false), + hashSetOf("{enum:open|closed}", "{required:false}") + ) + } + + fun `test generate string field with required unspecified`() { + doFieldTest( + EventFields.String("status", listOf("open", "closed"), required = null), + hashSetOf("{enum:open|closed}") + ) + } + + fun `test generate string field with default value`() { + doFieldTest( + EventFields.String("mode", listOf("auto", "manual"), defaultValue = "auto"), + hashSetOf("{enum:auto|manual}", "{default_value:auto}") + ) + } + + fun `test generate string field with explicitly removed default value`() { + doFieldTest( + EventFields.String("mode", listOf("auto", "manual"), defaultValue = ""), + hashSetOf("{enum:auto|manual}", "{default_value:}") + ) + } + + fun `test generate string field with no default value`() { + doFieldTest( + EventFields.String("mode", listOf("auto", "manual"), defaultValue = null), + hashSetOf("{enum:auto|manual}") + ) + } + + fun `test generate string field with required and default value`() { + doFieldTest( + EventFields.String("type", listOf("A", "B", "C"), required = true, defaultValue = "A"), + hashSetOf("{enum:A|B|C}", "{required:true}", "{default_value:A}") + ) + } + + fun `test generate string field with required false and empty default`() { + doFieldTest( + EventFields.String("type", listOf("A", "B", "C"), required = false, defaultValue = ""), + hashSetOf("{enum:A|B|C}", "{required:false}", "{default_value:}") + ) + } + fun `test generate enum field`() { doFieldTest(EventFields.Enum("enum", TestEnum::class.java), hashSetOf("{enum:FOO|BAR}")) } diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/filter/TestGroupFilterRulesBuilder.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/filter/TestGroupFilterRulesBuilder.kt index ad70ae81f820..802086f86c83 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/filter/TestGroupFilterRulesBuilder.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/filter/TestGroupFilterRulesBuilder.kt @@ -54,7 +54,7 @@ class TestGroupFilterRulesBuilder { } fun build(): EventGroupsFilterRules { - val result = HashMap>() + val result = HashMap>() for (groupId in groupIds) { val builds: List> = groupBuilds.getOrDefault(groupId, emptyList()) val versions: List = groupVersions.getOrDefault(groupId, emptyList()) diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/BaseSensitiveDataValidatorTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/BaseSensitiveDataValidatorTest.kt index 9edf6104436d..99fe8fe574a3 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/BaseSensitiveDataValidatorTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/BaseSensitiveDataValidatorTest.kt @@ -4,11 +4,11 @@ package com.intellij.internal.statistics.metadata.validator import com.intellij.internal.statistic.eventLog.EventLogBuild import com.intellij.internal.statistic.eventLog.EventLogGroup import com.intellij.internal.statistic.eventLog.FeatureUsageData -import com.intellij.internal.statistic.eventLog.validator.IGroupValidators +import com.jetbrains.fus.reporting.api.IGroupValidators import com.intellij.internal.statistic.eventLog.validator.IntellijSensitiveDataValidator -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext -import com.intellij.internal.statistic.eventLog.validator.rules.FUSRule +import com.jetbrains.fus.reporting.api.FUSRule import com.intellij.internal.statistic.eventLog.validator.rules.utils.CustomRuleProducer import com.intellij.internal.statistic.eventLog.validator.storage.FusComponentProvider import com.intellij.openapi.util.io.FileUtil diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsTest.kt index fed6978d4b48..9fde3826acdc 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsTest.kt @@ -7,7 +7,7 @@ import com.intellij.featureStatistics.ProductivityFeaturesProvider import com.intellij.featureStatistics.ProductivityFeaturesTest import com.intellij.internal.statistic.collectors.fus.FacetTypeUsageCollector import com.intellij.internal.statistic.eventLog.FeatureUsageData -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.openapi.application.ApplicationManager diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsUtilTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsUtilTest.kt index b256efbc82d4..5e83ef9dbb64 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsUtilTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/FeatureUsageCustomValidatorsUtilTest.kt @@ -1,7 +1,7 @@ // Copyright 2000-2020 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.internal.statistics.metadata.validator -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.internal.statistic.utils.PluginType @@ -106,7 +106,7 @@ private fun newContext(plugin_type: String?, plugin: String?): EventContext { class TestCheckPluginTypeCustomValidationRule(private val fromJBPlugin: Boolean) : CustomValidationRule() { override fun acceptRuleId(ruleId: String?): Boolean = true - override fun doValidate(data: String, context: EventContext): ValidationResultType { + override fun doValidate(data: String, context: EventContext): com.intellij.internal.statistic.eventLog.validator.ValidationResultType { return if (fromJBPlugin) acceptWhenReportedByJetBrainsPlugin(context) else acceptWhenReportedByPluginFromPluginRepository(context) } } \ No newline at end of file diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/LocalFileValidationRuleTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/LocalFileValidationRuleTest.kt index de7464f89831..d9ef57344f3e 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/LocalFileValidationRuleTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/LocalFileValidationRuleTest.kt @@ -2,7 +2,7 @@ package com.intellij.internal.statistics.metadata.validator import com.intellij.internal.statistic.eventLog.FeatureUsageData -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.impl.LocalFileCustomValidationRule diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/ProductivityValidatorTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/ProductivityValidatorTest.kt index a959d58d0921..654c68455c41 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/ProductivityValidatorTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/ProductivityValidatorTest.kt @@ -7,7 +7,7 @@ import com.intellij.featureStatistics.GroupDescriptor import com.intellij.featureStatistics.ProductivityFeaturesProvider import com.intellij.featureStatistics.ProductivityFeaturesTest import com.intellij.internal.statistic.eventLog.FeatureUsageData -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.openapi.application.ApplicationManager diff --git a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/SensitiveDataValidatorTest.kt b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/SensitiveDataValidatorTest.kt index 9ba1cca18f95..973adb6dbaab 100644 --- a/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/SensitiveDataValidatorTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/internal/statistics/metadata/validator/SensitiveDataValidatorTest.kt @@ -4,13 +4,13 @@ package com.intellij.internal.statistics.metadata.validator import com.intellij.internal.statistic.eventLog.EventLogBuild import com.intellij.internal.statistic.eventLog.EventLogGroup import com.intellij.internal.statistic.eventLog.FeatureUsageData -import com.intellij.internal.statistic.eventLog.validator.IGroupValidators -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType -import com.intellij.internal.statistic.eventLog.validator.emptyGroupValidators +import com.jetbrains.fus.reporting.api.IGroupValidators +import com.jetbrains.fus.reporting.api.ValidationResultType +import com.jetbrains.fus.reporting.api.emptyGroupValidators import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.impl.LocalEnumCustomValidationRule -import com.intellij.internal.statistic.eventLog.validator.rules.impl.RecorderDataValidationRule +import com.jetbrains.fus.reporting.api.RecorderDataValidationRule import com.intellij.internal.statistic.eventLog.validator.storage.FusComponentProvider import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.util.Disposer @@ -663,8 +663,8 @@ class SensitiveDataValidatorTest : BaseSensitiveDataValidatorTest() { internal inner class TestThirdPartyValidationRule : CustomValidationRule() { override fun getRuleId(): String = "third_party_rule" - override fun doValidate(data: String, context: EventContext): ValidationResultType { - return if (data == "FIRST") ValidationResultType.ACCEPTED else ValidationResultType.THIRD_PARTY + override fun doValidate(data: String, context: EventContext): com.intellij.internal.statistic.eventLog.validator.ValidationResultType { + return if (data == "FIRST") com.intellij.internal.statistic.eventLog.validator.ValidationResultType.ACCEPTED else com.intellij.internal.statistic.eventLog.validator.ValidationResultType.THIRD_PARTY } } } \ No newline at end of file diff --git a/platform/statistics/BUILD.bazel b/platform/statistics/BUILD.bazel index 1071cf61c78d..df6cbf5e0998 100644 --- a/platform/statistics/BUILD.bazel +++ b/platform/statistics/BUILD.bazel @@ -40,11 +40,11 @@ jvm_library( "//libraries/kotlinx/coroutines/core", "//libraries/kotlinx/serialization/json", "//libraries/kotlinx/serialization/core", - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", ], exports = [ - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", ] ) @@ -84,11 +84,11 @@ jvm_library( "@lib//:assert_j", "//libraries/kotlinx/serialization/json", "//libraries/kotlinx/serialization/core", - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", ], exports = [ - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", ] ) diff --git a/platform/statistics/devkit/src/com/intellij/internal/statistic/devkit/toolwindow/StatisticsEventLogToolWindow.kt b/platform/statistics/devkit/src/com/intellij/internal/statistic/devkit/toolwindow/StatisticsEventLogToolWindow.kt index 61c381e6a38c..f3f2822cfb14 100644 --- a/platform/statistics/devkit/src/com/intellij/internal/statistic/devkit/toolwindow/StatisticsEventLogToolWindow.kt +++ b/platform/statistics/devkit/src/com/intellij/internal/statistic/devkit/toolwindow/StatisticsEventLogToolWindow.kt @@ -17,15 +17,15 @@ import com.intellij.internal.statistic.devkit.actions.scheme.EditEventsTestSchem import com.intellij.internal.statistic.eventLog.EventLogListenersManager import com.intellij.internal.statistic.eventLog.EventLogSystemEvents import com.intellij.internal.statistic.eventLog.StatisticsEventLogListener -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.DICTIONARY_NOT_FOUND -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.GENERAL_DICTIONARY_ERROR -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.INCORRECT_RULE -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.PERFORMANCE_ISSUE -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.REJECTED -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.REQUIRED_FIELD_MISSED -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.UNDEFINED_RULE -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.UNREACHABLE_METADATA -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.UNREACHABLE_METADATA_OBSOLETE +import com.jetbrains.fus.reporting.api.ValidationResultType.DICTIONARY_NOT_FOUND +import com.jetbrains.fus.reporting.api.ValidationResultType.GENERAL_DICTIONARY_ERROR +import com.jetbrains.fus.reporting.api.ValidationResultType.INCORRECT_RULE +import com.jetbrains.fus.reporting.api.ValidationResultType.PERFORMANCE_ISSUE +import com.jetbrains.fus.reporting.api.ValidationResultType.REJECTED +import com.jetbrains.fus.reporting.api.ValidationResultType.REQUIRED_FIELD_MISSED +import com.jetbrains.fus.reporting.api.ValidationResultType.UNDEFINED_RULE +import com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA +import com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA_OBSOLETE import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.ActionUpdateThread diff --git a/platform/statistics/devkit/testSrc/com/intellij/internal/statistic/actions/devkit/StatisticsEventLogToolWindowTest.kt b/platform/statistics/devkit/testSrc/com/intellij/internal/statistic/actions/devkit/StatisticsEventLogToolWindowTest.kt index dd8adaf67875..24c441926ca1 100644 --- a/platform/statistics/devkit/testSrc/com/intellij/internal/statistic/actions/devkit/StatisticsEventLogToolWindowTest.kt +++ b/platform/statistics/devkit/testSrc/com/intellij/internal/statistic/actions/devkit/StatisticsEventLogToolWindowTest.kt @@ -5,11 +5,12 @@ import com.intellij.execution.process.ProcessOutputType import com.intellij.internal.statistic.devkit.toolwindow.StatisticsEventLogMessageBuilder import com.intellij.internal.statistic.devkit.toolwindow.StatisticsEventLogToolWindow import com.intellij.internal.statistic.devkit.toolwindow.StatisticsLogFilterModel -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.ACCEPTED -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.INCORRECT_RULE -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.THIRD_PARTY -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.UNDEFINED_RULE +import com.jetbrains.fus.reporting.api.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType.ACCEPTED +import com.jetbrains.fus.reporting.api.ValidationResultType.INCORRECT_RULE +import com.jetbrains.fus.reporting.api.ValidationResultType.THIRD_PARTY +import com.jetbrains.fus.reporting.api.ValidationResultType.DEFAULT_VALUE_APPLIED +import com.jetbrains.fus.reporting.api.ValidationResultType.UNDEFINED_RULE import com.intellij.testFramework.fixtures.BasePlatformTestCase import com.intellij.util.text.DateFormatUtil import com.jetbrains.fus.reporting.model.lion3.LogEvent @@ -123,7 +124,7 @@ class StatisticsEventLogToolWindowTest : BasePlatformTestCase() { } fun testAllValidationTypesUsed() { - val correctValidationTypes = setOf(ACCEPTED, THIRD_PARTY) + val correctValidationTypes = setOf(ACCEPTED, THIRD_PARTY, DEFAULT_VALUE_APPLIED) for (resultType in ValidationResultType.entries) { assertTrue("Don't forget to change toolWindow logic in case of a new value ${resultType.name} in ValidationResult", StatisticsEventLogToolWindow.rejectedValidationTypes.contains(resultType) || correctValidationTypes.contains(resultType)) diff --git a/platform/statistics/envTests/test/com/intellij/internal/statistic/envTest/scheme/EventLogMetadataServiceTest.kt b/platform/statistics/envTests/test/com/intellij/internal/statistic/envTest/scheme/EventLogMetadataServiceTest.kt index b99f391d7b18..0939e36e90d5 100644 --- a/platform/statistics/envTests/test/com/intellij/internal/statistic/envTest/scheme/EventLogMetadataServiceTest.kt +++ b/platform/statistics/envTests/test/com/intellij/internal/statistic/envTest/scheme/EventLogMetadataServiceTest.kt @@ -2,6 +2,7 @@ package com.intellij.internal.statistic.envTest.scheme import com.intellij.internal.statistic.envTest.StatisticsServiceBaseTest +import com.intellij.internal.statistic.eventLog.EventLogBuild import com.intellij.internal.statistic.eventLog.EventLogBuild.EVENT_LOG_BUILD_PRODUCER import com.intellij.internal.statistic.eventLog.connection.metadata.EventGroupFilterRules import com.intellij.internal.statistic.eventLog.connection.metadata.EventGroupFilterRules.BuildRange @@ -41,7 +42,7 @@ internal class EventLogMetadataServiceTest : StatisticsServiceBaseTest() { } fun `test load and parse metadata`() { - val expected = hashMapOf( + val expected: MutableMap> = hashMapOf( "test.group" to EventGroupFilterRules(emptyList(), listOf(VersionRange.create("3", null))), "second.test.group" to EventGroupFilterRules(listOf(BuildRange.create("191.12345", null, EVENT_LOG_BUILD_PRODUCER)), emptyList()) ) diff --git a/platform/statistics/intellij.platform.statistics.iml b/platform/statistics/intellij.platform.statistics.iml index 2390039f8a58..a7c1560376d6 100644 --- a/platform/statistics/intellij.platform.statistics.iml +++ b/platform/statistics/intellij.platform.statistics.iml @@ -37,7 +37,7 @@ - + \ No newline at end of file diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/QodanaEventsData.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/QodanaEventsData.kt index d63637f91cdd..cc42fd0b7018 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/QodanaEventsData.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/QodanaEventsData.kt @@ -1,7 +1,7 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.internal.statistic.eventLog -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.util.PlatformUtils import java.util.regex.Pattern diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/BaseEventFields.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/BaseEventFields.kt index 13f74b9b5d7c..ff40835c92e7 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/BaseEventFields.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/BaseEventFields.kt @@ -21,6 +21,10 @@ sealed class EventField { open val shouldBeAnonymized: Boolean get() = false + open val required: Boolean? = null + + open val defaultValue: String? = null + abstract fun addData(fuData: FeatureUsageData, value: T) @Contract(pure = true) @@ -50,11 +54,17 @@ abstract class StringEventField(override val name: String) : PrimitiveEventField data class ValidatedByAllowedValues(@NonNls @EventFieldName override val name: String, val allowedValues: List, - @NonNls override val description: String? = null) : StringEventField(name) { + @NonNls override val description: String? = null, + override val required: Boolean? = null, + override val defaultValue: String? = null) : StringEventField(name) { constructor(name: String, allowedValues: List) : this(name, allowedValues, null) override val validationRule: List - get() = listOf("{enum:${allowedValues.joinToString("|")}}") + get() = buildList { + add("{enum:${allowedValues.joinToString("|")}}") + required?.let { value -> add("{required:$value}") } + defaultValue?.let { value -> add("{default_value:$value}") } + } } data class ValidatedByEnum(@NonNls @EventFieldName override val name: String, diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/EventFields.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/EventFields.kt index b364da940533..8388a9129941 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/EventFields.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/events/EventFields.kt @@ -107,13 +107,20 @@ object EventFields { * Creates a field that allows only a specific list of values * @param name name of the field * @param allowedValues list of allowed values, e.g [ "bool", "int", "float"] + * @param description optional description of the field + * @param required field whether the field is required + * @param defaultValue optional default value for the field */ @JvmStatic - fun String(@NonNls @EventFieldName name: String, allowedValues: List, @NonNls description: String?): StringEventField = - StringEventField.ValidatedByAllowedValues(name, allowedValues, description) - - @JvmStatic - fun String(@NonNls @EventFieldName name: String, allowedValues: List): StringEventField = String(name, allowedValues, null) + @JvmOverloads + fun String( + @NonNls @EventFieldName name: String, + allowedValues: List, + @NonNls description: String? = null, + required: Boolean? = null, + defaultValue: String? = null, + ): StringEventField = + StringEventField.ValidatedByAllowedValues(name, allowedValues, description, required, defaultValue) @JvmStatic fun Int(@NonNls @EventFieldName name: String, @NonNls description: String?): IntEventField = IntEventField(name, description) diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/uploader/EventLogExternalUploader.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/uploader/EventLogExternalUploader.kt index eab9ba09bc7f..941d62835c86 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/uploader/EventLogExternalUploader.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/uploader/EventLogExternalUploader.kt @@ -154,7 +154,7 @@ object EventLogExternalUploader { findLibraryByClass(IllegalCallableAccessException::class.java), // add kotlin-reflect findLibraryByClass(EventGroupsFilterRules::class.java), // validation library findLibraryByClass(StatsConnectionSettings::class.java), // com.jetbrains.fus.reporting.model - findLibraryByClass(MetadataStorage::class.java), // com.jetbrains.fus.reporting.api + findLibraryByClass(MetadataStorage::class.java), // com.jetbrains.fus.reporting.fus-api findLibraryByClass(Json::class.java), // kotlinx.serialization.json findLibraryByClass(StringFormat::class.java) // kotlinx.serialization ) diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/IntellijSensitiveDataValidator.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/IntellijSensitiveDataValidator.kt index 4882c2303c22..542adf4c4065 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/IntellijSensitiveDataValidator.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/IntellijSensitiveDataValidator.kt @@ -9,7 +9,7 @@ import com.intellij.internal.statistic.eventLog.validator.rules.beans.EventGroup import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRuleFactory import com.intellij.internal.statistic.eventLog.validator.rules.impl.EnumValidationRule -import com.intellij.internal.statistic.eventLog.validator.rules.impl.RecorderDataValidationRule +import com.jetbrains.fus.reporting.api.RecorderDataValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.impl.RegexpValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.impl.TestModeValidationRule import com.intellij.internal.statistic.eventLog.validator.storage.FusComponentProvider @@ -19,6 +19,10 @@ import com.intellij.internal.statistic.utils.StatisticsUtil import com.intellij.openapi.application.ApplicationManager import com.jetbrains.fus.reporting.MessageBus import com.jetbrains.fus.reporting.MetadataStorage +import com.jetbrains.fus.reporting.api.IEventContext +import com.jetbrains.fus.reporting.api.IEventGroupRules +import com.jetbrains.fus.reporting.api.IEventGroupsFilterRules +import com.jetbrains.fus.reporting.api.IGroupValidators import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval @@ -236,5 +240,25 @@ private class BlindSensitiveDataValidator( return context.eventData as MutableMap } + override fun guaranteeRejectedValuesReplacedWithDefaultValuesInEventData( + eventData: MutableMap, + context: IEventContext, + groupRules: IEventGroupRules?, + groupVersion: String, + ): MutableMap { + @Suppress("UNCHECKED_CAST") + return context.eventData as MutableMap + } + + override fun guaranteeRequiredFieldsInEventData( + eventData: MutableMap, + context: IEventContext, + groupRules: IEventGroupRules?, + groupVersion: String, + ): MutableMap { + @Suppress("UNCHECKED_CAST") + return context.eventData as MutableMap + } + override suspend fun isGroupAllowed(group: EventLogGroup): Boolean = true } \ No newline at end of file diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/ValidationResultType.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/ValidationResultType.kt new file mode 100644 index 000000000000..56048e81419e --- /dev/null +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/ValidationResultType.kt @@ -0,0 +1,74 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.internal.statistic.eventLog.validator + +import org.jetbrains.annotations.NonNls + +enum class ValidationResultType( + @field:NonNls val description: String, + /** + * Indicates if we should return the result or continue iterating through rules list, + * + * e.g. we want to check other rules if resultType==UNDEFINED_RULE + * but we want to stop iterating if resultType==ACCEPTED + */ + val isFinal: Boolean, +) { + ACCEPTED("accepted", true), + THIRD_PARTY("third.party", false), + REJECTED("validation.unmatched_rule", false), + INCORRECT_RULE("validation.incorrect_rule", false), + UNDEFINED_RULE("validation.undefined_rule", false), + UNREACHABLE_METADATA("validation.unreachable_metadata", true), + DICTIONARY_NOT_FOUND("validation.dictionary_not_found", true), + GENERAL_DICTIONARY_ERROR("validation.general_dictionary_error", true), + + // renamed into UNREACHABLE_METADATA, needed for correct server validation + @Deprecated("") + UNREACHABLE_METADATA_OBSOLETE("validation.unreachable.whitelist", true), + PERFORMANCE_ISSUE("validation.performance_issue", true), + REQUIRED_FIELD_MISSED("validation.required_field_missed", true), + DEFAULT_VALUE_APPLIED("validation.default_value_applied", true); + + companion object { + @JvmField + val VALIDATION_TYPES: Set = values().map { obj: ValidationResultType -> obj.description }.toSet() + + @JvmStatic + fun toFusApiResultType( + resultType: ValidationResultType, + ): com.jetbrains.fus.reporting.api.ValidationResultType = + when (resultType) { + ACCEPTED -> com.jetbrains.fus.reporting.api.ValidationResultType.ACCEPTED + THIRD_PARTY -> com.jetbrains.fus.reporting.api.ValidationResultType.THIRD_PARTY + INCORRECT_RULE -> com.jetbrains.fus.reporting.api.ValidationResultType.INCORRECT_RULE + UNDEFINED_RULE -> com.jetbrains.fus.reporting.api.ValidationResultType.UNDEFINED_RULE + UNREACHABLE_METADATA -> com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA + DICTIONARY_NOT_FOUND -> com.jetbrains.fus.reporting.api.ValidationResultType.DICTIONARY_NOT_FOUND + GENERAL_DICTIONARY_ERROR -> com.jetbrains.fus.reporting.api.ValidationResultType.GENERAL_DICTIONARY_ERROR + UNREACHABLE_METADATA_OBSOLETE -> com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA_OBSOLETE + PERFORMANCE_ISSUE -> com.jetbrains.fus.reporting.api.ValidationResultType.PERFORMANCE_ISSUE + REQUIRED_FIELD_MISSED -> com.jetbrains.fus.reporting.api.ValidationResultType.REQUIRED_FIELD_MISSED + DEFAULT_VALUE_APPLIED -> com.jetbrains.fus.reporting.api.ValidationResultType.DEFAULT_VALUE_APPLIED + REJECTED -> com.jetbrains.fus.reporting.api.ValidationResultType.REJECTED + } + + @JvmStatic + fun fromFusApiResultType( + resultType: com.jetbrains.fus.reporting.api.ValidationResultType, + ): ValidationResultType = + when (resultType) { + com.jetbrains.fus.reporting.api.ValidationResultType.ACCEPTED -> ACCEPTED + com.jetbrains.fus.reporting.api.ValidationResultType.THIRD_PARTY -> THIRD_PARTY + com.jetbrains.fus.reporting.api.ValidationResultType.INCORRECT_RULE -> INCORRECT_RULE + com.jetbrains.fus.reporting.api.ValidationResultType.UNDEFINED_RULE -> UNDEFINED_RULE + com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA -> UNREACHABLE_METADATA + com.jetbrains.fus.reporting.api.ValidationResultType.DICTIONARY_NOT_FOUND -> DICTIONARY_NOT_FOUND + com.jetbrains.fus.reporting.api.ValidationResultType.GENERAL_DICTIONARY_ERROR -> GENERAL_DICTIONARY_ERROR + com.jetbrains.fus.reporting.api.ValidationResultType.UNREACHABLE_METADATA_OBSOLETE -> UNREACHABLE_METADATA_OBSOLETE + com.jetbrains.fus.reporting.api.ValidationResultType.PERFORMANCE_ISSUE -> PERFORMANCE_ISSUE + com.jetbrains.fus.reporting.api.ValidationResultType.REQUIRED_FIELD_MISSED -> REQUIRED_FIELD_MISSED + com.jetbrains.fus.reporting.api.ValidationResultType.DEFAULT_VALUE_APPLIED -> DEFAULT_VALUE_APPLIED + com.jetbrains.fus.reporting.api.ValidationResultType.REJECTED -> REJECTED + } + } +} \ No newline at end of file diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/ComposerValidationRule.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/ComposerValidationRule.kt index 75f2acdc3311..215c65ca0564 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/ComposerValidationRule.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/ComposerValidationRule.kt @@ -3,14 +3,14 @@ package com.intellij.internal.statistic.eventLog.validator.rules.impl import com.intellij.internal.statistic.eventLog.validator.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext -import com.intellij.internal.statistic.eventLog.validator.rules.FUSRule +import com.jetbrains.fus.reporting.api.FUSRule class ComposerValidationRule(val rules: List) { fun doValidate(data: String, context: EventContext): ValidationResultType { for (rule in rules) { val validationResultType = rule.validate(data, context) - if (validationResultType == ValidationResultType.ACCEPTED) + if (ValidationResultType.fromFusApiResultType(validationResultType) == ValidationResultType.ACCEPTED) return ValidationResultType.ACCEPTED } return ValidationResultType.REJECTED diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomValidationRule.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomValidationRule.java index 30f50a63e577..b3aa377befae 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomValidationRule.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomValidationRule.java @@ -1,12 +1,12 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.internal.statistic.eventLog.validator.rules.impl; -import com.intellij.internal.statistic.eventLog.validator.IEventContext; +import com.jetbrains.fus.reporting.api.IEventContext; import com.intellij.internal.statistic.eventLog.validator.IntellijSensitiveDataValidator; import com.intellij.internal.statistic.eventLog.validator.ValidationResultType; import com.intellij.internal.statistic.eventLog.validator.rules.EventContext; -import com.intellij.internal.statistic.eventLog.validator.rules.FUSRule; -import com.intellij.internal.statistic.eventLog.validator.rules.PayloadKey; +import com.jetbrains.fus.reporting.api.FUSRule; +import com.jetbrains.fus.reporting.api.PayloadKey; import com.intellij.internal.statistic.eventLog.validator.rules.PerformanceCareRule; import com.intellij.internal.statistic.utils.PluginInfo; import com.intellij.internal.statistic.utils.PluginInfoDetectorKt; @@ -127,14 +127,21 @@ public abstract class CustomValidationRule extends PerformanceCareRule implement return context.eventData.containsKey(name) ? context.eventData.get(name).toString() : null; } - protected abstract @NotNull ValidationResultType doValidate(@NotNull String data, @NotNull EventContext context); + /** + * @deprecated This method was added for compatibility with existing custom rules. + * Use {@link #doValidate(String, IEventContext)} instead. + */ + @Deprecated(forRemoval = true) + protected @NotNull ValidationResultType doValidate(@NotNull String data, @NotNull EventContext context) { + return ValidationResultType.REJECTED; + } @Override - protected @NotNull ValidationResultType doValidate(@NotNull String data, @NotNull IEventContext context) { + protected @NotNull com.jetbrains.fus.reporting.api.ValidationResultType doValidate(@NotNull String data, @NotNull IEventContext context) { if (context instanceof EventContext) { - return this.doValidate(data, (EventContext)context); + return ValidationResultType.toFusApiResultType(this.doValidate(data, (EventContext)context)); } else { - return ValidationResultType.REJECTED; + return com.jetbrains.fus.reporting.api.ValidationResultType.REJECTED; } } } diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/utils/CustomRuleProducer.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/utils/CustomRuleProducer.java index 875063b2243a..00e0a1fd43fe 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/utils/CustomRuleProducer.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/rules/utils/CustomRuleProducer.java @@ -1,7 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.internal.statistic.eventLog.validator.rules.utils; -import com.intellij.internal.statistic.eventLog.validator.rules.FUSRule; +import com.jetbrains.fus.reporting.api.FUSRule; import com.intellij.internal.statistic.eventLog.validator.rules.beans.EventGroupContextData; import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule; import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRuleFactory; diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/CompositeValidationRulesStorage.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/CompositeValidationRulesStorage.kt index fe7abc29a3c6..43f77b99a1b5 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/CompositeValidationRulesStorage.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/CompositeValidationRulesStorage.kt @@ -2,10 +2,10 @@ package com.intellij.internal.statistic.eventLog.validator.storage import com.intellij.internal.statistic.eventLog.EventLogBuild -import com.intellij.internal.statistic.eventLog.validator.IEventGroupRules -import com.intellij.internal.statistic.eventLog.validator.IEventGroupsFilterRules -import com.intellij.internal.statistic.eventLog.validator.IGroupValidators -import com.intellij.internal.statistic.eventLog.validator.rules.impl.RecorderDataValidationRule +import com.jetbrains.fus.reporting.api.IEventGroupRules +import com.jetbrains.fus.reporting.api.IEventGroupsFilterRules +import com.jetbrains.fus.reporting.api.IGroupValidators +import com.jetbrains.fus.reporting.api.RecorderDataValidationRule import com.jetbrains.fus.reporting.MetadataStorage import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/FusComponentProvider.kt b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/FusComponentProvider.kt index a8db7bb58acb..77d0fc24fc68 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/FusComponentProvider.kt +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/FusComponentProvider.kt @@ -21,10 +21,10 @@ import com.intellij.internal.statistic.eventLog.connection.metadata.EventLogMeta import com.intellij.internal.statistic.eventLog.connection.metadata.EventLogMetadataParseException import com.intellij.internal.statistic.eventLog.connection.metadata.EventLogMetadataUpdateError import com.intellij.internal.statistic.eventLog.connection.metadata.EventLogMetadataUpdateStage -import com.intellij.internal.statistic.eventLog.validator.IEventGroupRules -import com.intellij.internal.statistic.eventLog.validator.IEventGroupsFilterRules -import com.intellij.internal.statistic.eventLog.validator.IGroupValidators -import com.intellij.internal.statistic.eventLog.validator.rules.impl.RecorderDataValidationRule +import com.jetbrains.fus.reporting.api.IEventGroupRules +import com.jetbrains.fus.reporting.api.IEventGroupsFilterRules +import com.jetbrains.fus.reporting.api.IGroupValidators +import com.jetbrains.fus.reporting.api.RecorderDataValidationRule import com.intellij.internal.statistic.eventLog.validator.rules.utils.CustomRuleProducer import com.intellij.internal.statistic.eventLog.validator.storage.persistence.EventLogMetadataSettingsPersistence import com.intellij.internal.statistic.utils.StatisticsUploadAssistant diff --git a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/ValidationRulesStorageProvider.java b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/ValidationRulesStorageProvider.java index 4ce4494a2d63..4c385fdb5f2c 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/ValidationRulesStorageProvider.java +++ b/platform/statistics/src/com/intellij/internal/statistic/eventLog/validator/storage/ValidationRulesStorageProvider.java @@ -14,7 +14,7 @@ public final class ValidationRulesStorageProvider { public static @NotNull IntellijValidationRulesStorage newStorage(@NotNull String recorderId) { return new IntellijValidationRulesStorage() { @Override - public @Nullable EventGroupRules getGroupRules(@NotNull String groupId) { return EventGroupRules.EMPTY; } + public @Nullable EventGroupRules getGroupRules(@NotNull String groupId) { return EventGroupRules.Companion.getEMPTY(); } @Override public boolean update() { return false; } diff --git a/platform/statistics/uploader/BUILD.bazel b/platform/statistics/uploader/BUILD.bazel index 5421b5f58f17..2af3af45b818 100644 --- a/platform/statistics/uploader/BUILD.bazel +++ b/platform/statistics/uploader/BUILD.bazel @@ -20,7 +20,7 @@ jvm_library( "//libraries/jackson/jackson", "//libraries/jackson/databind", "//libraries/jackson/module-kotlin:libraries-jackson-module-kotlin", - "@lib//:com-jetbrains-fus-reporting-api", + "@lib//:com-jetbrains-fus-reporting-fus-api", "@lib//:com-jetbrains-fus-reporting-ap-validation-all", ], exports = ["//platform/statistics/config"] diff --git a/platform/statistics/uploader/intellij.platform.statistics.uploader.iml b/platform/statistics/uploader/intellij.platform.statistics.uploader.iml index 4e82797a1459..4e86474ad230 100644 --- a/platform/statistics/uploader/intellij.platform.statistics.uploader.iml +++ b/platform/statistics/uploader/intellij.platform.statistics.uploader.iml @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/platform/statistics/uploader/src/com/intellij/internal/statistic/eventLog/connection/metadata/EventLogMetadataUtils.java b/platform/statistics/uploader/src/com/intellij/internal/statistic/eventLog/connection/metadata/EventLogMetadataUtils.java index c2a03ba36480..cb64a5ce9f5b 100644 --- a/platform/statistics/uploader/src/com/intellij/internal/statistic/eventLog/connection/metadata/EventLogMetadataUtils.java +++ b/platform/statistics/uploader/src/com/intellij/internal/statistic/eventLog/connection/metadata/EventLogMetadataUtils.java @@ -137,7 +137,7 @@ public final class EventLogMetadataUtils { } Map lastModifiedMap = new HashMap<>(); - for(String dictionary : dictionaryList.dictionaries) { + for(String dictionary : dictionaryList.getDictionaries()) { try { StatsRequestResult result = StatsHttpRequests.head(baseUrl + dictionary, settings).send(r -> r.lastModified()); lastModifiedMap.put(dictionary, result.getResult()); diff --git a/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerActionsCollector.kt b/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerActionsCollector.kt index d3599934bc86..1bae6c5aaf59 100644 --- a/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerActionsCollector.kt +++ b/platform/xdebugger-impl/shared/src/com/intellij/platform/debugger/impl/shared/XDebuggerActionsCollector.kt @@ -11,6 +11,7 @@ import com.intellij.internal.statistic.eventLog.events.EventFields.String import com.intellij.internal.statistic.eventLog.events.EventFields.StringListValidatedByCustomRule import com.intellij.internal.statistic.eventLog.events.EventId import com.intellij.internal.statistic.eventLog.events.EventId1 +import com.intellij.internal.statistic.eventLog.validator.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.ValidationResultType.ACCEPTED import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.internal.statistic.eventLog.validator.rules.impl.CustomValidationRule @@ -98,7 +99,7 @@ internal class FrameTypeValidator : CustomValidationRule() { override fun doValidate(data: String, context: EventContext) = when (data) { UNKNOWN_TYPE -> ACCEPTED - else -> fileTypeValidator.validate(data, context) + else -> ValidationResultType.fromFusApiResultType(fileTypeValidator.validate(data, context)) } } diff --git a/plugins/filePrediction/test/com/intellij/filePrediction/predictor/FilePredictorFeaturesValidatorTest.kt b/plugins/filePrediction/test/com/intellij/filePrediction/predictor/FilePredictorFeaturesValidatorTest.kt index 0d376aceb6a5..547514a7b96f 100644 --- a/plugins/filePrediction/test/com/intellij/filePrediction/predictor/FilePredictorFeaturesValidatorTest.kt +++ b/plugins/filePrediction/test/com/intellij/filePrediction/predictor/FilePredictorFeaturesValidatorTest.kt @@ -2,7 +2,7 @@ package com.intellij.filePrediction.predictor import com.intellij.filePrediction.logger.FilePredictionFeaturesValidator -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.testFramework.builders.ModuleFixtureBuilder import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/statistics/MavenPluginCollectorTest.kt b/plugins/maven/src/test/java/org/jetbrains/idea/maven/statistics/MavenPluginCollectorTest.kt index 7b08bb8d0723..9d50bd419554 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/statistics/MavenPluginCollectorTest.kt +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/statistics/MavenPluginCollectorTest.kt @@ -2,7 +2,7 @@ package org.jetbrains.idea.maven.statistics import com.intellij.internal.statistic.FUCollectorTestCase.collectProjectStateCollectorEvents -import com.intellij.internal.statistic.eventLog.validator.ValidationResultType +import com.jetbrains.fus.reporting.api.ValidationResultType import com.intellij.internal.statistic.eventLog.validator.rules.EventContext import com.intellij.maven.testFramework.MavenImportingTestCase import kotlinx.coroutines.runBlocking diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/fus/ReworkedTerminalUsageCollector.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/fus/ReworkedTerminalUsageCollector.kt index 8a1cbe849280..54535adedeb0 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/fus/ReworkedTerminalUsageCollector.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/fus/ReworkedTerminalUsageCollector.kt @@ -278,7 +278,7 @@ internal class TerminalFocusRule : CustomValidationRule() { return ValidationResultType.ACCEPTED } else { - return toolWindowRule.validate(data, context) + return ValidationResultType.fromFusApiResultType(toolWindowRule.validate(data, context)) } } }