public static NoMatchingSignatureError parse()

in tools/automatic_query_fixer/src/main/java/com/google/cloud/bigquery/utils/queryfixer/errors/NoMatchingSignatureError.java [60:99]


  public static NoMatchingSignatureError parse(BigQueryException exception) {
    String errorMessage = exception.getMessage();
    List<String> contents = PatternMatcher.extract(errorMessage, ERROR_MESSAGE_REGEX);
    if (contents == null) {
      return null;
    }

    String functionName = contents.get(0);

    List<ArgumentType> argumentTypes;
    // Parse the actual input types. It should look like TYPE[, TYPE, ...]
    if (contents.get(2) == null) {
      // The function input is empty.
      argumentTypes = ImmutableList.of();
    } else {
      Signature signature = parseArgumentTypes(contents.get(2));
      // Cannot read the input arguments from the error message, so unable to generate the error.
      if (signature == null) {
        return null;
      }
      argumentTypes = signature.required;
    }

    List<Signature> signatures = new ArrayList<>();
    for (String signatureStr : contents.get(3).split("; ")) {
      String signatureBodyRegex = String.format("^%s\\((.*)\\)$", functionName);
      List<String> matchedSignature = PatternMatcher.extract(signatureStr, signatureBodyRegex);
      if (matchedSignature == null) {
        return null;
      }
      // The regex guarantee matchedSignature.get(0) always exists.
      String signatureBody = matchedSignature.get(0);
      signatures.add(parseArgumentTypes(signatureBody));
    }

    Position position = PatternMatcher.extractPosition(contents.get(4));

    return new NoMatchingSignatureError(
        functionName, argumentTypes, signatures, position, exception);
  }