private static boolean isObjectLiteral()

in web/jscs/src/main/java/com/intellij/lang/javascript/linter/jscs/config/JscsConfigFileAnnotator.java [188:242]


    private static boolean isObjectLiteral(@NotNull Map<ValueType, JscsOptionDescriptor.ValueDescription> map,
                                           @NotNull ProblemSink holder,
                                           @NotNull JsonValue value,
                                           @NotNull String parentName,
                                           @NotNull Set<? super JsonProperty> visited) {
      final JsonObject jsonObj = ObjectUtils.tryCast(value, JsonObject.class);
      if (jsonObj == null) return false;
      final JscsOptionDescriptor.ValueDescription valDescriptor = map.get(ValueType.obj);
      if (valDescriptor.equals(JscsOptionDescriptor.ValueDescription.NO_VALIDATION)) return true;
      final JscsOptionDescriptor.ValuesObject descriptor = (JscsOptionDescriptor.ValuesObject)valDescriptor;
      final String mandatory = descriptor.getMandatory();
      if (mandatory != null) {
        if (jsonObj.findProperty(mandatory) == null) {
          createWarningAnnotation(holder, value, "Required property '" + mandatory + "' should be defined");
        }
      }
      if (descriptor.isMustNotBeEmpty()) {
        if (jsonObj.getPropertyList().isEmpty()) {
          createWarningAnnotation(holder, value, "At least one of the properties should be defined");
        }
      }
      iterateOptions(jsonObj, holder, new OptionChecker<Object>() {
        @Override
        public Object isValidName(@NotNull String name) {
          return descriptor.getFields().containsKey(name.trim()) ? true : null;
        }

        @Override
        public void processOption(@NotNull JsonProperty property, @NotNull Object parsedOption, @NotNull ProblemSink holder) {
          final String trim = property.getName().trim();
          final JscsOptionDescriptor field = descriptor.getFields().get(trim);
          if (field == null) return;
          JsonValue value = property.getValue();
          if (value == null) return;

          final List<ValueType> types = new ArrayList<>(field.getTypes().keySet());
          if (field.canBe(ValueType.bool) && isBooleanLiteral(types, holder, value)) return;
          if (field.canBe(ValueType.true_or_false) && isTrueOrFalse(value)) return;

          if (customValidation(field.getTypes(), types, value, holder)) return;
          if (field.canBe(ValueType.num_int) && isIntLiteral(types, holder, value)) return;
          if (field.canBe(ValueType.str) && isStringLiteral(field.getTypes(), types, holder, value)) return;
          if (field.canBe(ValueType.array) && isArray(field.getTypes(), holder, value, null)) return;
          if (field.canBe(ValueType.obj) && isObjectLiteral(field.getTypes(), holder, value, trim, visited)) return;
          createExpectedTypesAnnotation(types, holder, value);
        }

        @NotNull
        @Override
        public String getOptionClassName() {
          return parentName;
        }
      }, visited);
      return true;
    }