安全でないオブジェクトが @Untainted アノテーションが付いたパラメーターのあるメソッドに渡され、アノテーション付きのメソッドから返されているか、アノテーション付きのフィールド、パラメーター、またはローカル変数に割り当てられている場合に報告します。 フィールドの Kotlin set および get メソッドはエントリポイントとしてサポートされていません。

(同じクラス内の) 安全なオブジェクトには次のものがあります。

また、static final フィールドは安全と見なされます。

解析は 1 つのファイル内でのみ実行されます。 他のクラスの依存関係を処理するには、オプションを使用します。 解析は private または static にまで拡張されますが、深さの伝播に制限があります。

例:


  void doSmth(boolean b) {
    String s = safe();
    String s1 = "other";
    if (b) s1 = s;
    sink(s);
  }

  String sink(@Untainted String s) {}

ここでは s に対する安全でない文字列代入がないため、警告は発生しません。 別の例:


  void doSmth(boolean b) {
    String s = safe();
    String s1 = "other";
    s1 = foo();
    if (b) s = s1;
    sink(s);        // ここで警告が発生します
  }
  
  String foo();

  String sink(@Untainted String s) {}

ここでは foo 呼び出しの結果を代入した後の s1 の状態が不明であるため、警告が発生します。

2021.2 の新機能です