package org.testory.common; import static org.testory.common.Checks.checkNotNull; public abstract class Effect { private Effect() {} public static abstract class Returned extends Effect { private Returned() {} } public static class ReturnedObject extends Returned { @Nullable public final Object object; private ReturnedObject(Object object) { this.object = object; } public String toString() { return "returned(" + object + ")"; } } public static class ReturnedVoid extends Returned { private ReturnedVoid() {} public String toString() { return "returnedVoid()"; } } public static class Thrown extends Effect { public final Throwable throwable; private Thrown(Throwable throwable) { this.throwable = throwable; } public String toString() { return "thrown(" + throwable + ")"; } } public static ReturnedObject returned(@Nullable Object object) { return new ReturnedObject(object); } public static Effect returnedVoid() { return new ReturnedVoid(); } public static Thrown thrown(Throwable throwable) { checkNotNull(throwable); return new Thrown(throwable); } }