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