public static @Nullable PsiBuilder.Marker parseBlockLazy(@NotNull PsiBuilder builder,
                                                 @NotNull IElementType leftBrace,
                                                 @NotNull IElementType rightBrace,
                                                 @NotNull IElementType codeBlock) {
    if (builder.getTokenType() != leftBrace) return null;

    PsiBuilder.Marker marker = builder.mark();

    builder.advanceLexer();

    int braceCount = 1;

    while (braceCount > 0 && !builder.eof()) {
      IElementType tokenType = builder.getTokenType();
      if (tokenType == leftBrace) {
        braceCount++;
      }
      else if (tokenType == rightBrace) {
        braceCount--;
      }
      builder.advanceLexer();
    }

    marker.collapse(codeBlock);

    if (braceCount > 0) {
      marker.setCustomEdgeTokenBinders(null, WhitespacesBinders.GREEDY_RIGHT_BINDER);
    }

    return marker;
  }
public static @Nullable PsiBuilder.Marker parseBlockLazy(@NotNull PsiBuilder builder,
                                                 @NotNull IElementType leftBrace,
                                                 @NotNull IElementType rightBrace,
                                                 @NotNull IElementType codeBlock)