anchor.diff:        }
       }
       return result;
  -  }
  -
  -  DartType _inferTypeParameterFromContext(
  -      Iterable<_TypeConstraint> constraints, _TypeConstraint extendsClause) {
  -    DartType t = _chooseTypeFromConstraints(constraints);
  -    if (UnknownInferredType.isUnknown(t)) {
  -      return t;
  -    }
  -
  -    // If we're about to make our final choice, apply the extends clause.
  -    // This gives us a chance to refine the choice, in case it would violate
  -    // the `extends` clause. For example:
  -    //
  -    //     Object obj = math.min/*<infer Object, error>*/(1, 2);
  -    //
  -    // If we consider the `T extends num` we conclude `<num>`, which works.
  -    if (extendsClause != null) {
  -      constraints = constraints.toList()..add(extendsClause);
  -      return _chooseTypeFromConstraints(constraints);
  -    }
  -    return t;
  -  }
  -
  -  DartType _inferTypeParameterFromAll(
  -      List<_TypeConstraint> constraints, _TypeConstraint extendsClause) {
  -    // See if we already fixed this type from downwards inference.
  -    // If so, then we aren't allowed to change it based on argument types.
  -    DartType t = _inferTypeParameterFromContext(
  -        constraints.where((c) => c.isDownwards), extendsClause);
  -    if (UnknownInferredType.isKnown(t)) {
  -      // Remove constraints that aren't downward ones; we'll ignore these for
  -      // error reporting, because inference already succeeded.
  -      constraints.removeWhere((c) => !c.isDownwards);
  -      return t;
  -    }
  -
  -    if (extendsClause != null) {
  -      constraints = constraints.toList()..add(extendsClause);
  -    }
  -
  -    var choice = _chooseTypeFromConstraints(constraints, toKnownType: true);
  -    return choice;
     }
   
     /// Choose the bound that was implied by the return type, if any.
  
positive.code:     type2 = type2.resolveToBound(typeProvider.objectType);
      return getLeastUpperBound(type1, type2);
    }
  }
  
  /// Tracks upper and lower type bounds for a set of type parameters.
  
negative.code:       : lowerBound = lower ?? UnknownInferredType.instance,
          upperBound = upper ?? UnknownInferredType.instance;
  }
  