Define ExecutionOrder
[yangtools.git] / yang / yang-parser-reactor / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / reactor / ReactorStmtCtx.java
index 8277b9033e2c52afbe2f7cd5fe372b5ff333e843..606b3c218035e9b44052db61fbc84a7e06609790 100644 (file)
@@ -40,6 +40,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.ExecutionOrder;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -437,19 +438,26 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
      */
     abstract @NonNull ReactorStmtCtx<A, D, E> unmodifiedEffectiveSource();
 
+    @Override
+    public final ModelProcessingPhase getCompletedPhase() {
+        return ModelProcessingPhase.ofExecutionOrder(executionOrder());
+    }
+
+    abstract byte executionOrder();
+
     /**
      * Try to execute current {@link ModelProcessingPhase} of source parsing. If the phase has already been executed,
-     * this method does nothing.
+     * this method does nothing. This must not be called with {@link ExecutionOrder#NULL}.
      *
      * @param phase to be executed (completed)
      * @return true if phase was successfully completed
      * @throws SourceException when an error occurred in source parsing
      */
-    final boolean tryToCompletePhase(final ModelProcessingPhase phase) {
-        return phase.isCompletedBy(getCompletedPhase()) || doTryToCompletePhase(phase);
+    final boolean tryToCompletePhase(final byte executionOrder) {
+        return executionOrder() >= executionOrder || doTryToCompletePhase(executionOrder);
     }
 
-    abstract boolean doTryToCompletePhase(ModelProcessingPhase phase);
+    abstract boolean doTryToCompletePhase(byte targetOrder);
 
     //
     //