目标是插入代码来监控Java同步块的进入和退出。
IE
enteringSync();
synchronized(lockObj){
enteredSync();
...
leavingSync();
}
leftSync();
我最初的想法是实现进入/退出侦听器方法(在 Java synchronizd 块周围添加子树),然后打印出结果 AST。现在我意识到 antlr4 似乎不支持树修改,我应该考虑哪些替代方案?
目标是插入代码来监控Java同步块的进入和退出。
IE
enteringSync();
synchronized(lockObj){
enteredSync();
...
leavingSync();
}
leftSync();
我最初的想法是实现进入/退出侦听器方法(在 Java synchronizd 块周围添加子树),然后打印出结果 AST。现在我意识到 antlr4 似乎不支持树修改,我应该考虑哪些替代方案?
最好的解决方案是使用令牌流重写引擎而不是操纵解析树。以书为例;http://amzn.com/1934356999。这是一个将序列化标识符插入类主体的代码片段。
public class InsertSerialIDListener extends JavaBaseListener {
TokenStreamRewriter rewriter;
public InsertSerialIDListener(TokenStream tokens) {
rewriter = new TokenStreamRewriter(tokens);
}
@Override
public void enterClassBody(JavaParser.ClassBodyContext ctx) {
String field = "\n\tpublic static final long serialVersionUID = 1L;";
rewriter.insertAfter(ctx.start, field);
}
}