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

Reply via email to