問題タブ [checker-framework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - @Java 型チェッカー アノテーションの保持
Java 8 型注釈 (JSR 308) により、型チェッカーは静的コード分析を実行できます。たとえば、チェッカー フレームワークは、注釈を介してnullの可能性をチェックでき@NonNull
ます。
さまざまなプロジェクトが独自のNonNullアノテーションを定義しています。たとえば、次のようになります。
org.checkerframework.checker.nullness.qual.NonNull
edu.umd.cs.findbugs.annotations.NonNull
javax.annotation.Nonnull
javax.validation.constraints.NotNull
lombok.NonNull
org.eclipse.jdt.annotation.NonNull
- など ( Checker Framework マニュアルのセクション 3.7 を参照)
このような注釈については、通常は実行時に必要ないため、 が@interface
を持つことを期待します。@Retention(RetentionPolicy.CLASS)
最も重要なことは、コードがそれぞれのライブラリにランタイムの依存関係を持たないことです。
whileorg.eclipse.jdt.annotation.NonNull
このアプローチに従いますが、(JSR 305) やそれ自体など、他のほとんどのNonNullアノテーションには. これらの注釈に特別な理由はありますか?javax.annotation.Nonnull
org.checkerframework.checker.nullness.qual.NonNull
@Retention(RetentionPolicy.RUNTIME)
RetentionPolicy.RUNTIME
明確化: Checker Framework は、下位互換性のためにコメント内の注釈をサポートしています。ただし、実行時の依存関係を回避するためだけに Java 8 でそれらを使用するのは、汚いハックのように思えます。
java - Checker Framework Error java: [contracts.precondition.not.satisfied] 'Holding.yz' を保持する必要があるメソッド 'method()' への無防備な呼び出しを修正する方法
から適切に呼び出す方法method()
はmain(..)
?
エラー:(37, 23) Java: [contracts.precondition.not.satisfied] 'Holding.yz' を保持する必要があるメソッド 'method()' への無防備な呼び出し
checker-framework - 副作用の保証が弱いメソッドを呼び出すにはどうすればよいですか?
ロックチェッカーからこれを取得しました:
コードを投稿できますが、問題ありません。副作用メソッドの呼び出しに関するドキュメントがわかりません。
java - 型修飾子とチェッカー フレームワークを使用してマイクロ型を実装する方法は?
私は Checker Framework の初心者なので、完全に間違ったことをしている可能性があります。
モデルのマイクロタイプを取り除きたいので、書く代わりに
のようなものを書きたいと思います
すべてのキーは文字列であるか、文字列として表すことができるためです。
これを行う適切な方法は何ですか?修飾子の階層と境界に関するドキュメントを読んでいますが、すべてが複雑すぎるようで、基本がわかりません。
私が望むのは、@TypeAId、@TypeBId などの単純な注釈を付けることです。そのため、以下のコードはコンパイル時にエラーを生成するはずです。
更新 1 :「サブタイピング」を使用する必要があるように見えますが、サブタイプ注釈の書き方がわからないため、以下が適用されます。
更新 2 : 現時点では:
そして得る:
java - ロード時に Checker Framework Eclipse プラグインが例外をスローする
Eclipse 4.6.2 とプラグイン「Checker Framework Feature」2.1.7 がインストールされています。
プラグインを初めて使用するとき (たとえば、右クリックしてコンテキスト メニュー項目 [Checker Framework/Run Built-in Checker] にカーソルを合わせたとき)、Eclipse エラー ログに次のエラーが表示されます。
クラスSignednessActionの大文字/小文字に問題があるようです...
誰でも助けることができますか?Checker Framework を使用したいです。
本当にありがとう!
checker-framework - 行番号などを含む完全なコンパイル エラー メッセージ情報を Checker FrameWork に表示する方法
Checker Framework の使用を開始したばかりで、このフレームワークの作成者によるサンプル プロジェクトの 1 つで正確に再現可能な問題があります。このプロジェクトはこちらから入手できます: https://github.com/typetools/checker-framework/tree/master/docs/examples/GradleExamples
ルートからこのコマンドを実行すると:
私はこのコンパイル出力を受け取ります:
ご覧のとおり、クラス名、コードの行番号など、エラーが発生した場所に関する情報はありません。公式マニュアルには、出力形式を適切に変更できるコンパイラパラメーターに関する情報が見つかりませんでした。エラーメッセージは次のようになります。
アップデート:
3 台のマシンでこの動作を実現します。
- OS: Microsoft Windows 7 x64 Ultimate SP1 [バージョン 6.1.7601];
- Java: 1.8.0_73;
- グラドル: 2.14.
- OS: Microsoft Windows 10 x64 Pro [バージョン 10.0.14393];
- Java: 1.8.0_121;
- グラドル: 3.4.1.
- OS: Microsoft Windows 7 x64 Ultimate SP1 [バージョン 6.1.7601];
- Java: 1.8.0_121;
- グラドル: 3.4.1.
行番号とクラス名がないのは、Gradle で実行している場合のみです。また、コマンド ラインから Maven と Javac を使用してチェッカーを実行しようとしましたが、完全に機能しました。
Gradle で Checker Framework を構成するには、マニュアルの手順に従いました。3 つのステップがあります。
- フレームワークをダウンロードします。
- それを解凍して、チェッカー フレームワーク ディレクトリを作成します。
- クラスパスに Checker Framework を含めるように Gradle を構成します。
私が理解しているように、Gradle は依存関係管理を通じて必要な Checker Framework の jar を提供するときに、ステップ 1 と 2 を自動的に実行します。それにもかかわらず、私は両方のオプションを試しました:
- 依存関係の管理:
サンプル プロジェクトをダウンロードし、GradleJava7Example プロジェクトのルートから「gradle compileJava」を実行しました。 - gradleビルドファイルに手動でパスを書く: