code: boolean declareTemplateTypeName(String newTemplateTypeName) {
      lazyInitInfo();
  
      if (isTypeTransformationName(newTemplateTypeName) || hasTypedefType()) {
        return false;
      }
      if (info.templateTypeNames == null){
        info.templateTypeNames = new ArrayList<>();
      } else if (info.templateTypeNames.contains(newTemplateTypeName)) {
        return false;
      }
  
      info.templateTypeNames.add(newTemplateTypeName);
      return true;
    }
docs: Declares a template type name. Template type names are described using the
  {@code @template} annotation.
  
  @param newTemplateTypeName the template type name.