private final @NonNull StatementContextBase<A, D, E> prototype;
private final @NonNull StatementContextBase<?, ?, ?> parent;
+ private final @NonNull StmtContext<A, D, E> originalCtx;
private final @NonNull CopyType childCopyType;
private final QNameModule targetModule;
private final A argument;
this.childCopyType = original.childCopyType;
this.targetModule = original.targetModule;
this.prototype = original.prototype;
+ this.originalCtx = original.originalCtx;
this.argument = original.argument;
}
: prototype.definition().adaptArgumentValue(prototype, targetModule);
this.childCopyType = requireNonNull(childCopyType);
this.targetModule = targetModule;
+ // FIXME: 5.0.0: ugly cast due getOriginalCtx() return type :(
+ this.originalCtx = (StmtContext<A, D, E>) prototype.getOriginalCtx().orElse(prototype);
// FIXME: YANGTOOLS-784: instantiate these lazily
addEffectiveSubstatements(createEffective());
@Override
public StatementSourceReference getStatementSourceReference() {
- return prototype.getStatementSourceReference();
+ return originalCtx.getStatementSourceReference();
}
@Override
public String rawStatementArgument() {
- return prototype.rawStatementArgument();
+ return originalCtx.rawStatementArgument();
}
@Override
public Optional<StmtContext<?, ?, ?>> getOriginalCtx() {
- final Optional<StmtContext<?, ?, ?>> orig = prototype.getOriginalCtx();
- return orig.isPresent() ? orig : Optional.of(prototype);
+ return Optional.of(originalCtx);
}
@Override
}
@Override
- D createDeclared() {
- return prototype.buildDeclared();
+ public D buildDeclared() {
+ /*
+ * Share original instance of declared statement between all effective statements which have been copied or
+ * derived from this original declared statement.
+ */
+ return originalCtx.buildDeclared();
}
@Override