SyntaxWalker 访问者不访问方法
SyntaxWalker Visitor doesn't visit Methods
我得到了这个学步车
internal class MyWalker : CSharpSyntaxWalker
{
public int MethodCount { get; private set; }
public MyWalker() : base(Microsoft.CodeAnalysis.SyntaxWalkerDepth.Trivia)
{ }
public override void VisitMethodDeclaration(MethodDeclarationSyntax node)
{
MyMethodCount ++;
}
public override void VisitClassDeclaration(ClassDeclarationSyntax node)
{
Class++;
Complexity++;
}
}
我用这个代码调用助行器
var code = @"
public class foo
{
public void MyMethod()
{
}
}
";
SyntaxTree node = CSharpSyntaxTree.ParseText(source);
var root = node.GetRoot();
var walker = new MyWalker();
walker.Visit(root);
但从未调用访问方法声明。
为了确保我与 SyntaxTree Analyzer 进行了比较,我发现 roslyn 应该将其识别为方法声明。
我错过了什么?
我找到了。我在访问 class 方法中没有碱基调用。所以只是我的一个错误
所以应该是
public override void VisitClassDeclaration(ClassDeclarationSyntax node)
{
[...]
base.VisitClassDeclaration(node); // this was missing
}
我得到了这个学步车
internal class MyWalker : CSharpSyntaxWalker
{
public int MethodCount { get; private set; }
public MyWalker() : base(Microsoft.CodeAnalysis.SyntaxWalkerDepth.Trivia)
{ }
public override void VisitMethodDeclaration(MethodDeclarationSyntax node)
{
MyMethodCount ++;
}
public override void VisitClassDeclaration(ClassDeclarationSyntax node)
{
Class++;
Complexity++;
}
}
我用这个代码调用助行器
var code = @"
public class foo
{
public void MyMethod()
{
}
}
";
SyntaxTree node = CSharpSyntaxTree.ParseText(source);
var root = node.GetRoot();
var walker = new MyWalker();
walker.Visit(root);
但从未调用访问方法声明。
为了确保我与 SyntaxTree Analyzer 进行了比较,我发现 roslyn 应该将其识别为方法声明。
我错过了什么?
我找到了。我在访问 class 方法中没有碱基调用。所以只是我的一个错误
所以应该是
public override void VisitClassDeclaration(ClassDeclarationSyntax node)
{
[...]
base.VisitClassDeclaration(node); // this was missing
}