diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/LangCustomRuleValidator.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/LangCustomRuleValidator.java
new file mode 100644
index 000000000000..457f64775bb3
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/LangCustomRuleValidator.java
@@ -0,0 +1,27 @@
+// Copyright 2000-2019 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.statistic.collectors.fus;
+
+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.CustomUtilsWhiteListRule;
+import com.intellij.internal.statistic.utils.PluginInfoDetectorKt;
+import com.intellij.lang.Language;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class LangCustomRuleValidator extends CustomUtilsWhiteListRule {
+ @Override
+ public boolean acceptRuleId(@Nullable String ruleId) {
+ return "lang".equals(ruleId);
+ }
+
+ @NotNull
+ @Override
+ protected ValidationResultType doValidate(@NotNull String data, @NotNull EventContext context) {
+ if (data.equals("third.party")) return ValidationResultType.ACCEPTED;
+
+ final Language language = Language.findLanguageByID(data);
+ return language != null && PluginInfoDetectorKt.getPluginInfo(language.getClass()).isSafeToReport() ?
+ ValidationResultType.ACCEPTED : ValidationResultType.REJECTED;
+ }
+}
diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/PluginIdRuleValidator.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/PluginIdRuleValidator.java
new file mode 100644
index 000000000000..c9d4d659bd87
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/PluginIdRuleValidator.java
@@ -0,0 +1,21 @@
+// Copyright 2000-2019 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.statistic.collectors.fus;
+
+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.CustomUtilsWhiteListRule;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class PluginIdRuleValidator extends CustomUtilsWhiteListRule {
+ @Override
+ public boolean acceptRuleId(@Nullable String ruleId) {
+ return "plugin".equals(ruleId);
+ }
+
+ @NotNull
+ @Override
+ protected ValidationResultType doValidate(@NotNull String data, @NotNull EventContext context) {
+ return isPluginFromPluginRepository(data) ? ValidationResultType.ACCEPTED : ValidationResultType.REJECTED;
+ }
+}
diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomUtilsWhiteListRule.java b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomUtilsWhiteListRule.java
index 72897df47ba5..20a7dbe0167d 100644
--- a/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomUtilsWhiteListRule.java
+++ b/platform/platform-impl/src/com/intellij/internal/statistic/eventLog/validator/rules/impl/CustomUtilsWhiteListRule.java
@@ -21,12 +21,19 @@ public abstract class CustomUtilsWhiteListRule extends PerformanceCareRule imple
protected static ValidationResultType acceptWhenReportedByJetbrainsPlugin(@NotNull EventContext context) {
if ("PLATFORM".equals(context.eventData.get("plugin_type"))) return ValidationResultType.ACCEPTED;
Object plugin = context.eventData.get("plugin");
- if (plugin != null) {
- PluginId pluginId = PluginId.findId(plugin.toString());
- if (pluginId != null && PluginInfoDetectorKt.getPluginInfoById(pluginId).isDevelopedByJetBrains()) {
- return ValidationResultType.ACCEPTED;
- }
+ if (plugin != null && isPluginDevelopedByJB(plugin.toString())) {
+ return ValidationResultType.ACCEPTED;
}
return ValidationResultType.REJECTED;
}
+
+ protected static boolean isPluginDevelopedByJB(@NotNull String plugin) {
+ final PluginId pluginId = PluginId.findId(plugin);
+ return pluginId != null && PluginInfoDetectorKt.getPluginInfoById(pluginId).isDevelopedByJetBrains();
+ }
+
+ protected static boolean isPluginFromPluginRepository(@NotNull String plugin) {
+ final PluginId pluginId = PluginId.findId(plugin);
+ return pluginId != null && PluginInfoDetectorKt.getPluginInfoById(pluginId).isSafeToReport();
+ }
}
diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml
index 500436d8cae9..96ee6690c564 100644
--- a/platform/platform-resources/src/META-INF/LangExtensions.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensions.xml
@@ -922,6 +922,8 @@
+
+