private void buildCompareTree(
     CeylonOutlineNode outlineNode, DocumentRangeNode parent, IDocument document) {
   CeylonDocumentRangeNode compareNode;
   switch (outlineNode.getCategory()) {
     case ROOT_CATEGORY: // attach children of the unit node directly to our root
       compareNode =
           new CeylonDocumentRangeNode(parent, "@root", outlineNode, document) {
             @Override
             public String getName() {
               return "Ceylon Source File";
             }
           };
       break;
     case IMPORT_LIST_CATEGORY:
       compareNode = new CeylonDocumentRangeNode(parent, "@importlist", outlineNode, document);
       break;
     case DEFAULT_CATEGORY:
       compareNode =
           new CeylonDocumentRangeNode(parent, outlineNode.getIdentifier(), outlineNode, document);
       break;
     default:
       // The outline view has some extra nodes
       // we don't care about so just do nothing
       return;
   }
   for (CeylonOutlineNode treeChild : outlineNode.getChildren()) {
     buildCompareTree(treeChild, compareNode, document);
   }
   parent.addChild(compareNode);
 }