/Mono.Cecil/IGenericParameterProvider.cs

http://github.com/jbevain/cecil · C# · 58 lines · 38 code · 11 blank · 9 comment · 2 complexity · 489a6e6719165469eb8184f1bf3877e0 MD5 · raw file

  1. //
  2. // Author:
  3. // Jb Evain (jbevain@gmail.com)
  4. //
  5. // Copyright (c) 2008 - 2015 Jb Evain
  6. // Copyright (c) 2008 - 2011 Novell, Inc.
  7. //
  8. // Licensed under the MIT/X11 license.
  9. //
  10. using System.Threading;
  11. using Mono.Collections.Generic;
  12. namespace Mono.Cecil {
  13. public interface IGenericParameterProvider : IMetadataTokenProvider {
  14. bool HasGenericParameters { get; }
  15. bool IsDefinition { get; }
  16. ModuleDefinition Module { get; }
  17. Collection<GenericParameter> GenericParameters { get; }
  18. GenericParameterType GenericParameterType { get; }
  19. }
  20. public enum GenericParameterType {
  21. Type,
  22. Method
  23. }
  24. interface IGenericContext {
  25. bool IsDefinition { get; }
  26. IGenericParameterProvider Type { get; }
  27. IGenericParameterProvider Method { get; }
  28. }
  29. static partial class Mixin {
  30. public static bool GetHasGenericParameters (
  31. this IGenericParameterProvider self,
  32. ModuleDefinition module)
  33. {
  34. return module.HasImage () && module.Read (self, (provider, reader) => reader.HasGenericParameters (provider));
  35. }
  36. public static Collection<GenericParameter> GetGenericParameters (
  37. this IGenericParameterProvider self,
  38. ref Collection<GenericParameter> collection,
  39. ModuleDefinition module)
  40. {
  41. if (module.HasImage ())
  42. return module.Read (ref collection, self, (provider, reader) => reader.ReadGenericParameters (provider));
  43. Interlocked.CompareExchange (ref collection, new GenericParameterCollection (self), null);
  44. return collection;
  45. }
  46. }
  47. }