code: static void visitTemplateLiteral(NodeTraversal t, Node n, boolean addTypes) {
      JSTypeRegistry registry = t.getCompiler().getTypeRegistry();
      JSType stringType = createType(addTypes, registry, JSTypeNative.STRING_TYPE);
      int length = n.getChildCount();
      if (length == 0) {
        n.replaceWith(withType(IR.string("\"\""), stringType));
      } else {
        Node first = n.removeFirstChild();
        checkState(first.isTemplateLitString() && first.getCookedString() != null);
        Node firstStr = withType(IR.string(first.getCookedString()), stringType);
        if (length == 1) {
          n.replaceWith(firstStr);
        } else {
          // Add the first string with the first substitution expression
          Node add =
              withType(IR.add(firstStr, n.removeFirstChild().removeFirstChild()), n.getJSType());
          // Process the rest of the template literal
          for (int i = 2; i < length; i++) {
            Node child = n.removeFirstChild();
            if (child.isTemplateLitString()) {
              checkState(child.getCookedString() != null);
              if (child.getCookedString().isEmpty()) {
                continue;
              } else if (i == 2 && first.getCookedString().isEmpty()) {
                // So that `${hello} world` gets translated into (hello + " world")
                // instead of ("" + hello + " world").
                add = add.getSecondChild().detach();
              }
            }
            add =
                withType(
                    IR.add(
                        add,
                        child.isTemplateLitString()
                            ? withType(IR.string(child.getCookedString()), stringType)
                            : child.removeFirstChild()),
                    n.getJSType());
          }
          n.replaceWith(add.useSourceInfoIfMissingFromForTree(n));
        }
      }
      t.reportCodeChange();
    }
docs: Converts `${a} b ${c} d ${e}` to (a + " b " + c + " d " + e)
  
  @param n A TEMPLATELIT node that is not prefixed with a tag