あるメソッド (またはコンストラクター、イニシャライザー) で同等の式が複数回使用されており、その式の結果を再利用できる場合に報告します。

式は副作用がなく、かつ (Object.equals() について) 結果が常に同じである場合に報告されます。 このような式の例としては、a + bMath.max(a, b)a.equals(b)s.substring(a,b) などが挙げられます。 常に同じ結果を得られるようにするため、式の中で使用される変数によって各式の値が変更されないことが確認されます。

このような式には、StringBigDecimal などのイミュータブルなクラスのメソッドのほか、ObjectsMath (random() を除く) などのユーティリティクラスのメソッドが含まれる場合があります。 Object.equals()Object.hashCode()Object.toString()Comparable.compareTo()Comparator.compare() などの一般的なメソッドも目に見える副作用が無いため、問題なく使用できます。

式の複雑度の最小しきい値を指定するには、「式の複雑度のしきい値」オプションを使用します。 それよりも大きな数値を指定すると、短い式に関する報告が省かれます。

同じ引数がある場合、Path.ofPaths.get の呼び出しは同等のものとして扱われます。 このような呼び出しは、どんなに引数が複雑であっても常に報告されます。 この動作は、さまざまな複雑度のしきい値を使用して調整可能です。

2018.3 の新機能です