code: private ITemplate getTemplate(IDialect dialect, String template, Object... args) {
  
          if (S.empty(template)) {
              return EmptyTemplate.INSTANCE;
          }
  
          boolean typeInferenceEnabled = conf().typeInferenceEnabled();
          if (typeInferenceEnabled) {
              ParamTypeInferencer.registerParams(this, args);
          }
  
          String key = template;
          if (typeInferenceEnabled) {
              key += ParamTypeInferencer.uuid();
          }
  
          TemplateClass tc = classes().getByTemplate(key);
          if (null == tc) {
              tc = new TemplateClass(template, this, dialect);
          }
          ITemplate t = tc.asTemplate(this);
          setRenderArgs(t, args);
          return t;
      }
docs: static ThreadLocal<Integer> cceCounter = new ThreadLocal<Integer>();