我正在尝试对一些 Java 代码进行源代码转换,从而生成代码,其中对于每个表达式,如果计算表达式,则会调用一个方法。
(用例是一个简单的行覆盖度量。我以前在 JavaScript 中做过这种事情:<my-expression>
成为(covered("path/to/file.js", 12), <my-expression>)
或其他东西,其中 12 是表达式的行号)。
Java 没有逗号运算符。我考虑过在方法调用中包装表达式,例如我的covered
函数将被声明public static <T> T covered(String file, int line, T expr)
并返回它的第三个参数,所以我可以编写covered("path/to/file.java", 12, myExpression())
但它不适用于具有 type 的表达式void
。
有没有简单的方法来实现这一点?邪恶的代码是可以的;这是生成的代码。