package xsched; /* * this task "implementation" is only for the analysis side to make examples compile. To actually use tasks in a program, use the XSchedRuntime implementation * * because we have to "trick" the points to analysis etc. we do not use Task.schedule(...) and then rewrite that for the analysis but do it the other way around * so we write in the code Task t = new Task(); obj.foo(t, otherTask, 42, "abc") and rewrite that into Task t = Task.schedule(obj, "foo", otherTask, 42, "abc"). * * the first parameter in a task method must always be the now object and on the caller site t must always be a "freshly created" task method * */ public final class Task<R> { public Task() { } public R result() { return null; } public synchronized final void hb(Task<R> later) { } }