X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=parser%2Fyang-parser-reactor%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Freactor%2FReactorStmtCtx.java;h=f2a33e9f74734d631569f2b56760e7a9af73b7f5;hb=bc84355a85cafb4d8257a0e397c1efb2409aaf2e;hp=4fd73c7b94619a8e93f91241222f4774313d2e44;hpb=5747f2b4226c16696469d5098a34e92cd29ee0f1;p=yangtools.git diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java index 4fd73c7b94..f2a33e9f74 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java @@ -17,6 +17,7 @@ import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.common.Empty; @@ -42,6 +43,7 @@ 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.StatementFactory; 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; @@ -190,10 +192,10 @@ abstract class ReactorStmtCtx, E extends Effec public abstract RootStatementContext getRoot(); @Override - public abstract Collection> mutableDeclaredSubstatements(); + public abstract Collection> mutableDeclaredSubstatements(); @Override - public final @NonNull Registry getBehaviourRegistry() { + public final Registry getBehaviourRegistry() { return getRoot().getBehaviourRegistryImpl(); } @@ -238,12 +240,6 @@ abstract class ReactorStmtCtx, E extends Effec return QName.create(StmtContextUtils.getRootModuleQName(root), root.getRawArgument()); } - @Override - @Deprecated(since = "7.0.9", forRemoval = true) - public final EffectiveStatement original() { - return getOriginalCtx().map(StmtContext::buildEffective).orElse(null); - } - // // In the next two methods we are looking for an effective statement. If we already have an effective instance, // defer to it's implementation of the equivalent search. Otherwise we search our substatement contexts. @@ -298,8 +294,7 @@ abstract class ReactorStmtCtx, E extends Effec } protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("definition", definition()).add("rawArgument", rawArgument()) - .add("refCount", refString()); + return toStringHelper.add("definition", definition()).add("argument", argument()).add("refCount", refString()); } private String refString() { @@ -369,9 +364,11 @@ abstract class ReactorStmtCtx, E extends Effec QNameModule targetModule); @Override - public final ReactorStmtCtx replicaAsChildOf(final Mutable parent) { + public final ReplicaStatementContext replicaAsChildOf(final Mutable parent) { checkArgument(parent instanceof StatementContextBase, "Unsupported parent %s", parent); - return replicaAsChildOf((StatementContextBase) parent); + final var ret = replicaAsChildOf((StatementContextBase) parent); + definition().onStatementAdded(ret); + return ret; } abstract @NonNull ReplicaStatementContext replicaAsChildOf(@NonNull StatementContextBase parent); @@ -389,12 +386,6 @@ abstract class ReactorStmtCtx, E extends Effec } private @NonNull E loadEffective() { - // Creating an effective statement does not strictly require a declared instance -- there are statements like - // 'input', which are implicitly defined. - // Our implementation design makes an invariant assumption that buildDeclared() has been called by the time - // we attempt to create effective statement: - declared(); - final E ret = createEffective(); effectiveInstance = ret; // we have called createEffective(), substatements are no longer guarded by us. Let's see if we can clear up @@ -407,6 +398,20 @@ abstract class ReactorStmtCtx, E extends Effec abstract @NonNull E createEffective(); + /** + * Routing of the request to build an effective statement from {@link InferredStatementContext} towards the original + * definition site. This is needed to pick the correct instantiation method: for declared statements we will + * eventually land in {@link AbstractResumedStatement}, for underclared statements that will be + * {@link UndeclaredStmtCtx}. + * + * @param factory Statement factory + * @param ctx Inferred statement context, i.e. where the effective statement is instantiated + * @return Built effective stateue + */ + abstract @NonNull E createInferredEffective(@NonNull StatementFactory factory, + @NonNull InferredStatementContext ctx, Stream> declared, + Stream> effective); + /** * Attach an effective copy of this statement. This essentially acts as a map, where we make a few assumptions: *
    @@ -467,8 +472,9 @@ abstract class ReactorStmtCtx, E extends Effec // // + // Non-final form ImplicitStmtCtx @Override - public final boolean isSupportedToBuildEffective() { + public boolean isSupportedToBuildEffective() { return isSupportedToBuildEffective; }