anchor.diff:  
   Program transformProgram(
       CoreTypes coreTypes, ClassHierarchy hierarchy, Program program,
  -    {List<ProgramRoot> programRoots}) {
  -  new TreeShaker(coreTypes, hierarchy, program, programRoots: programRoots)
  +    {List<ProgramRoot> programRoots, bool strongMode: false}) {
  +  new TreeShaker(coreTypes, hierarchy, program,
  +          programRoots: programRoots, strongMode: strongMode)
         .transform(program);
     return program;
   }
  
positive.code:       addSelfDispatch(node.name);
      } else {
        shaker._addDispatchedName(getStaticType(node.receiver), node.name);
        if (node.interfaceTarget != null) {
          shaker._typedCalls.add(node);
        }
      }
      node.visitChildren(this);
    }
  
negative.code:   visitTypeLiteral(TypeLiteral node) {
      shaker._addInstantiatedExternalSubclass(coreTypes.typeClass);
      node.visitChildren(this);
    }
  
    @override
    visitSuperPropertyGet(SuperPropertyGet node) {
      throw 'The treeshaker assumes mixins have been desugared.';
    }
  
    @override
    visitSuperPropertySet(SuperPropertySet node) {
      throw 'The treeshaker assumes mixins have been desugared.';
    }
  
    @override
    visitSuperMethodInvocation(SuperMethodInvocation node) {
      throw 'The treeshaker assumes mixins have been desugared.';
    }
  }
  
  