static @Nullable PsiUpdateModCommandQuickFix create(@NotNull PsiExpression originalExpression) {
      if (!(originalExpression instanceof PsiMethodCallExpression callExpression)) {
        return null;
      }

      FormatDecode.FormatArgument formatArgument =
        FormatDecode.FormatArgument.extract(callExpression, List.of("format"), List.of("String"), true);
      if (formatArgument == null || formatArgument.getIndex() != 1) {
        return null;
      }
      PsiExpression expression = formatArgument.getExpression();
      if (!(expression instanceof PsiLiteralExpression literalExpression && literalExpression.getText() != null)) {
        return null;
      }
      PsiExpression[] arguments = Objects.requireNonNull(callExpression.getArgumentList()).getExpressions();
      int argumentCount = arguments.length - formatArgument.getIndex();
      if (!(literalExpression.getValue() instanceof String formatterString)) {
        return null;
      }
      FormatDecode.Validator[] validators;
      try {
        validators = FormatDecode.decodeNoVerify(formatterString, argumentCount);
      }
      catch (FormatDecode.IllegalFormatException e) {
        return null;
      }

      if (argumentCount != validators.length) return null;
      Map<TextRange, Integer> result = new HashMap<>();
      for (int i = 0; i < validators.length; i++) {
        int index = formatArgument.getIndex() + i;
        if (index >= arguments.length) return null;

        FormatDecode.Validator metaValidator = validators[i];
        if (metaValidator == null) continue;
        Collection<FormatDecode.Validator> unpacked = metaValidator instanceof FormatDecode.MultiValidator multi ?
                                                      multi.getValidators() : List.of(metaValidator);
        if (unpacked.size() != 1) return null;
        FormatDecode.Validator validator = unpacked.iterator().next();
        if (validator == null) return null;
        PsiExpression argument = arguments[index];
        if (!possibleToConvert(validator, argument)) return null;
        TextRange stringRange = validator.getRange();
        if (stringRange == null) return null;
        TextRange range = ExpressionUtils.findStringLiteralRange(expression, stringRange.getStartOffset(),
                                                                 stringRange.getEndOffset());
        if (range == null) return null;
        result.put(range, index);
      }

      return new StringFormatArgumentToLogCallFix(result, literalExpression.getText());
    }
static @Nullable PsiUpdateModCommandQuickFix create(@NotNull PsiExpression originalExpression)