in src/main/java/com/intellij/internal/statistic/eventLog/validator/rules/beans/EventGroupRules.java [89:137]
private EventDataField validateEventData(@NotNull String key,
@Nullable Object data,
@NotNull EventContext context,
@NotNull String fieldName) {
if (data == null) return new EventDataField(fieldName, REJECTED.getDescription());
if (data instanceof String && VALIDATION_TYPES.contains(data)) return new EventDataField(fieldName, data);
if (myExcludedFields.contains(key)) return new EventDataField(fieldName, data);
if (data instanceof Map<?, ?>) {
HashMap<Object, Object> validatedData = new HashMap<>();
for (Map.Entry<?, ?> entry : ((Map<?, ?>) data).entrySet()) {
Object entryKey = entry.getKey();
if (entryKey instanceof String) {
EventDataField field = validateEventData(key + "." + entryKey, entry.getValue(), context, (String) entryKey);
validatedData.put(field.getName(), field.getValue());
} else {
validatedData.put(entryKey, REJECTED.getDescription());
}
}
String validatedFieldName = fieldName;
if (!validatedData.isEmpty() &&
validatedData.keySet().stream().allMatch(value -> value instanceof String && UNDEFINED_RULE.getDescription().equals(value))) {
validatedFieldName = UNDEFINED_RULE.getDescription();
}
return new EventDataField(validatedFieldName, validatedData);
}
if (data instanceof List<?>) {
List<Object> validatedData = new ArrayList<>();
List<String> fieldNames = new ArrayList<>();
for (Object value : ((List<?>) data)) {
EventDataField validatedField = validateEventData(key, value, context, fieldName);
validatedData.add(validatedField.getValue());
fieldNames.add(validatedField.getName());
}
String validatedFieldName = fieldName;
if (!validatedData.isEmpty() &&
fieldNames.stream().allMatch(value -> UNDEFINED_RULE.getDescription().equals(value))) {
validatedFieldName = UNDEFINED_RULE.getDescription();
}
return new EventDataField(validatedFieldName, validatedData);
}
FUSRule[] rules = eventDataRules.get(key);
if (rules == null || rules.length == 0) {
return new EventDataField(UNDEFINED_RULE.getDescription(), UNDEFINED_RULE.getDescription());
}
return new EventDataField(fieldName, validateValue(data, context, rules));
}