anchor.diff:    }
   
     /** Locate nodes with id and store references to them in [$] hash. */
  -  void marshalNodeReferences(ShadowRoot root) {
  +  void marshalNodeReferences(Node root) {
       if (root == null) return;
       for (var n in root.queryAll('[id]')) {
         $[n.id] = n;
  
positive.code:   void parseDeclaration(Element elementElement) {
      var root = shadowFromTemplate(fetchTemplate(elementElement));
  
      // Dart note: this is extra code compared to Polymer to support
      // the getShadowRoot method.
      if (root == null) return;
  
      var name = elementElement.attributes['name'];
      if (name == null) return;
  
negative.code:   Element fetchTemplate(Element elementElement) =>
        elementElement.query('template');
  
    /**
     * Utility function that creates a shadow root from a `<template>`.
     *
     * The base implementation will return a [ShadowRoot], but you can replace it
     * with your own code and skip ShadowRoot creation. In that case, you should
     * return `null`.
     *
     * In your overridden method, you can use [instanceTemplate] to stamp the
     * template and initialize data binding, and [shadowRootReady] to intialize
     * other Polymer features like event handlers. It is fine to call
     * shadowRootReady with a node something other than a ShadowRoot; for example,
     * with this Node.
     */
    ShadowRoot shadowFromTemplate(Element template) {
      if (template == null) return null;
      // cache elder shadow root (if any)
  