private Token getFirstToken(
      SortedSet<FieldToken> fieldTokens,
      String finder,
      String originalFinder,
      String simpleTypeName) {
    for (FieldToken fieldToken : fieldTokens) {
      if (finder.startsWith(fieldToken.getValue())) {
        return fieldToken;
      }
    }
    for (ReservedToken reservedToken : ReservedTokenHolder.ALL_TOKENS) {
      if (finder.startsWith(reservedToken.getValue())) {
        return reservedToken;
      }
    }
    if (finder.length() > 0) {
      // TODO: Make this a FinderFieldTokenMissingException instead, to make it easier to detect
      // this
      throw new FinderFieldTokenMissingException(
          "Dynamic finder is unable to match '"
              + finder
              + "' token of '"
              + originalFinder
              + "' finder definition in "
              + simpleTypeName
              + ".java");
    }

    return null; // Finder does not start with reserved or field token
  }
  private Set<JavaSymbolName> createFinders(
      FieldMetadata field, Set<JavaSymbolName> finders, String prepend, boolean isFirst) {
    Set<JavaSymbolName> tempFinders = new HashSet<JavaSymbolName>();

    if (isNumberOrDate(field.getFieldType())) {
      for (ReservedToken keyWord : ReservedTokenHolder.NUMERIC_TOKENS) {
        tempFinders.addAll(populateFinders(finders, field, prepend, isFirst, keyWord.getValue()));
      }
    } else if (field.getFieldType().equals(JavaType.STRING)) {
      for (ReservedToken keyWord : ReservedTokenHolder.STRING_TOKENS) {
        tempFinders.addAll(populateFinders(finders, field, prepend, isFirst, keyWord.getValue()));
      }
    } else if (field.getFieldType().equals(JavaType.BOOLEAN_OBJECT)
        || field.getFieldType().equals(JavaType.BOOLEAN_PRIMITIVE)) {
      for (ReservedToken keyWord : ReservedTokenHolder.BOOLEAN_TOKENS) {
        tempFinders.addAll(populateFinders(finders, field, prepend, isFirst, keyWord.getValue()));
      }
    } else {
      tempFinders.addAll(populateFinders(finders, field, prepend, isFirst, ""));
    }

    return tempFinders;
  }