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

Reply via email to