我经常发现自己在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语法识别替代正则表达式来搜索特定(子)表达式?
答案 0 :(得分:0)
您可能需要构建Java源文件的抽象语法树,然后对其进行分析。可能会利用PMD(http://pmd.sourceforge.net/)并编写自定义规则(http://pmd.sourceforge.net/pmd-5.0.5/howtowritearule.html)来检测和标记可以在您描述时进行优化的表达式。