【发布时间】:2017-01-16 21:38:25
【问题描述】:
我正在尝试查找特定方法的用法。在这种情况下,我想找到 foo.go() 的用法/调用,但不是 bar.go()。下面的代码将在任何类上找到go() 的所有调用。在下面的代码中,node.target 给了我简单的 x,这是 var 名称,但我很难弄清楚该方法属于哪个类。
test.dart
void main() {
var x = new Foo();
x.go();
x = new Bar();
x.go();
}
class Foo {
go() {
print('I am foo');
}
}
class Bar {
go() {
print('I am bar');
}
}
analyze.dart
import 'package:analyzer/analyzer.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
void main() {
var targetFile = parseDartFile('test.dart');
var visitor = new UsageVisitor('foo.go');
targetFile.visitChildren(visitor);
}
class UsageVisitor extends UnifyingAstVisitor {
String _class;
String _method;
UsageVisitor(this._class, this._method);
@override
visitMethodInvocation(MethodInvocation node) {
print({
'target' : node.target.toString(), // in both cases, gives "x" -- I need "Foo" and "Bar", respectively
'methodName': node.methodName.toString() // gives "go"
});
return super.visitNode(node);
}
}
我如何区分foo.go() 和bar.go() 之间的区别(在分析器级别)?
【问题讨论】:
标签: dart abstract-syntax-tree static-analysis