4

私は IJ で Java コードベースに取り組んでおり、現在 Maven で構築しています。コードの一部を、Maven ビルドで取り上げられる何らかの形式のコントラクトで補足したいと思います。これまでのところ、私はそのような機能を既製品で探すことに成功していません。

  • OpenJMLですが、コードを分析するには独自のツールが必要なようで、ビルドに簡単に統合する方法が見つかりませんでした。
  • Jetbrains 契約。これらはインスペクションを介して IntelliJ で警告を発しますが、ビルドには影響しません。

注:ここでは、コンパイル時にチェック可能なコントラクトのみを扱います。ランタイム側でスローするJUnitがあります。

実施する契約:

このセクションを追加して、どのような種類の契約を施行したいかというコメントに答えました。理想的には、そのソリューションが完全であることを条件として、可能な限り最も強力なソリューションを希望します。ここで完全とは、言語のすべてのステートメントがコンパイル時にチェッカーによって良いか悪いかをチェックできるような、コントラクトの言語とコントラクト チェッカーを意味します。これは大きな質問かもしれませんが、Jetbrains が提供するものなど、最も単純な契約でも満足します。

具体的な例として、次の関数を検討してください。

public static Long safeToLong(String value) {
    if (value == null) {
      return null;
    }
    try {
      return Long.parseLong(value);
    } catch (NumberFormatException e) {
      return null;
    }
  }

これにより、Jetbrains コントラクトが正常に通過します。

@Contract("null -> null")

そして、この不自然な契約は失敗します:

@Contract("null -> !null")

しかし、上記の不自然で悪いコントラクトを使用しても、Maven ビルドは問題なく動作します。ビルドは検査結果を取得しません。これらは IJ 内からのみ表示されます。ビルドにフックして、契約に違反した場合に失敗できるようにしたいと思います。

4

1 に答える 1