@Override public final String toString() { return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); }
private boolean removeSatisfied() { final Iterator<AbstractPrerequisite<?>> it = unsatisfied.iterator(); while (it.hasNext()) { final AbstractPrerequisite<?> prereq = it.next(); if (prereq.isDone()) { // We are removing current prerequisite from list. LOG.trace("Modifier {} prerequisite {} satisfied", this, prereq); it.remove(); } } return unsatisfied.isEmpty(); }
final <O> @NonNull Prerequisite<O> transform(final Function<? super T, O> transformation) { return context -> transformation.apply(resolve(context)); }
@Override public <K, E extends EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>> Prerequisite<E> requiresEffective(final StmtContext<?, ?, ?> context, final Class<N> namespace, final K key) { final AbstractPrerequisite<StmtContext<?, ?, E>> rawContext = requiresCtxImpl(context, namespace, key, EFFECTIVE_MODEL); return rawContext.transform(StmtContext::buildEffective); }
@Override public <K, D extends DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>> Prerequisite<D> requiresDeclared(final StmtContext<?, ?, ?> context, final Class<N> namespace, final K key) { final AbstractPrerequisite<StmtContext<?, D, ?>> rawContext = requiresCtxImpl(context, namespace, key, FULL_DECLARATION); return rawContext.transform(StmtContext::buildDeclared); }
@Override ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { return super.addToStringAttributes(toStringHelper).add("phase", phase); } }
@Override public <E extends EffectiveStatement<?, ?>> Prerequisite<E> requiresEffective( final StmtContext<?, ?, ? extends E> stmt) { return requiresCtxImpl(stmt, EFFECTIVE_MODEL).transform(StmtContext::buildEffective); }
@Override public <D extends DeclaredStatement<?>> Prerequisite<D> requiresDeclared( final StmtContext<?, ? extends D, ?> context) { return requiresCtxImpl(context, FULL_DECLARATION).transform(StmtContext::buildDeclared); }