anchor.diff:  }
   
   class WinRTMethodReturningMapProjection extends WinRTMethodProjection
  -    with MapProjection {
  +    with _MapProjection {
     WinRTMethodReturningMapProjection(super.method, super.vtableOffset);
   
     @override
     String toString() => '''
  -      IMap<$mapTypes> $camelCasedName($methodParams) {
  +      IMap<$mapTypeArgs> $camelCasedName($methodParams) {
           final retValuePtr = calloc<COMObject>();
           $parametersPreamble
           ${ffiCall()}
           $parametersPostamble
  -        return IMap.fromRawPointer(retValuePtr$mapArgs);
  +        return IMap.fromRawPointer(retValuePtr$mapConstructorArgs);
         }
     ''';
   }
   
   class WinRTGetPropertyReturningMapProjection extends WinRTGetPropertyProjection
  -    with MapProjection {
  +    with _MapProjection {
     WinRTGetPropertyReturningMapProjection(super.method, super.vtableOffset);
   
     @override
     String toString() => '''
  -      IMap<$mapTypes> get $exposedMethodName {
  +      IMap<$mapTypeArgs> get $exposedMethodName {
           final retValuePtr = calloc<COMObject>();
   
           ${ffiCall()}
   
  -        return IMap.fromRawPointer(retValuePtr$mapArgs);
  +        return IMap.fromRawPointer(retValuePtr$mapConstructorArgs);
         }
     ''';
   }
   
   class WinRTMethodReturningMapViewProjection extends WinRTMethodProjection
  -    with MapProjection {
  +    with _MapProjection {
     WinRTMethodReturningMapViewProjection(super.method, super.vtableOffset);
   
     @override
     String toString() => '''
  -      Map<$mapTypes> $camelCasedName($methodParams) {
  +      Map<$mapTypeArgs> $camelCasedName($methodParams) {
           final retValuePtr = calloc<COMObject>();
           $parametersPreamble
           ${ffiCall()}
   
           try {
  -          return IMapView<$mapTypes>.fromRawPointer(retValuePtr$mapArgs).toMap();
  +          return IMapView<$mapTypeArgs>.fromRawPointer(retValuePtr$mapConstructorArgs).toMap();
           } finally {
             $parametersPostamble
             free(retValuePtr);
  
positive.code:     return typeProjection.dartType;
    }
  
    String get mapTypes {
      final keyType =
          _mapTypeFromTypeIdentifier(returnType.typeIdentifier.typeArg!);
      final valueType =
          _mapTypeFromTypeIdentifier(returnType.typeIdentifier.typeArg!.typeArg!);
      return '$keyType, $valueType?';
    }
  
    String get mapArgs {
      final typeProjection =
          TypeProjection(returnType.typeIdentifier.typeArg!.typeArg!);
      final creator = typeProjection.isWinRT &&
              (typeProjection.isClass || typeProjection.isInterface)
          ? '${lastComponent(typeProjection.typeIdentifier.name)}.fromRawPointer'
          : null;
      final enumCreator = typeProjection.isWinRTEnum
          ? '${lastComponent(typeProjection.typeIdentifier.name)}.from'
          : null;
  
negative.code: 
  import '../../../../generator.dart';
  
  mixin _MapProjection on WinRTMethodProjection {
    /// Returns the type argument, as represented in the [typeIdentifier].
    String mapTypeArgFromTypeIdentifier(TypeIdentifier typeIdentifier) {
      final typeProjection = TypeProjection(typeIdentifier);
      if (typeProjection.isObject) return 'Object';
      if (typeProjection.isString) return 'String';
  