NDepend小问题检查过时的方法名称

时间:2013-07-10 06:53:23

标签: c# linq ndepend cqlinq

在执行CQLinq查询时我遇到了一些问题。

我正在尝试使用指定的全名来获取过时的方法,这意味着我想具体指定FullName过时的方法。

结果应该弹出5个匹配,这意味着应该包含过时的callMe()方法:

enter image description here

但是,当我执行此查询时,不包括callMe()!

// <Name>Don't use obsolete types, methods or fields</Name>   
warnif count > 0
let oConcreteM =  new String[] {"usageAssembly.Class1.callMe()"}

let obsoleteTypes = Types.Where(t => t.IsObsolete)
let obsoleteMethods = Methods.Where(m => m.IsObsolete 
&& oConcreteM.Contains(m.FullName)).ToHashSet() //TODO HERE!! (Specify callMe())



from m in JustMyCode.Methods.UsingAny(obsoleteTypes).Union(
      JustMyCode.Methods.UsingAny(obsoleteMethods)).Union(
      JustMyCode.Methods.UsingAny(obsoleteFields))

let obsoleteTypesUsed = obsoleteTypes.UsedBy(m)

// Optimization: MethodsCalled + Intersect() is faster than using obsoleteMethods.UsedBy()
let obsoleteMethodsUsed = m.MethodsCalled.Intersect(obsoleteMethods)
let obsoleteFieldsUsed = obsoleteFields.UsedBy(m)
select new { m,obsoleteTypesUsed, obsoleteMethodsUsed, obsoleteFieldsUsed }

通过上面的查询,callMe()消失了,但要获得5个匹配,我们必须删除“&amp;&amp; oConcreteM.Contains(m.FullName)”代码,但我不想,我想要什么是检查名称是否匹配oConcreteM中的方法全名。 以下是输出给我的信息:

enter image description here

我希望那些人可以帮助我:)。

1 个答案:

答案 0 :(得分:1)

那么回答应该是什么问题:

我想列出通过字符串列表定义的方法(定义全名),对于每个匹配的方法都是过时的+,列出使用的过时类型/方法/字段

let methods=  Application.Methods.WithFullNameIn(
                         "Namespace1.Class1.Method1()", 
                         "Namespace2.Class2.Method2()") // Put more full names here
                         .Where( m => m.IsObsolete)

from m in methods
// Here we cannot easily define m.TypesUsed, hence we use an astute
let obsoleteTypesUsed = m.ParentType.TypesUsed.Where(t => t.IsObsolete).Where(t => t.IsUsedBy(m))
let obsoleteMethodsUsed = m.MethodsCalled.Where(m1 => m1.IsObsolete)
let obsoleteFielsUsed = m.FieldsUsed.Where(f => f.IsObsolete)
select new { m, obsoleteTypesUsed, obsoleteMethodsUsed, obsoleteFielsUsed }