private static void ReleaseCachedInterfaces(CppCodeWriter writer, TypeDefinition declaringType)
 {
     TypeReference[] referenceArray = declaringType.ImplementedComOrWindowsRuntimeInterfaces().ToArray <TypeReference>();
     if (referenceArray.Length != 0)
     {
         bool flag = declaringType.GetComposableFactoryTypes().Count <TypeReference>() > 0;
         if (flag)
         {
             writer.WriteLine($"if ({Naming.ThisParameterName}->klass->is_import_or_windows_runtime)");
             writer.BeginBlock();
         }
         foreach (TypeReference reference in referenceArray)
         {
             string str = Naming.ForComTypeInterfaceFieldName(reference);
             writer.WriteLine($"if ({Naming.ThisParameterName}->{str} != {Naming.Null})");
             using (new BlockWriter(writer, false))
             {
                 writer.WriteLine($"{Naming.ThisParameterName}->{str}->Release();");
             }
         }
         if (flag)
         {
             writer.EndBlock(false);
         }
         writer.WriteLine();
         foreach (TypeReference reference2 in referenceArray)
         {
             string str2 = Naming.ForComTypeInterfaceFieldName(reference2);
             writer.WriteLine($"{Naming.ThisParameterName}->{str2} = {Naming.Null};");
         }
         writer.WriteLine();
     }
 }