Hey Dzmitry, Most compilers inline the constant value of the enum, which is why you don't find references of them in the IL.
Jb On Mon, Sep 17, 2012 at 6:03 PM, Dzmitry Lahoda <[email protected]> wrote: > I am trying to build something like NDepend for my needs. > I have enum and trying to find usages of its members by some of dlls. Only > usage of whole enum can be finded. > This is real case (host and 6 custom addins). > > Sample code: > > public enum Enum1 > { > Val1, > Val2 > } > > public class ClassEnum1Consumer > { > public static void Consume(Enum1 e) > { > if (e == Enum1.Val2) > { > > } > } > } > > [<Test>] member fixture.``One usage of enum by consumer`` ()= > let result = > SharpDepend.findUsages("Test.ServiceProvider.Enum1","Val2",["Test.ServiceConsumer1"]) > result.Length |> should equal 1 > > > let findUsages (usedType:string,usedMemeber:string,consumers:list<string>) = > let allAssemblies = consumers |> List.map (fun x-> List.ofArray > (get_assemblies(x))) |> List.collect (fun x-> x) > let filter (assembly:AssemblyDefinition) = > assembly.MainModule.GetMemberReferences() > |> Seq.filter (fun x-> x.DeclaringType.FullName.Contains(usedType) && > x.Name.Contains(usedMemeber)) > // for enums - enum members fail by mono cecil > let filter_type (assembly:AssemblyDefinition) = > assembly.MainModule.GetTypeReferences() > |> Seq.filter (fun x-> x.FullName.Contains(usedType) && > usedMemeber.Equals(String.Empty)) > let usedTypes = allAssemblies |> List.filter ( fun x-> Seq.length > (filter(x)) >0 || Seq.length (filter_type(x)) >0) > usedTypes > > Result: > > Expected: 1 > But was: 0 > > Previous code works for enum type or usual classes' members. > > Link: > https://github.com/asd-and-Rizzo/SharpDepend > > > -- > -- > mono-cecil -- -- mono-cecil
