Refactor AbstractEffectiveStatementInference
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaInferenceStack.java
index 708efcc914caf5b9e3c7578135e1fdc7145e2b8d..7bae59a880fa947f8a64b33d9ca9e6412bc4393e 100644 (file)
@@ -64,29 +64,31 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
      */
     @Beta
     public static final class Inference extends AbstractEffectiveStatementInference<EffectiveStatement<?, ?>> {
+        private final ArrayDeque<EffectiveStatement<?, ?>> deque;
         private final ModuleEffectiveStatement currentModule;
         private final int groupingDepth;
         private final boolean clean;
 
-        Inference(final @NonNull EffectiveModelContext modelContext,
-                final Iterator<? extends EffectiveStatement<?, ?>> path,
+        Inference(final @NonNull EffectiveModelContext modelContext, final ArrayDeque<EffectiveStatement<?, ?>> deque,
                 final ModuleEffectiveStatement currentModule, final int groupingDepth, final boolean clean) {
-            super(modelContext, ImmutableList.copyOf(path));
+            super(modelContext);
+            this.deque = requireNonNull(deque);
             this.currentModule = currentModule;
             this.groupingDepth = groupingDepth;
             this.clean = clean;
         }
 
+        @Override
+        public List<EffectiveStatement<?, ?>> statementPath() {
+            return ImmutableList.copyOf(deque.descendingIterator());
+        }
+
         /**
          * Convert this inference into a {@link SchemaInferenceStack}.
          *
          * @return A new stack
          */
         public @NonNull SchemaInferenceStack toSchemaInferenceStack() {
-            final List<EffectiveStatement<?, ?>> path = statementPath();
-            final ArrayDeque<EffectiveStatement<?, ?>> deque = new ArrayDeque<>(path.size());
-            path.forEach(deque::push);
-
             return new SchemaInferenceStack(getEffectiveModelContext(), deque, currentModule, groupingDepth, clean);
         }
     }
@@ -119,7 +121,7 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
             final ArrayDeque<EffectiveStatement<?, ?>> deque, final ModuleEffectiveStatement currentModule,
             final int groupingDepth, final boolean clean) {
         this.effectiveModel = requireNonNull(effectiveModel);
-        this.deque = requireNonNull(deque);
+        this.deque = deque.clone();
         this.currentModule = currentModule;
         this.groupingDepth = groupingDepth;
         this.clean = clean;
@@ -393,7 +395,7 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex
      * @return An {@link Inference}
      */
     public @NonNull Inference toInference() {
-        return new Inference(effectiveModel, deque.descendingIterator(), currentModule, groupingDepth, clean);
+        return new Inference(effectiveModel, deque.clone(), currentModule, groupingDepth, clean);
     }
 
     /**