import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; class Foo { @Contract("!null,true->!null") String delegationToInstance(@NotNull Foo f, boolean createIfNeeded) { return f.getString(createIfNeeded); } @Contract("!null,false->!null") String delegationToInstanceOk(@NotNull Foo f, boolean createIfNeeded) { return f.getString(createIfNeeded); } @Contract("true->fail") String getString(boolean fail) { if (fail) throw new RuntimeException(); return "a"; } }