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 11 12 using Mono.Collections.Generic; 13 14 namespace Mono.Cecil { 15 16 public interface IGenericParameterProvider : IMetadataTokenProvider { 17 18 bool HasGenericParameters { get; } 19 bool IsDefinition { get; } 20 ModuleDefinition Module { get; } 21 Collection<GenericParameter> GenericParameters { get; } 22 GenericParameterType GenericParameterType { get; } 23 } 24 25 public enum GenericParameterType { 26 Type, 27 Method 28 } 29 30 interface IGenericContext { 31 32 bool IsDefinition { get; } 33 IGenericParameterProvider Type { get; } 34 IGenericParameterProvider Method { get; } 35 } 36 37 static partial class Mixin { 38 GetHasGenericParameters( this IGenericParameterProvider self, ModuleDefinition module)39 public static bool GetHasGenericParameters ( 40 this IGenericParameterProvider self, 41 ModuleDefinition module) 42 { 43 return module.HasImage () && module.Read (self, (provider, reader) => reader.HasGenericParameters (provider)); 44 } 45 GetGenericParameters( this IGenericParameterProvider self, ref Collection<GenericParameter> collection, ModuleDefinition module)46 public static Collection<GenericParameter> GetGenericParameters ( 47 this IGenericParameterProvider self, 48 ref Collection<GenericParameter> collection, 49 ModuleDefinition module) 50 { 51 return module.HasImage () 52 ? module.Read (ref collection, self, (provider, reader) => reader.ReadGenericParameters (provider)) 53 : collection = new GenericParameterCollection (self); 54 } 55 } 56 } 57