如果表达式的结果可以重用,则报告同一表达式在方法(或构造函数,或类初始值设定项)中的多次等效匹配项。

如果表达式没有副作用并且其结果始终相同(就 Object.equals() 而言),则会报告该表达式。 此类表达式的示例是 a + bMath.max(a, b)a.equals(b) s.substring(a,b)。 为确保结果始终相同,已验证表达式中使用的变量在表达式匹配项之间不会更改其值。

此类表达式可能包含不可变的类(如 StringBigDecimal 等)和实用程序类(如 ObjectsMathrandom() 除外)的方法。 Object.equals() Object.hashCode() Object.toString() Comparable.compareTo()Comparator.compare() 等常用方法也可以使用,因为没有任何可见的副作用。

使用表达式复杂性阈值选项可指定最小表达复杂性阈值。 指定更大的数字将移除关于短表达式的报告。

如果 Path.ofPaths.get 调用具有相同的实参,则被视为等效调用。 无论其实参有多复杂,这些调用始终会被报告。 使用不同的复杂性阈值可以调整这种行为。

2018.3 最新变化