@Override
  public boolean test(final String functionName) {
    if (functionName == null
        || functionName.trim().isEmpty()
        || JAVA_RESERVED_WORDS.contains(functionName.toLowerCase())
        || KSQL_RESERVED_WORDS.contains(functionName.toLowerCase())) {
      return false;
    }
    return isValidJavaIdentifier(functionName);

  }
@Test
  public void shouldNotAllowKsqlReservedWordsExceptSubstringAndConcatAndReplace() {
    final Vocabulary vocabulary = SqlBaseParser.VOCABULARY;
    final int maxTokenType = vocabulary.getMaxTokenType();
    for(int i = 0; i < maxTokenType; i++) {
      final String symbolicName = vocabulary.getSymbolicName(i);
      if (symbolicName != null) {
        if (symbolicName.equalsIgnoreCase("substring")
            || symbolicName.equalsIgnoreCase("concat")
            || symbolicName.equalsIgnoreCase("replace")) {
          assertTrue(validator.test(symbolicName));
        } else {
          assertFalse(validator.test(symbolicName));
        }
      }
    }
  }