anchor.diff:    /// evaluating the [typeDefiningElement] as an expression in the library
     /// where it occurs. [importCollector] is used to find the library prefixes
     /// needed in order to obtain values from other libraries.
  -  String _typeCodeOfClass(DartType dartType, _ImportCollector importCollector,
  -      Map<FunctionType, int> typedefs) {
  +  Future<String> _typeCodeOfClass(DartType dartType, _ImportCollector importCollector,
  +      Map<FunctionType, int> typedefs) async {
       var typeVariablesInScope = Set<String>(); // None at this level.
       if (dartType.isDynamic) return "dynamic";
       if (dartType is InterfaceType) {
  
positive.code:     }
      String metadataCode = "null";
      if (_capabilities._supportsMetadata) {
        var resolvedLibrary =
            await element.session.getResolvedLibraryByElement(element.library);
        var declaration = resolvedLibrary.getElementDeclaration(element);
        FormalParameter node = declaration.node;
        if (node == null) {
          metadataCode = "const []";
        } else {
  
negative.code:               .join(', ');
            return "$prefix${classElement.name}<$arguments>";
          } else {
            return await fail();
          }
        }
      } else if (dartType is FunctionType) {
  