anchor.diff:  
   import 'package:kernel/ast.dart'
       show
  +        Class,
           DartType,
           DynamicType,
           FunctionType,
           InterfaceType,
  +        Member,
  +        Name,
           NamedType,
           Procedure,
           TypeParameter,
  
positive.code:     }
      for (var protoConstraint in _protoConstraints) {
        if (protoConstraint.isUpper) {
          environment.addUpperBound(
              result[protoConstraint.parameter], protoConstraint.bound);
        } else {
          environment.addLowerBound(
              result[protoConstraint.parameter], protoConstraint.bound);
        }
      }
      return result;
  
negative.code:     // it return `true` for both Null and bottom types?  Revisit this once
      // enough functionality is implemented that we can compare the behavior with
      // the old analyzer-based implementation.
      return type is InterfaceType && identical(type.classNode, nullClass);
    }
  
    /// Attempts to match [subtype] as a subtype of [supertype], gathering any
  