Data Flow Constraint

めも。
データフロー制約を表記する言語が見つからないので、人にやさしい言語を少し考えてみる。

  • expr1 must expr2
    • expr1の評価は常にexpr2と同値
  • expr1 !must expr2
    • expr1の評価はexpr2と同値でない場合がある
  • expr1 may expr2
    • expr1の評価はexpr2と同値である場合がある
  • expr1 !may expr2
    • expr1の評価は常にexpr2と同値でない
access : {@link CtVariableAccess<?>}
invocation : {@link CtMethodInvocation<?>}
access.variable may null
access = invocation.qualifier
  • あるメソッド呼び出しに利用するレシーバオブジェクトは、nullと同値である場合がある

まだまだ駄目っぽい。

追記

Control Flow Constraintも欲しい。

streamを開いたら必ずcloseとか。フラットに解析するのは地獄だろうけど…

さらに追記

違和感を感じると思ったら、英語のmust/may notとここでの!must/mayは意味が違う…
論理学っぽい記号を使いたいので、別の手を考えなきゃ。