code: public String[] getAllTemplateNames(boolean recurse) 
          throws IOException {
          
          if (mTemplateProviderMap == null) {
              synchronized (this) {
                  mTemplateProviderMap = new HashMap<String, CompilationProvider>();
                  for (CompilationProvider provider : mCompilationProviders) {
                      String[] templates = provider.getKnownTemplateNames(recurse);
                      for (String template : templates) {
                          if (!mTemplateProviderMap.containsKey(template)) {
                              mTemplateProviderMap.put(template, provider);
                          }
                      }
                  }
              }
          }
          
          return mTemplateProviderMap.keySet().toArray(
              new String[mTemplateProviderMap.size()]);
      }
docs: Get the list of all known templates to this compiler.  If the list of
  known templates cannot be easily resolved, then <code>null</code> should
  be returned.
  
  @param recurse The flag of whether to recurse into sub-directories
  
  @return The list of all known templates.