特定の属性でマークされたメソッドによって呼び出されたメソッド内でオブジェクトの割り当てが行われた場合に失敗するルールを作成したいと考えています。
CallGraph.CallersFor()
メソッドを呼び出すすべてのメソッドを反復して を使用してチェックし、これらの親メソッドのいずれかに属性があるかどうかを確認することで、これまでのところ機能しています。
これは、チェック対象のメソッドと同じアセンブリ内の親メソッドをチェックするために機能しますが、オンラインで読むと、一度CallGraph.CallersFor()
はすべてのアセンブリを調べたように見えますが、現在はそうではありません。
質問:別のアセンブリ内のメソッドを含め、特定のメソッドを呼び出すメソッドのリストを取得する方法はありますか?
代替回答:上記が不可能な場合、別のアセンブリ内のメソッドを含め、特定のメソッドによって呼び出されるすべてのメソッドをループするにはどうすればよいですか。
例:
-----In Assembly A
public class ClassA
{
public MethodA()
{
MethodB();
}
public MethodB()
{
object o = new object(); // Allocation i want to break the rule
// Currently my rule walks up the call tree,
// checking for a calling method with the NoAllocationsAllowed attribute.
// Problem is, because of the different assemblies,
// it can't go from ClassA.MethodA to ClassB.MethodB.
}
}
----In Assembly B
public var ClassAInstance = new ClassA();
public class ClassB
{
[NoAllocationsAllowed] // Attribute that kicks off the rule-checking.
public MethodA()
{
MethodB();
}
public MethodB()
{
ClassAInstance.MethodA();
}
}
ルールがどこでエラーを報告するかはあまり気にしません。この段階では、エラーを取得するだけで十分です。