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%2FInferredStatementContext.java;h=9349e3ff6ca2b5c6f31d462e85b96cc19c810075;hb=0f34ef9c1d749b903a476b84c3c54e5e98225669;hp=b1693ae1d592d3090b0a45bcca01f4420f24506b;hpb=db65d54257bccbb283d47e023a803daccad1ec1d;p=yangtools.git
diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
index b1693ae1d5..9349e3ff6c 100644
--- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
+++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
@@ -87,7 +87,7 @@ final class InferredStatementContext, E extend
private final @NonNull StatementContextBase prototype;
private final @NonNull StatementContextBase, ?, ?> parent;
- private final @NonNull StmtContext originalCtx;
+ private final @NonNull ReactorStmtCtx originalCtx;
private final QNameModule targetModule;
private final A argument;
@@ -122,7 +122,10 @@ final class InferredStatementContext, E extend
this.argument = targetModule == null ? prototype.argument()
: prototype.definition().adaptArgumentValue(prototype, targetModule);
this.targetModule = targetModule;
- this.originalCtx = prototype.getOriginalCtx().orElse(prototype);
+
+ final var origCtx = prototype.getOriginalCtx().orElse(prototype);
+ verify(origCtx instanceof ReactorStmtCtx, "Unexpected original %s", origCtx);
+ this.originalCtx = (ReactorStmtCtx) origCtx;
// Mark prototype as blocking statement cleanup
prototype.incRef();
@@ -212,12 +215,18 @@ final class InferredStatementContext, E extend
// If we have not materialized we do not have a difference in effective substatements, hence we can forward
// towards the source of the statement.
accessSubstatements();
- return substatements == null ? tryToReusePrototype(factory) : createInferredEffective(factory, this);
+ return substatements == null ? tryToReusePrototype(factory) : createInferredEffective(factory);
+ }
+
+ private @NonNull E createInferredEffective(final @NonNull StatementFactory factory) {
+ return createInferredEffective(factory, this, streamDeclared(), streamEffective());
}
@Override
- E createInferredEffective(final StatementFactory factory, final InferredStatementContext ctx) {
- return prototype.createInferredEffective(factory, ctx);
+ E createInferredEffective(final StatementFactory factory, final InferredStatementContext ctx,
+ final Stream extends StmtContext, ?, ?>> declared,
+ final Stream extends StmtContext, ?, ?>> effective) {
+ return originalCtx.createInferredEffective(factory, ctx, declared, effective);
}
private @NonNull E tryToReusePrototype(final @NonNull StatementFactory factory) {
@@ -279,7 +288,8 @@ final class InferredStatementContext, E extend
prototype.decRef();
// Values are the effective copies, hence this efficiently deals with recursion.
- return internAlongCopyAxis(factory, factory.createEffective(this, declared.stream(), effective.stream()));
+ return internAlongCopyAxis(factory,
+ originalCtx.createInferredEffective(factory, this, declared.stream(), effective.stream()));
}
private @NonNull E tryToReuseSubstatements(final @NonNull StatementFactory factory,
@@ -293,7 +303,7 @@ final class InferredStatementContext, E extend
// Fall back to full instantiation, which populates our substatements. Then check if we should be reusing
// the substatement list, as this operation turned out to not affect them.
- final E effective = createInferredEffective(factory, this);
+ final E effective = createInferredEffective(factory);
// Since we have forced instantiation to deal with this case, we also need to reset the 'modified' flag
setUnmodified();