anchor.diff:                .join(', ');
             return "$prefix${classElement.name}<$arguments>";
           } else {
  -          return fail();
  +          return await fail();
           }
         }
       } else if (dartType is FunctionType) {
  
positive.code:   /// 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) {
      var typeVariablesInScope = Set<String>(); // None at this level.
      if (dartType.isDynamic) return "dynamic";
      if (dartType is InterfaceType) {
  
negative.code:       (ElementAnnotation annotation) => _getEvaluatedMetadatum(annotation));
  }
  
  
  /// Determine whether the given library is a platform library.
  ///
  /// TODO(eernst): This function is only needed until a solution is found to the
  /// problem that platform libraries are considered invalid when obtained from
  /// `getResolvedLibraryByElement`, such that subsequent use will throw.
  bool _isPlatformLibrary(LibraryElement libraryElement) =>
      libraryElement.source.uri.scheme == "dart";
  
  /// Adds a severe error to the log, using the source code location of `target`
  /// to identify the relevant location where the error occurs.
  Future<void> _severe(String message, [Element target]) async {
    if (target != null) {
      log.severe(await _formatDiagnosticMessage(message, target));
    } else {
      log.severe(message);
    }
  