// // Author: // Jb Evain (jbevain@gmail.com) // // Copyright (c) 2008 - 2015 Jb Evain // Copyright (c) 2008 - 2011 Novell, Inc. // // Licensed under the MIT/X11 license. // using MonoFN.Collections.Generic; using System.Threading; namespace MonoFN.Cecil { public interface ICustomAttributeProvider : IMetadataTokenProvider { Collection CustomAttributes { get; } bool HasCustomAttributes { get; } } static partial class Mixin { public static bool GetHasCustomAttributes ( this ICustomAttributeProvider self, ModuleDefinition module) { return module.HasImage () && module.Read (self, (provider, reader) => reader.HasCustomAttributes (provider)); } public static Collection GetCustomAttributes ( this ICustomAttributeProvider self, ref Collection variable, ModuleDefinition module) { if (module.HasImage ()) return module.Read (ref variable, self, (provider, reader) => reader.ReadCustomAttributes (provider)); Interlocked.CompareExchange (ref variable, new Collection (), null); return variable; } } }