anchor.diff:    DartType get baseReturnType => element.returnType;
   
     @override
  -  List<TypeParameterElement> get boundTypeParameters => _boundTypeParameters;
  +  List<TypeParameterElement> get boundTypeParameters {
  +    if (_isInstantiated) {
  +      return TypeParameterElement.EMPTY_LIST;
  +    } else {
  +      return element?.typeParameters ?? TypeParameterElement.EMPTY_LIST;
  +    }
  +  }
   
     @override
     String get displayName {
  
positive.code:     //
      // Now instantiate([V]), and the result should be:
      //     {U/T, V/S} T -> S.
      List<TypeParameterElement> newTypeParams = typeParameters.toList();
      List<DartType> newTypeArgs = typeArguments.toList();
      newTypeParams.addAll(boundTypeParameters);
      newTypeArgs.addAll(argumentTypes);
  
      return new FunctionTypeImpl._(element, name, prunedTypedefs, newTypeArgs,
          newTypeParams, TypeParameterElement.EMPTY_LIST);
    }
  
    @override
  
negative.code:    */
    FunctionTypeImpl(ExecutableElement element,
        [List<FunctionTypeAliasElement> prunedTypedefs])
        : this._(element, null, prunedTypedefs, null, false);
  
    /**
     * Initialize a newly created function type to be declared by the given
     * [element], with the given [name] and [typeArguments].
     */
    FunctionTypeImpl.elementWithNameAndArgs(
        Element element, String name, List<DartType> typeArguments)
        : this._(element, name, null, typeArguments, false);
  
    /**
     * Initialize a newly created function type to be declared by the given
  