public static String validate()

in base/src/com/google/idea/blaze/base/model/primitives/TargetName.java [60:129]


  public static String validate(String targetName) {
    if (targetName.isEmpty()) {
      return "target names cannot be empty";
    }
    // Forbidden start chars:
    if (targetName.charAt(0) == '/') {
      return "Invalid target name: " + targetName + "\n" + "target names may not start with \"/\"";
    }
    if (targetName.charAt(0) == '.') {
      if (targetName.equals(".")) {
        return null;
      }
      if (targetName.startsWith("../") || targetName.equals("..")) {
        return "Invalid target name: "
            + targetName
            + "\n"
            + "target names may not contain up-level references \"..\"";
      }
      if (targetName.startsWith("./")) {
        return "Invalid target name: "
            + targetName
            + "\n"
            + "target names may not contain \".\" as a path segment";
      }
    }

    for (int i = 0; i < targetName.length(); ++i) {
      char c = targetName.charAt(i);
      if (ALLOWED_META.contains(c)) {
        continue;
      }
      if (c == '/') {
        // Forbidden substrings: "/../", "/./", "//"
        if (targetName.contains("/../")) {
          return "Invalid target name: "
              + targetName
              + "\n"
              + "target names may not contain up-level references \"..\"";
        } else if (targetName.contains("/./")) {
          return "Invalid target name: "
              + targetName
              + "\n"
              + "target names may not contain \".\" as a path segment";
        } else if (targetName.contains("//")) {
          return "Invalid target name: "
              + targetName
              + "\n"
              + "target names may not contain \"//\" path separators";
        }
        continue;
      }
      boolean isAlnum = ALNUM_REGEX.matcher(String.valueOf(c)).matches();
      if (!isAlnum) {
        return "Invalid target name: " + targetName + "\n" + "target names may not contain " + c;
      }
    }

    // Forbidden end chars:
    if (targetName.endsWith("/..")) {
      return "Invalid target name: "
          + targetName
          + "\n"
          + "target names may not contain up-level references \"..\"";
    } else if (targetName.endsWith("/.")) {
      return null;
    } else if (targetName.endsWith("/")) {
      return "Invalid target name: " + targetName + "\n" + "target names may not end with \"/\"";
    }
    return null;
  }