import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class ModifierImpl implements ModelActionBuilder {
+final class ModifierImpl implements ModelActionBuilder {
private static final Logger LOG = LoggerFactory.getLogger(ModifierImpl.class);
+ private final InferenceContext ctx = new InferenceContext() { };
+
private final Set<AbstractPrerequisite<?>> unsatisfied = new HashSet<>(1);
private final Set<AbstractPrerequisite<?>> mutations = new HashSet<>(1);
- private final ModelProcessingPhase phase;
private InferenceAction action;
private boolean actionApplied = false;
- ModifierImpl(final ModelProcessingPhase phase) {
- this.phase = Preconditions.checkNotNull(phase);
- }
-
private <D> AbstractPrerequisite<D> addReq(final AbstractPrerequisite<D> prereq) {
LOG.trace("Modifier {} adding prerequisite {}", this, prereq);
unsatisfied.add(prereq);
return unsatisfied.isEmpty();
}
- ModelProcessingPhase getPhase() {
- return phase;
- }
-
boolean isApplied() {
return actionApplied;
}
private void applyAction() {
Preconditions.checkState(!actionApplied);
- action.apply();
+ action.apply(ctx);
actionApplied = true;
}
private T value;
@Override
- public final T get() {
- Preconditions.checkState(isDone());
+ public final T resolve(final InferenceContext ctx) {
+ Preconditions.checkState(done);
+ Preconditions.checkArgument(ctx == ModifierImpl.this.ctx);
return value;
}
}
final <O> Prerequisite<O> transform(final Function<? super T, O> transformation) {
- return () -> transformation.apply(get());
+ return ctx -> transformation.apply(resolve(ctx));
}
@Override
@SuppressWarnings("unchecked")
@Override
public boolean phaseFinished(final StatementContextBase<?, ?, ?> context, final ModelProcessingPhase phase) {
- return resolvePrereq((C) (context));
+ return resolvePrereq((C) context);
}
}