code: @SuppressWarnings("unchecked")
      public ITemplate getTemplate(File file, Object... args) {
          boolean typeInferenceEnabled = conf().typeInferenceEnabled();
          if (typeInferenceEnabled) {
              ParamTypeInferencer.registerParams(this, args);
          }
  
          String key = S.str(resourceManager().get(file).getKey());
          if (typeInferenceEnabled) {
              key += ParamTypeInferencer.uuid();
          }
          TemplateClass tc = classes().getByTemplate(key);
          ITemplate t;
          if (null == tc) {
              tc = new TemplateClass(file, this);
              t = tc.asTemplate(this);
              if (null == t) return null;
              _templates.put(tc.getKey(), t);
              //classes().add(key, tc);
          } else {
              t = tc.asTemplate(this);
          }
          setRenderArgs(t, args);
          return t;
      }
docs: Get an new template instance by template source {@link java.io.File file}
  and an array of arguments.
  <p/>
  <p>When the args array contains only one element and is of {@link java.util.Map} type
  the the render args are passed to template
  {@link ITemplate#__setRenderArgs(java.util.Map) by name},
  otherwise they passes to template instance by position</p>
  
  @param file the template source file
  @param args the render args. See {@link #getTemplate(String, Object...)}
  @return template instance