The clunkiness in creating the `ClassDef and Template` here suggests we're missing a few factories in `src/reflect/scala/reflect/internal/Trees.scala` along the lines of:

```
def ClassDef(sym: Symbol, body: List[Tree]): ClassDef = {
    ClassDef(sym, Template(sym, body))
  }
  
  def Template(sym: Symbol, body: List[Tree]) = {
    atPos(sym.pos) {
      Template(sym.info.parents map TypeTree,
               if (sym.thisSym == sym) noSelfType else ValDef(sym),
               body)
    }
  }
```