このインテンションは、ライブラリメソッドの契約を変更します。
メソッド契約は以下の構文を使用します。
contract ::= (clause ';')* clause
clause ::= args '->' effect
args ::= ((arg ',')* arg )?
arg ::= value-constraint
value-constraint ::= '_' | 'null' | '!null' | 'false' | 'true'
effect ::= value-constraint | 'fail' | 'new' | 'this' | 'param' number
number ::= [1-9] [0-9]*
各制約 (constraint) は以下を意味します。
-
_: 任意の値
-
null: null 値
-
null!: null でないことが静的に証明されている値
-
true: ブール値の true
-
false: ブール値の false
-
fail: 引数が引数の制約を満たす場合にメソッドが例外をスローする
-
new: メソッドが実行されるたびに、メソッド実行前にヒープに存在する他のオブジェクトとは異なる非 null の新しいオブジェクトが返される。 メソッドが純粋な場合、新しいオブジェクトはフィールドにも配列にも格納されず、メソッドの戻り値が使用されない場合は失われます。
-
this: メソッドが非 null の this 参照を返す
-
param1 (param2、param3 など): メソッドが第 1 (第 2、第 3 など) 引数を返す
例:
-
@Contract("_, null -> null"): メソッドは第 2 引数が null の場合に null を返します。
-
@Contract("_, null -> null; _, !null -> !null") - メソッドは第 2 引数が null の場合は null を返し、それ以外の場合は非 null 値を返します。
-
@Contract("true -> fail") - true が渡される場合に例外をスローする典型的な assertFalse メソッドです。