Refactor InferenceAction
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / reactor / ModifierImpl.java
index 0e5cdc8dde50bd48685df9a75d6af3fa1d34357c..e917f958ef65a026d840982fc7866999e79e551d 100644 (file)
@@ -34,20 +34,17 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.
 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);
@@ -81,10 +78,6 @@ class ModifierImpl implements ModelActionBuilder {
         return unsatisfied.isEmpty();
     }
 
-    ModelProcessingPhase getPhase() {
-        return phase;
-    }
-
     boolean isApplied() {
         return actionApplied;
     }
@@ -97,7 +90,7 @@ class ModifierImpl implements ModelActionBuilder {
 
     private void applyAction() {
         Preconditions.checkState(!actionApplied);
-        action.apply();
+        action.apply(ctx);
         actionApplied = true;
     }
 
@@ -259,8 +252,9 @@ class ModifierImpl implements ModelActionBuilder {
         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;
         }
 
@@ -275,7 +269,7 @@ class ModifierImpl implements ModelActionBuilder {
         }
 
         final <O> Prerequisite<O> transform(final Function<? super T, O> transformation) {
-            return () -> transformation.apply(get());
+            return ctx -> transformation.apply(resolve(ctx));
         }
 
         @Override
@@ -305,7 +299,7 @@ class ModifierImpl implements ModelActionBuilder {
         @SuppressWarnings("unchecked")
         @Override
         public boolean phaseFinished(final StatementContextBase<?, ?, ?> context, final ModelProcessingPhase phase) {
-            return resolvePrereq((C) (context));
+            return resolvePrereq((C) context);
         }
     }