私はroslynでコード解析ルールを作成しようとしています。ObjectCreationExpressionSyntaxの引数がtry catchブロックにラップされているかどうかを確認してください。
基本的には、Microsoft.Practices.Prism.Commands.DelegateCommand()
が作成された各引数がtry catch
にラップされているかどうかをチェックする必要があります。
主なアイデアは、最初のStatementSyntax
がTryStatementSyntax
かどうDelegateCommand
クラスのすべてのObjectCreationExpressionSyntax
オブジェクトを収集し、各コンストラクタの引数をチェックしています。
StatementSyntax
をすべてArgumentSyntax
から手に入れることができますか?それとも別のアプローチがあるかもしれませんか?
public IEnumerable<IdentifierInfo> Collect(SyntaxNode rootNode, SemanticModel semanticModel)
{
ObjectCreationExpressionSyntax[] objCreation = rootNode
.DescendantNodes()
.OfType<ObjectCreationExpressionSyntax>()
.Where(c=>(c.Type as IdentifierNameSyntax)?.Identifier.Value.ToString() == "DelegateCommand")
.ToArray();
foreach (var obj in objCreation)
{
var args = obj.ArgumentList.Arguments;
foreach (ArgumentSyntax arg in args)
{
var expession = arg.Expression;
var symbol = semanticModel.GetSymbolInfo(expession).Symbol as IMethodSymbol;
}
}
}
ベローあなたは、私が実際に通じ検索用にコンパイルものを見つけることができます。
public class Program
{
public delegate void MyDelegate();
public static void DelegateMethod() { try { } catch { } }
public static void Main(string[] args)
{
DelegateCommand del1 = new DelegateCommand(() => {try{}catch{}});
DelegateCommand del2 = new DelegateCommand(new Action(() => { }));
DelegateCommand del3 = new DelegateCommand(DelegateMethod);
var barInit = (Action)(DelegateMethod);
DelegateCommand del4 = new DelegateCommand(barInit);
ICommand test;
test = new Microsoft.Practices.Prism.Commands.DelegateCommand(() => { });
}
}
このPRISMは5以上ですか?次に、 'DelegateCommand.FromAsync()'バリエーションを処理したいかもしれませんが、そうではありませんか? – Ties