このインテンションは、ライブラリメソッドの契約を変更します。
メソッドコントラクトは以下の構文を使用します。
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 など): メソッドは最初 (2 番目、3 番目など) の引数を返します
例:
-
@Contract("_, null -> null"): メソッドは 2 つ目の引数が null の場合に null を返します。
-
@Contract("_, null -> null; _, !null -> !null") - メソッドは 2 つ目の引数が null の場合は null を返し、それ以外の場合は null 以外の値を返します.
-
@Contract("true -> fail") - true が渡される場合に例外をスローする典型的な assertFalse メソッド