X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-reactor%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Freactor%2FStatementContextBase.java;h=a331d6b6d91619da119fcc3323aa94dee5a478a5;hb=cd04351669d5921088a73a275954ba78336c1a44;hp=d305f77879a8e25fb5d480b5ba2f8a7f6ff44bf1;hpb=c294e6dcdbf2f577723ab1bf7aa8f4762ca1d290;p=yangtools.git diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index d305f77879..a331d6b6d9 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; @@ -286,11 +285,11 @@ public abstract class StatementContextBase, E final List> addEffectiveSubstatementsImpl(final List> effective, final Collection> statements) { final List> resized = beforeAddEffectiveStatement(effective, statements.size()); - final Collection> casted = - (Collection>) statements; + final Collection> casted = + (Collection>) statements; final ModelProcessingPhase phase = completedPhase; if (phase != null) { - for (StatementContextBase stmt : casted) { + for (ReactorStmtCtx stmt : casted) { ensureCompletedPhase(stmt, phase); } } @@ -358,9 +357,23 @@ public abstract class StatementContextBase, E return factory.createEffective(ctx, ctx.streamDeclared(), ctx.streamEffective()); } - abstract Stream> streamDeclared(); + /** + * Return a stream of declared statements which can be built into an {@link EffectiveStatement}, as per + * {@link StmtContext#buildEffective()} contract. + * + * @return Stream of supported declared statements. + */ + // FIXME: we really want to unify this with streamEffective(), under its name + abstract Stream> streamDeclared(); - abstract Stream> streamEffective(); + /** + * Return a stream of inferred statements which can be built into an {@link EffectiveStatement}, as per + * {@link StmtContext#buildEffective()} contract. + * + * @return Stream of supported effective statements. + */ + // FIXME: this method is currently a misnomer, but unifying with streamDeclared() would make this accurate again + abstract Stream> streamEffective(); @Override final boolean doTryToCompletePhase(final ModelProcessingPhase phase) { @@ -434,21 +447,21 @@ public abstract class StatementContextBase, E } private void summarizeSubstatementPolicy() { - if (noSensitiveSubstatements()) { + if (definition().support().copyPolicy() == CopyPolicy.EXACT_REPLICA || noSensitiveSubstatements()) { setAllSubstatementsContextIndependent(); } } /** - * Determine whether any substatements are context-sensitive as determined by {@link StatementSupport#copyPolicy()}. - * Only {@link CopyPolicy#CONTEXT_INDEPENDENT} and {@link CopyPolicy#IGNORE} are context-insensitive. Note that - * statements which are not {@link StmtContext#isSupportedToBuildEffective()} are all considered - * context-insensitive. + * Determine whether any substatements are copy-sensitive as determined by {@link StatementSupport#copyPolicy()}. + * Only {@link CopyPolicy#CONTEXT_INDEPENDENT}, {@link CopyPolicy#EXACT_REPLICA} and {@link CopyPolicy#IGNORE} are + * copy-insensitive. Note that statements which are not {@link StmtContext#isSupportedToBuildEffective()} are all + * considered copy-insensitive. * *

* Implementations are expected to call {@link #noSensitiveSubstatements()} to actually traverse substatement sets. * - * @return True if no substatements require context-sensitive handling + * @return True if no substatements require copy-sensitive handling */ abstract boolean noSensitiveSubstatements(); @@ -469,6 +482,7 @@ public abstract class StatementContextBase, E switch (stmt.definition().support().copyPolicy()) { case CONTEXT_INDEPENDENT: + case EXACT_REPLICA: case IGNORE: break; default: @@ -592,8 +606,8 @@ public abstract class StatementContextBase, E * @throws NullPointerException if any of the arguments is null */ void addPhaseCompletedListener(final ModelProcessingPhase phase, final OnPhaseFinished listener) { - checkNotNull(phase, "Statement context processing phase cannot be null at: %s", sourceReference()); - checkNotNull(listener, "Statement context phase listener cannot be null at: %s", sourceReference()); + requireNonNull(phase, "Statement context processing phase cannot be null"); + requireNonNull(listener, "Statement context phase listener cannot be null"); ModelProcessingPhase finishedPhase = completedPhase; while (finishedPhase != null) { @@ -654,6 +668,8 @@ public abstract class StatementContextBase, E final StatementSupport support = definition.support(); final CopyPolicy policy = support.copyPolicy(); switch (policy) { + case EXACT_REPLICA: + return replicaAsChildOf(parent); case CONTEXT_INDEPENDENT: if (allSubstatementsContextIndependent()) { return replicaAsChildOf(parent); @@ -682,7 +698,7 @@ public abstract class StatementContextBase, E } parent.ensureCompletedPhase(copy); - return canReuseCurrent(copy) ? replicaAsChildOf(parent) : copy; + return canReuseCurrent(copy) ? this : copy; } private boolean canReuseCurrent(final ReactorStmtCtx copy) {