1
本书给出了一个重写评论(用于重构旧代码)的示例。antlr4中的多个注释重构
public void exitVarDecl(..) { // lexmagic/ShiftVarComments.java
Token semi = ctx.getStop();
int i = semi.getTokenIndex();
List<Token> cmtChannel =
tokens.getHiddenTokensToRight(i, CymbolLexer.COMMENTS);
if (cmtChannel!=null) {
Token cmt = cmtChannel.get(0);
if (cmt!=null) {
String txt = cmt.getText().substring(2);
String newCmt = "/* " + txt.trim() + " */\n";
rewriter.insertBefore(ctx.start, newCmt);
rewriter.replace(cmt, "\n");
}
}
}
不幸的是旧的代码永远不会那么容易。通常人们会在代码之间放置代码,而不是仅在最后,例如:
// here is a simple array initialization
int index[2] = { // list of parameter indices
1, // index for PARAM_A
4 // index for PARAM_D
}; // finally terminating
该书的代码将只打印最后一条评论。如何修改此代码,以便以前打印的所有注释现在都可以处理?
'cmtChannel.get(0)'只有你第一条评论 - 尝试遍历所有可能的如果这不起作用,你可以遍历声明并在每个文字上获取“first comment” – petrbel
这个输入没有错误吗?假设你指的是Cymbol.g4并且它没有改变。 – cantSleepNow