private EventDataField validateEventData()

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));
  }