Beispiel #1
0
  public static DataType parse(String typeString) {
    typeString = StringUtil.trimToEmpty(typeString);

    DataType dataType = new DataType();
    Matcher nameMatcher = Pattern.compile("^(\\w+)").matcher(typeString);
    if (nameMatcher.find()) {
      dataType.name = nameMatcher.group(1);
    } else {
      return dataType;
    }

    Matcher matcher = Pattern.compile("(.*)\\((.*)\\)(.*)").matcher(typeString);
    if (matcher.find()) {
      String beforeParens = matcher.group(1);
      String inParens = matcher.group(2);
      String afterParens = matcher.group(3);
      List<String> params = StringUtil.splitAndTrim(inParens, "\\s*,\\s*");
      dataType.parameters = params;
      dataType.clausesBeforeParameters =
          new StringClauses(" ")
              .append(StringUtil.trimToNull(beforeParens.substring(dataType.name.length())));
      dataType.clausesAfterParameters = new StringClauses(" ").append(afterParens);
    } else {
      dataType.clausesBeforeParameters =
          new StringClauses(" ")
              .append(StringUtil.trimToNull(typeString.substring(dataType.name.length())));
    }

    dataType.standardType = standardType(dataType.name);
    if (dataType.standardType != null) {
      dataType.valueType = dataType.standardType.valueType;
    }
    return dataType;
  }