public final void doComplete() throws BadHookException {
		if (error != null) {
			throw new BadHookException("Error in matcher", this, error);
		} else if (matches < 1) {
			throw new BadHookException("Provider found no matches", this);
		} else if (matches > 1) {
			throw new BadHookException("Provider found multiple matches", this);
		}
		try {
			complete();
		} catch (Throwable e) {
			error = e;
			throw new BadHookException("Error on completion", this, error);
		}
	}