2

我经常发现自己在 Java 中搜索特定形式的语句。假设我写了一个简单的函数来表达一个习惯用法,比如“取这个值,如果它为空,则取一个默认值”

/** return a if not null, the default otherwise. */
public static <T> T notNull(T a, T def) {
    if (a == null)
        return def;
    else
        return a;
}

现在,如果我写了这个,我想在我的代码中寻找可以用来简化的案例,例如

(some.longExpressionWhichMayBeNull() ? "default string" : some.longExpressionWhichMayBeNull())

问题是编写一个匹配 java 语法的正则表达式非常棘手。当然可以,但是很容易出错。很难让正则表达式忽略所有正确位置的空格总是准确地找出字符串的开始和停止位置,知道强制转换和函数调用之间的区别等。

这似乎也有点浪费,因为我们已经有一个 java 解析器,它已经做到了。

所以我的问题是:是否有一些 Java 语法感知替代正则表达式来搜索特定(子)表达式?

4

1 回答 1

0

您可能需要构建 Java 源文件的抽象语法树,然后对其进行分析。可能会利用 PMD ( http://pmd.sourceforge.net/ ) 并编写自定义规则 ( http://pmd.sourceforge.net/pmd-5.0.5/howtowritearule.html ) 来检测和标记表达式可以按照您的描述进行优化。

于 2013-10-05T18:49:48.503 回答