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