f764b34682
Type annotations in the supertype clauses of a class are now Supertypes instead of InterfaceTypes. In the current version, the two classes contain the same information, but they are about to diverge in the following ways: - An InterfaceType may be nullable, whereas a supertype cannot. - An InterfaceType may represent the exact class, a subclass, or a subtype of the given class. - The type arguments to an interface type represent bounds, whereas the arguments to a supertype are always exact. We also introduce a class Substitution that represents an operator that replaces type parameters with types, depending on the variance of their use site. A substitution can be applied to a DartType or a Supertype, and can be generated independently of how it will be applied. BUG= R=kmillikin@google.com Review URL: https://codereview.chromium.org/2439043002 .