もうちょっと単純に考える

裏側の理屈はともかくとして、もうちょっと自分が使いやすいように考えてみる。

やりたいこと

  • すべてのjava.io.InputStreamは
  • close()が呼び出されなければならない (呼び出されないものを探して警告)

単純に書いてみたもの

// すべてのjava.io.InputStreamは
stream instanceof java.io.InputStream
// 否定
except {
  // closeが
  close <: java.io.InputStream#close()
  // 呼び出されなければならない
  stream MUST PROCEED close
}

要は、表明したいことが

  • stream instanceof InputStream => stream.close() が必ず呼び出される

なんだから、この論理式が偽になるところで警告を出せばよいので、

  • stream instanceof InputStream => not { stream.close() が必ず呼び出される }

を探せばいい。

ボキャブラリの選択にはかなり気を使わないとダメそう。
もうちょっと考えます。