Trim down ReplicaStatementContext 94/93994/8
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 2 Dec 2020 14:43:35 +0000 (15:43 +0100)
committerRobert Varga <nite@hq.sk>
Thu, 3 Dec 2020 11:43:45 +0000 (11:43 +0000)
Shuffle around the code and class hierarchy to make
ReplicaStatementContext inherit only ReactorStmtCtx. This reduces
the size of the instance by about one half.

JIRA: YANGTOOLS-1184
Change-Id: Ibefc13a6302dd5799839af45bf47e26d232fb563
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java

index 194f61f0ce4d9c4830c10b20607eabf9c6febcd2..646ea112183f0d6208132be305a550d5f4dbdbcc 100644 (file)
@@ -46,7 +46,7 @@ abstract class AbstractResumedStatement<A, D extends DeclaredStatement<A>, E ext
     private final @NonNull StatementSourceReference statementDeclSource;
     private final String rawArgument;
 
-    private List<StatementContextBase<?, ?, ?>> effective = ImmutableList.of();
+    private List<ReactorStmtCtx<?, ?, ?>> effective = ImmutableList.of();
     private StatementMap substatements = StatementMap.empty();
     private @Nullable D declaredInstance;
 
@@ -192,7 +192,7 @@ abstract class AbstractResumedStatement<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Override
-    final Iterable<StatementContextBase<?, ?, ?>> effectiveChildrenToComplete() {
+    final Iterable<ReactorStmtCtx<?, ?, ?>> effectiveChildrenToComplete() {
         return effective;
     }
 
index 9de44e07c898fc6b783ff9c7d5c863857d33f120..b3f7278a884c32f1c12dded48f8ab356a05bac72 100644 (file)
@@ -258,14 +258,14 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
 
     // Instantiate this statement's effective substatements. Note this method has side-effects in namespaces and overall
     // BuildGlobalContext, hence it must be called at most once.
-    private List<StatementContextBase<?, ?, ?>> ensureEffectiveSubstatements() {
+    private List<ReactorStmtCtx<?, ?, ?>> ensureEffectiveSubstatements() {
         accessSubstatements();
         return substatements instanceof List ? castEffective(substatements)
             : initializeSubstatements(castMaterialized(substatements));
     }
 
     @Override
-    Iterable<StatementContextBase<?, ?, ?>> effectiveChildrenToComplete() {
+    Iterable<ReactorStmtCtx<?, ?, ?>> effectiveChildrenToComplete() {
         // When we have not initialized, there are no statements to catch up: we will catch up when we are copying
         // from prototype (which is already at ModelProcessingPhase.EFFECTIVE_MODEL).
         if (substatements == null) {
@@ -300,15 +300,15 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         substatements = SWEPT_SUBSTATEMENTS;
         int count = 0;
         if (local != null) {
-            final List<StatementContextBase<?, ?, ?>> list = castEffective(local);
+            final List<ReactorStmtCtx<?, ?, ?>> list = castEffective(local);
             sweep(list);
             count = countUnswept(list);
         }
         return count;
     }
 
-    private List<StatementContextBase<?, ?, ?>> initializeSubstatements(
-            final Map<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>> materializedSchemaTree) {
+    private List<ReactorStmtCtx<?, ?, ?>> initializeSubstatements(
+            final Map<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>> materializedSchemaTree) {
         final Collection<? extends StatementContextBase<?, ?, ?>> declared = prototype.mutableDeclaredSubstatements();
         final Collection<? extends Mutable<?, ?, ?>> effective = prototype.mutableEffectiveSubstatements();
 
@@ -322,8 +322,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
             copySubstatement(stmtContext, buffer, materializedSchemaTree);
         }
 
-        final List<StatementContextBase<?, ?, ?>> ret = beforeAddEffectiveStatementUnsafe(ImmutableList.of(),
-            buffer.size());
+        final List<ReactorStmtCtx<?, ?, ?>> ret = beforeAddEffectiveStatementUnsafe(ImmutableList.of(), buffer.size());
         ret.addAll((Collection) buffer);
         substatements = ret;
 
@@ -343,7 +342,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         YangStmtMapping.USES);
 
     private void copySubstatement(final Mutable<?, ?, ?> substatement, final Collection<Mutable<?, ?, ?>> buffer,
-            final Map<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>> materializedSchemaTree) {
+            final Map<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>> materializedSchemaTree) {
         final StatementDefinition def = substatement.publicDefinition();
 
         // FIXME: YANGTOOLS-652: formerly known as "isReusedByUses"
@@ -358,7 +357,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         //
         // We could also perform a Map.containsKey() and perform a bulk add, but that would mean the statement order
         // against parent would change -- and we certainly do not want that to happen.
-        final StatementContextBase<?, ?, ?> materialized = findMaterialized(materializedSchemaTree, substatement);
+        final ReactorStmtCtx<?, ?, ?> materialized = findMaterialized(materializedSchemaTree, substatement);
         if (materialized == null) {
             copySubstatement(substatement).ifPresent(copy -> {
                 ensureCompletedPhase(copy);
@@ -374,7 +373,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
     }
 
     private void addMaterialized(final StmtContext<?, ?, ?> template, final Mutable<?, ?, ?> copy) {
-        final HashMap<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>> materializedSchemaTree;
+        final HashMap<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>> materializedSchemaTree;
         if (substatements == null) {
             // Lazy initialization of backing map. We do not expect this to be used often or multiple times -- each hit
             // here means an inference along schema tree, such as deviate/augment. HashMap requires power-of-two and
@@ -395,21 +394,20 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         }
     }
 
-    private static @Nullable StatementContextBase<?, ?, ?> findMaterialized(
-            final Map<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>> materializedSchemaTree,
+    private static @Nullable ReactorStmtCtx<?, ?, ?> findMaterialized(
+            final Map<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>> materializedSchemaTree,
             final StmtContext<?, ?, ?> template) {
         return materializedSchemaTree == null ? null : materializedSchemaTree.get(template);
     }
 
     @SuppressWarnings("unchecked")
-    private static List<StatementContextBase<?, ?, ?>> castEffective(final Object substatements) {
-        return (List<StatementContextBase<?, ?, ?>>) substatements;
+    private static List<ReactorStmtCtx<?, ?, ?>> castEffective(final Object substatements) {
+        return (List<ReactorStmtCtx<?, ?, ?>>) substatements;
     }
 
     @SuppressWarnings("unchecked")
-    private static HashMap<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>> castMaterialized(
-            final Object substatements) {
-        return (HashMap<StmtContext<?, ?, ?>, StatementContextBase<?, ?, ?>>) substatements;
+    private static HashMap<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>> castMaterialized(final Object substatements) {
+        return (HashMap<StmtContext<?, ?, ?>, ReactorStmtCtx<?, ?, ?>>) substatements;
     }
 
     // Statement copy mess ends here
index e4b0dd37a25d214a6f1f7a37e5906dfdb5c5272f..b3d9dd7848ac903c393a880543d949f002bc97de 100644 (file)
@@ -42,6 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Regist
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamespace.SupportedFeatures;
 import org.slf4j.Logger;
@@ -320,6 +321,20 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
 
     abstract @NonNull E createEffective();
 
+    /**
+     * Try to execute current {@link ModelProcessingPhase} of source parsing. If the phase has already been executed,
+     * this method does nothing.
+     *
+     * @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);
+    }
+
+    abstract boolean doTryToCompletePhase(ModelProcessingPhase phase);
+
     //
     //
     // Flags-based mechanics. These include public interfaces as well as all the crud we have lurking in our alignment
index 071b73b37ae87469b9afa029bc716df3177f79f1..173e9315bac5587fe15289c71eeda00e38bca1d1 100644 (file)
@@ -9,15 +9,19 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.Optional;
-import java.util.stream.Stream;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
+import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 
@@ -26,11 +30,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReferenc
  * designated source.
  */
 final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
-        extends StatementContextBase<A, D, E> {
+        extends ReactorStmtCtx<A, D, E> {
     private final StatementContextBase<?, ?, ?> parent;
-    private final StatementContextBase<A, D, E> source;
+    private final ReactorStmtCtx<A, D, E> source;
 
-    ReplicaStatementContext(final StatementContextBase<?, ?, ?> parent, final StatementContextBase<A, D, E> source) {
+    ReplicaStatementContext(final StatementContextBase<?, ?, ?> parent, final ReactorStmtCtx<A, D, E> source) {
         super(source);
         this.parent = requireNonNull(parent);
         this.source = requireNonNull(source);
@@ -88,13 +92,29 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
     }
 
     @Override
-    boolean hasEmptySubstatements() {
-        return source.hasEmptySubstatements();
+    public ModelProcessingPhase getCompletedPhase() {
+        return source.getCompletedPhase();
     }
 
     @Override
-    Iterable<StatementContextBase<?, ?, ?>> effectiveChildrenToComplete() {
-        return ImmutableList.of();
+    public CopyHistory history() {
+        return source.history();
+    }
+
+    @Override
+    public Mutable<A, D, E> replicaAsChildOf(final Mutable<?, ?, ?> newParent) {
+        return source.replicaAsChildOf(newParent);
+    }
+
+    @Override
+    public Optional<? extends Mutable<?, ?, ?>> copyAsChildOf(final Mutable<?, ?, ?> newParent, final CopyType type,
+            final QNameModule targetModule) {
+        return source.copyAsChildOf(newParent, type, targetModule);
+    }
+
+    @Override
+    StatementDefinitionContext<A, D, E> definition() {
+        return source.definition();
     }
 
     @Override
@@ -106,43 +126,44 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
     }
 
     @Override
-    public Optional<StmtContext<A, D, E>> getPreviousCopyCtx() {
+    public <K, V, T extends K, U extends V, N extends IdentifierNamespace<K, V>> void addToNs(
+            final Class<@NonNull N> type, final T key, final U value) {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeStatementFromEffectiveSubstatements(final StatementDefinition statementDef) {
+    public Optional<StmtContext<A, D, E>> getPreviousCopyCtx() {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeStatementFromEffectiveSubstatements(final StatementDefinition statementDef,
-            final String statementArg) {
+    public <K, KT extends K, N extends StatementNamespace<K, ?, ?>> void addContext(final Class<@NonNull N> namespace,
+            final KT key, final StmtContext<?, ?, ?> stmt) {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void addEffectiveSubstatement(final Mutable<?, ?, ?> substatement) {
+    public void addAsEffectOfStatement(final StmtContext<?, ?, ?> ctx) {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    void addEffectiveSubstatementsImpl(final Collection<? extends Mutable<?, ?, ?>> statements) {
+    public void addAsEffectOfStatement(final Collection<? extends StmtContext<?, ?, ?>> ctxs) {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    Stream<? extends StmtContext<?, ?, ?>> streamDeclared() {
+    public Collection<? extends StmtContext<?, ?, ?>> getEffectOfStatement() {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    Stream<? extends StmtContext<?, ?, ?>> streamEffective() {
+    public Mutable<?, ?, ?> childCopyOf(final StmtContext<?, ?, ?> stmt, final CopyType type,
+            final QNameModule targetModule) {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    StatementContextBase<A, D, E> reparent(final StatementContextBase<?, ?, ?> newParent) {
+    @Override boolean doTryToCompletePhase(final ModelProcessingPhase phase) {
         throw new UnsupportedOperationException();
     }
 
index 46697255a863e15ac2faa37f435c253ea7ed971e..6903620c32347e7c9adc0b61a3c7ae917a2aee53 100644 (file)
@@ -149,12 +149,12 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     }
 
     @Override
-    public CopyHistory history() {
+    public final CopyHistory history() {
         return copyHistory;
     }
 
     @Override
-    public ModelProcessingPhase getCompletedPhase() {
+    public final ModelProcessingPhase getCompletedPhase() {
         return completedPhase;
     }
 
@@ -171,19 +171,18 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     }
 
     static final Collection<? extends Mutable<?, ?, ?>> mutableEffectiveSubstatements(
-            final List<StatementContextBase<?, ?, ?>> effective) {
+            final List<ReactorStmtCtx<?, ?, ?>> effective) {
         return effective instanceof ImmutableCollection ? effective : Collections.unmodifiableCollection(effective);
     }
 
-    private static List<StatementContextBase<?, ?, ?>> shrinkEffective(
-            final List<StatementContextBase<?, ?, ?>> effective) {
+    private static List<ReactorStmtCtx<?, ?, ?>> shrinkEffective(final List<ReactorStmtCtx<?, ?, ?>> effective) {
         return effective.isEmpty() ? ImmutableList.of() : effective;
     }
 
     public abstract void removeStatementFromEffectiveSubstatements(StatementDefinition statementDef);
 
-    static final List<StatementContextBase<?, ?, ?>> removeStatementFromEffectiveSubstatements(
-            final List<StatementContextBase<?, ?, ?>> effective, final StatementDefinition statementDef) {
+    static final List<ReactorStmtCtx<?, ?, ?>> removeStatementFromEffectiveSubstatements(
+            final List<ReactorStmtCtx<?, ?, ?>> effective, final StatementDefinition statementDef) {
         if (effective.isEmpty()) {
             return effective;
         }
@@ -214,8 +213,8 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     public abstract void removeStatementFromEffectiveSubstatements(StatementDefinition statementDef,
             String statementArg);
 
-    static final List<StatementContextBase<?, ?, ?>> removeStatementFromEffectiveSubstatements(
-            final List<StatementContextBase<?, ?, ?>> effective, final StatementDefinition statementDef,
+    static final List<ReactorStmtCtx<?, ?, ?>> removeStatementFromEffectiveSubstatements(
+            final List<ReactorStmtCtx<?, ?, ?>> effective, final StatementDefinition statementDef,
             final String statementArg) {
         if (statementArg == null) {
             return removeStatementFromEffectiveSubstatements(effective, statementDef);
@@ -225,7 +224,7 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
             return effective;
         }
 
-        final Iterator<StatementContextBase<?, ?, ?>> iterator = effective.iterator();
+        final Iterator<ReactorStmtCtx<?, ?, ?>> iterator = effective.iterator();
         while (iterator.hasNext()) {
             final Mutable<?, ?, ?> next = iterator.next();
             if (statementDef.equals(next.publicDefinition()) && statementArg.equals(next.rawArgument())) {
@@ -258,12 +257,12 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
      */
     public abstract void addEffectiveSubstatement(Mutable<?, ?, ?> substatement);
 
-    final List<StatementContextBase<?, ?, ?>> addEffectiveSubstatement(
-            final List<StatementContextBase<?, ?, ?>> effective, final Mutable<?, ?, ?> substatement) {
+    final List<ReactorStmtCtx<?, ?, ?>> addEffectiveSubstatement(final List<ReactorStmtCtx<?, ?, ?>> effective,
+            final Mutable<?, ?, ?> substatement) {
         verifyStatement(substatement);
 
-        final List<StatementContextBase<?, ?, ?>> resized = beforeAddEffectiveStatement(effective, 1);
-        final StatementContextBase<?, ?, ?> stmt = (StatementContextBase<?, ?, ?>) substatement;
+        final List<ReactorStmtCtx<?, ?, ?>> resized = beforeAddEffectiveStatement(effective, 1);
+        final ReactorStmtCtx<?, ?, ?> stmt = (ReactorStmtCtx<?, ?, ?>) substatement;
         final ModelProcessingPhase phase = completedPhase;
         if (phase != null) {
             ensureCompletedPhase(stmt, phase);
@@ -290,10 +289,9 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
 
     abstract void addEffectiveSubstatementsImpl(Collection<? extends Mutable<?, ?, ?>> statements);
 
-    final List<StatementContextBase<?, ?, ?>> addEffectiveSubstatementsImpl(
-            final List<StatementContextBase<?, ?, ?>> effective,
+    final List<ReactorStmtCtx<?, ?, ?>> addEffectiveSubstatementsImpl(final List<ReactorStmtCtx<?, ?, ?>> effective,
             final Collection<? extends Mutable<?, ?, ?>> statements) {
-        final List<StatementContextBase<?, ?, ?>> resized = beforeAddEffectiveStatement(effective, statements.size());
+        final List<ReactorStmtCtx<?, ?, ?>> resized = beforeAddEffectiveStatement(effective, statements.size());
         final Collection<? extends StatementContextBase<?, ?, ?>> casted =
             (Collection<? extends StatementContextBase<?, ?, ?>>) statements;
         final ModelProcessingPhase phase = completedPhase;
@@ -307,39 +305,38 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
         return resized;
     }
 
-    abstract Iterable<StatementContextBase<?, ?, ?>> effectiveChildrenToComplete();
+    abstract Iterable<ReactorStmtCtx<?, ?, ?>> effectiveChildrenToComplete();
 
     // exposed for InferredStatementContext only
     final void ensureCompletedPhase(final Mutable<?, ?, ?> stmt) {
         verifyStatement(stmt);
         final ModelProcessingPhase phase = completedPhase;
         if (phase != null) {
-            ensureCompletedPhase((StatementContextBase<?, ?, ?>) stmt, phase);
+            ensureCompletedPhase((ReactorStmtCtx<?, ?, ?>) stmt, phase);
         }
     }
 
     // Make sure target statement has transitioned at least to specified phase. This method is just before we take
     // allow a statement to become our substatement. This is needed to ensure that every statement tree does not contain
     // any statements which did not complete the same phase as the root statement.
-    private static void ensureCompletedPhase(final StatementContextBase<?, ?, ?> stmt,
-            final ModelProcessingPhase phase) {
+    private static void ensureCompletedPhase(final ReactorStmtCtx<?, ?, ?> stmt, final ModelProcessingPhase phase) {
         verify(stmt.tryToCompletePhase(phase), "Statement %s cannot complete phase %s", stmt, phase);
     }
 
     private static void verifyStatement(final Mutable<?, ?, ?> stmt) {
-        verify(stmt instanceof StatementContextBase, "Unexpected statement %s", stmt);
+        verify(stmt instanceof ReactorStmtCtx, "Unexpected statement %s", stmt);
     }
 
-    private List<StatementContextBase<?, ?, ?>> beforeAddEffectiveStatement(
-            final List<StatementContextBase<?, ?, ?>> effective, final int toAdd) {
+    private List<ReactorStmtCtx<?, ?, ?>> beforeAddEffectiveStatement(final List<ReactorStmtCtx<?, ?, ?>> effective,
+            final int toAdd) {
         // We cannot allow statement to be further mutated
         verify(completedPhase != ModelProcessingPhase.EFFECTIVE_MODEL, "Cannot modify finished statement at %s",
             sourceReference());
         return beforeAddEffectiveStatementUnsafe(effective, toAdd);
     }
 
-    final List<StatementContextBase<?, ?, ?>> beforeAddEffectiveStatementUnsafe(
-            final List<StatementContextBase<?, ?, ?>> effective, final int toAdd) {
+    final List<ReactorStmtCtx<?, ?, ?>> beforeAddEffectiveStatementUnsafe(final List<ReactorStmtCtx<?, ?, ?>> effective,
+            final int toAdd) {
         final ModelProcessingPhase inProgressPhase = getRoot().getSourceContext().getInProgressPhase();
         checkState(inProgressPhase == ModelProcessingPhase.FULL_DECLARATION
                 || inProgressPhase == ModelProcessingPhase.EFFECTIVE_MODEL,
@@ -358,19 +355,8 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
 
     abstract Stream<? extends StmtContext<?, ?, ?>> streamEffective();
 
-    /**
-     * Try to execute current {@link ModelProcessingPhase} of source parsing. If the phase has already been executed,
-     * this method does nothing.
-     *
-     * @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(completedPhase) || doTryToCompletePhase(phase);
-    }
-
-    private boolean doTryToCompletePhase(final ModelProcessingPhase phase) {
+    @Override
+    final boolean doTryToCompletePhase(final ModelProcessingPhase phase) {
         final boolean finished = phaseMutation.isEmpty() ? true : runMutations(phase);
         if (completeChildren(phase) && finished) {
             onPhaseCompleted(phase);
@@ -384,7 +370,7 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
         for (final StatementContextBase<?, ?, ?> child : mutableDeclaredSubstatements()) {
             finished &= child.tryToCompletePhase(phase);
         }
-        for (final StatementContextBase<?, ?, ?> child : effectiveChildrenToComplete()) {
+        for (final ReactorStmtCtx<?, ?, ?> child : effectiveChildrenToComplete()) {
             finished &= child.tryToCompletePhase(phase);
         }
         return finished;
@@ -678,12 +664,12 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     }
 
     @Override
-    public final StatementContextBase<A, D, E> replicaAsChildOf(final Mutable<?, ?, ?> parent) {
+    public final ReactorStmtCtx<A, D, E> replicaAsChildOf(final Mutable<?, ?, ?> parent) {
         checkArgument(parent instanceof StatementContextBase, "Unsupported parent %s", parent);
         return replicaAsChildOf((StatementContextBase<?, ?, ?>) parent);
     }
 
-    final @NonNull StatementContextBase<A, D, E> replicaAsChildOf(final StatementContextBase<?, ?, ?> stmt) {
+    final @NonNull ReplicaStatementContext<A, D, E> replicaAsChildOf(final StatementContextBase<?, ?, ?> stmt) {
         return new ReplicaStatementContext<>(stmt, this);
     }
 
index 6eb0b1d005f4da876c0d27eb66e6d703b8bc8114..b277bf02568b364869ce53978ed621017916334f 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -64,6 +65,7 @@ public final class ActionStatementSupport extends
     public void onFullDefinitionDeclared(final Mutable<QName, ActionStatement, ActionEffectiveStatement> stmt) {
         super.onFullDefinitionDeclared(stmt);
 
+        verify(stmt instanceof StatementContextBase);
         if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) {
             ((StatementContextBase<?, ?, ?>) stmt).appendImplicitSubstatement(
                 InputStatementRFC7950Support.getInstance(), null);
index 6760b21818285dedfb433f95425ea8363cf87ce2..06909a6cd2d28f6a2e42df223b3f3a772a0f2d3d 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
 
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -53,6 +54,7 @@ abstract class AbstractRpcStatementSupport extends BaseSchemaTreeStatementSuppor
     public final void onFullDefinitionDeclared(final Mutable<QName, RpcStatement, RpcEffectiveStatement> stmt) {
         super.onFullDefinitionDeclared(stmt);
 
+        verify(stmt instanceof StatementContextBase);
         if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) {
             ((StatementContextBase<?, ?, ?>) stmt).appendImplicitSubstatement(implictInput(), null);
         }