public static @Nullable @Nls String generateDoc(final @NotNull PsiElement element,
                                                  final @NotNull JsonSchemaObject rootSchema,
                                                  final boolean preferShort,
                                                  @Nullable String forcedPropName) {
    final JsonLikePsiWalker walker = JsonLikePsiWalker.getWalker(element, rootSchema);
    if (walker == null) return null;

    final PsiElement checkable = walker.findElementToCheck(element);
    if (checkable == null) return null;
    final JsonPointerPosition position = walker.findPosition(checkable, true);
    if (position == null) return null;
    if (forcedPropName != null) {
      if (isWhitespaceOrComment(element)) {
        position.addFollowingStep(forcedPropName);
      }
      else {
        if (position.isEmpty()) {
          return null;
        }
        if (position.isArray(position.size() - 1)) return null;
        position.replaceStep(position.size() - 1, forcedPropName);
      }
    }
    final Collection<JsonSchemaObject> schemas =
      new JsonSchemaResolver(element.getProject(), rootSchema, position, walker.createValueAdapter(element)).resolve();

    String htmlDescription = null;
    boolean deprecated = false;
    List<JsonSchemaType> possibleTypes = new ArrayList<>();
    for (JsonSchemaObject schema : schemas) {
      if (htmlDescription == null) {
        htmlDescription = getBestDocumentation(preferShort, schema);
        String message = schema.getDeprecationMessage();
        if (message != null) {
          if (htmlDescription == null) htmlDescription = message;
          else htmlDescription = message + "<br/>" + htmlDescription;
          deprecated = true;
        }
      }
      if (schema.getType() != null && schema.getType() != JsonSchemaType._any) {
        possibleTypes.add(schema.getType());
      }
      else if (schema.getTypeVariants() != null) {
        possibleTypes.addAll(schema.getTypeVariants());
      }
      else {
        final JsonSchemaType guessedType = guessType(schema);
        if (guessedType != null) {
          possibleTypes.add(guessedType);
        }
      }
    }

    return appendNameTypeAndApi(position, getThirdPartyApiInfo(element, rootSchema), possibleTypes, htmlDescription, deprecated, preferShort);
  }
public static @Nullable @Nls String generateDoc(final @NotNull PsiElement element,
                                                  final @NotNull JsonSchemaObject rootSchema,
                                                  final boolean preferShort,
                                                  @Nullable String forcedPropName)