我正在努力提高我的罗斯林赋。我有一个简单的访客
PathTracker
readonly StringBuilder fullPath = new StringBuilder();
public override void VisitNamespaceDeclaration(NamespaceDeclarationSyntax node) {
int len = this.fullPath.Length;
this.fullPath.Append('.');
this.fullPath.Append(node.Name.ToFullString());
base.VisitNamespaceDeclaration(node);
this.fullPath.Length = len;
}
public override void VisitClassDeclaration(ClassDeclarationSyntax node) {
this.fullPath.Append('.');
this.fullPath.Append(node.Identifier.Text);
base.VisitClassDeclaration(node);
this.fullPath.Length -= node.Identifier.Text.Length + 1;
}
现在我想在另外两个访问者中重复使用此路径跟踪:
DefinitionScanner
收集仅定义一次的所有类,以及
PartialRemover
partial
所有类的修饰符,由
定义扫描器
.
问题是:我不知道如何重写我的路径跟踪访问者,这样我就可以在两者中重用它,同时尽可能少地重复代码。
这一事实使问题更加复杂,这是人们通常会想到的
定义扫描器
实施
CSharpSyntaxWalker
但是
局部清除器
应该是
CSharpSyntaxRewriter
,这使得它们不可能有公共基类。而且,无论如何,组合比继承更好。