anchor.diff:        data.accept(visitor);
         info = infoBuilder.info;
         entityDataToInfo[data] = info;
  +
  +      // This is the first time we have seen this [EntityData] before so process
  +      // all deferred roots.
  +      info.deferredRoots.forEach((entity, imports) {
  +        for (ImportEntity deferredImport in imports) {
  +          queue.addEntityData(entity, importSets.singleton(deferredImport));
  +        }
  +      });
       }
       return info;
     }
  -
  -  /// Whether to enqueue a deferred entityData.
  -  ///
  -  /// Due to the nature of the algorithm, some dependencies may be visited more
  -  /// than once. However, we know that new deferred-imports are only discovered
  -  /// when we are visiting the main output unit (size == 0) or code reachable
  -  /// from a deferred import (size == 1). After that, we are rediscovering the
  -  /// same nodes we have already seen.
  -  bool _shouldAddDeferredEntity(ImportSet newSet) => newSet.length <= 1;
   
     /// Updates the dependencies of a given [EntityData] from [oldSet] to
     /// [newSet].
  
positive.code:   }
  
    /// Returns the [EntityDataInfo] associated with a given [EntityData].
    EntityDataInfo getInfo(EntityData data) {
      // Check for cached [EntityDataInfo], otherwise create a new one and
      // collect dependencies.
  
negative.code:       EntityData entityData, ImportSet oldSet, ImportSet newSet) {
      var info = getInfo(entityData);
  
      // Process all direct dependencies.
      for (var entity in info.directDependencies) {
        update(entity, oldSet, newSet);
      }
  