【发布时间】:2020-08-14 20:45:09
【问题描述】:
我正在尝试创建一个自定义插件,基于 Riverside OpenEdge plugin 及其版本的 Proparse 来创建一个有效 &IF 预处理器的规则。
此规则需要验证应用程序是否使用了已弃用的 &GLOBAL-DEFINE 值,如下所示:
/* "A" is the deprecated value of "opts" so I want to create a new ISSUE here */
&IF "{&opts}" = "A" &THEN
MESSAGE "DEPRECATED CODE".
&ENDIF
&IF "{&opts}" > "A" &THEN
MESSAGE "OK CODE".
&ENDIF
对于我扩展的这条规则,我尝试做这样的事情:
if (unit.getMacroGraph().macroEventList.stream().noneMatch(macro -> macro instanceof NamedMacroRef
&& ((NamedMacroRef) macro).getMacroDef().getName().equalsIgnoreCase("opts"))) {
return;
}
TokenSource stream = unit.lex();
ProToken tok = (ProToken) stream.nextToken();
while (tok.getNodeType() != ABLNodeType.EOF_ANTLR4) {
if (tok.getNodeType() == ABLNodeType.AMPIF) {
// Verify node.
System.out.println(tok);
}
tok = (ProToken) stream.nextToken();
}
但我不知道它是否是最好的验证方法(我根据其他来源的代码做了)并且它不起作用,因为下一个节点是一个空的“QSSTRING”。我是 Proparse 世界的新手,感谢任何帮助。
【问题讨论】: