public synchronized CompletableFuture<T> waitUntil(Predicate<T> predicate) {
		if (disposalReason != null) {
			return CompletableFuture.failedFuture(disposalReason);
		}
		if (predicate.test(val)) {
			return CompletableFuture.completedFuture(val);
		}
		WaitUntilFuture<T> waiter = new WaitUntilFuture<>(predicate);
		waitsUntil.add(waiter);
		return waiter;
	}
Wait for this reference to accept the first value meeting the given condition (post-filter)

<p>
If the current value already meets the condition, a completed future is returned.

@param predicate the condition to meet
@return a future that completes the next time the reference accepts a passing value
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncReference.java