src/main/java/com/googlecode/objectify/cache/TriggerFuture.java
@Override
	public boolean isDone() {
		boolean done = this.raw.isDone();
		
		if (!triggered && done) {
			this.triggered = true;
			PendingFutures.removePending(this);
			
			this.trigger();
		}

		return done;
	}
@Override
	public boolean isDone() {
		boolean done = this.raw.isDone();
		
		if (!triggered && done) {
			this.triggered = true;
			PendingFutures.removePending(this);
			
			this.trigger();
		}

		return done;
	}
@ Override public boolean isDone ( ) { boolean done = this . raw . isDone ( ) ; if ( ! triggered && done ) { this . triggered = true ; PendingFutures . removePending ( this ) ; this . trigger ( ) ; } return done ; }
This version also checks to see if we are done and we still need to call the trigger.
If so, it calls it.

@see java.util.concurrent.Future#isDone()
This version also checks to see if we are done and we still need to call the trigger . If so it calls it .