anchor.diff:    }
   
     TypeTuple unwrapWinRTDelegate() {
  -    final delegateName = stripGenerics(
  -        stripLeadingUnderscores(lastComponent(typeIdentifier.name)));
  +    final delegateName = outerType(stripGenerics(
  +        stripLeadingUnderscores(lastComponent(typeIdentifier.name))));
   
       return TypeTuple('Pointer<NativeFunction<$delegateName>>',
           'Pointer<NativeFunction<$delegateName>>');
  
positive.code:     return _projection!;
    }
  
    TypeProjection(this.typeIdentifier);
  
    String get attribute => projection.attribute ?? '';
    String get nativeType => projection.nativeType;
  
negative.code:     // IReference<T> parameters accept COMObject instead of Pointer<COMObject>
      if (isGenericType &&
          (typeIdentifier.type?.name.endsWith('IReference`1') ?? false)) {
        return TypeTuple('COMObject', 'COMObject',
            methodParamType: lastComponent(typeIdentifier.name));
      }
  
      if (isInterface ||
          typeIdentifier.baseType == BaseType.classTypeModifier ||
          typeIdentifier.baseType == BaseType.objectType) {
        return TypeTuple(
          'Pointer<COMObject>',
          'Pointer<COMObject>',
          methodParamType: typeIdentifier.baseType == BaseType.objectType
              ? null
              : lastComponent(typeIdentifier.name),
        );
      }
  
      // default: return the name as returned by metadata
  