From: Robert Varga Date: Tue, 4 Oct 2022 13:08:07 +0000 (+0200) Subject: Improve StatementContextBase.stream{Declared,Effective} X-Git-Tag: v9.0.2~4 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=ab263aa272315113adaa6f01f2cba2ecc28f473f;hp=1f2a1155b4ea207bdea255b794beb0b4d0ba4971;p=yangtools.git Improve StatementContextBase.stream{Declared,Effective} We have an implementation invariant of returning ReactorStmtCtx, make sure we expose it, removing the need for unchecked casts. Change-Id: I7b4ab5c1032d719520bcdf046045bd6638aea13a Signed-off-by: Robert Varga (cherry picked from commit a964a780e67e0f094f275a35c20a9079cb902a47) --- diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java index 03d20e81d9..d2efc1be63 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java @@ -113,7 +113,7 @@ abstract class AbstractResumedStatement, E ext // Creates EffectiveStatement through full materialization and assumes declared statement presence private @NonNull E createEffective(final StatementFactory factory, final StatementContextBase ctx, final Stream> declared, - final Stream> effective) { + final Stream> effective) { // Statement reference count infrastructure makes an assumption that effective statement is only built after // the declared statement is already done. Statements tracked by this class always have a declared view, and // we need to ensure that is built before we touch effective substatements. @@ -127,8 +127,8 @@ abstract class AbstractResumedStatement, E ext @Override final E createInferredEffective(final StatementFactory factory, - final InferredStatementContext ctx, final Stream> declared, - final Stream> effective) { + final InferredStatementContext ctx, final Stream> declared, + final Stream> effective) { return createEffective(factory, ctx, declared, effective); } @@ -187,7 +187,7 @@ abstract class AbstractResumedStatement, E ext } @Override - final Stream> streamDeclared() { + final Stream> streamDeclared() { return substatements.stream().filter(StmtContext::isSupportedToBuildEffective); } 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 af2b5bbe56..3d85bda842 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 @@ -225,8 +225,8 @@ final class InferredStatementContext, E extend @Override E createInferredEffective(final StatementFactory factory, final InferredStatementContext ctx, - final Stream> declared, - final Stream> effective) { + final Stream> declared, + final Stream> effective) { return originalCtx.createInferredEffective(factory, ctx, declared, effective); } @@ -259,11 +259,11 @@ final class InferredStatementContext, E extend // ... copy-sensitive check final List declCopy = prototype.streamDeclared() - .map(sub -> effectiveCopy((ReactorStmtCtx) sub)) + .map(this::effectiveCopy) .filter(Objects::nonNull) .collect(Collectors.toUnmodifiableList()); final List effCopy = prototype.streamEffective() - .map(sub -> effectiveCopy((ReactorStmtCtx) sub)) + .map(this::effectiveCopy) .filter(Objects::nonNull) .collect(Collectors.toUnmodifiableList()); @@ -329,10 +329,10 @@ final class InferredStatementContext, E extend return reusePrototypeReplicas(Streams.concat(prototype.streamDeclared(), prototype.streamEffective())); } - private List> reusePrototypeReplicas(final Stream> stream) { + private List> reusePrototypeReplicas(final Stream> stream) { return stream .map(stmt -> { - final ReplicaStatementContext ret = ((ReactorStmtCtx) stmt).replicaAsChildOf(this); + final var ret = stmt.replicaAsChildOf(this); ret.buildEffective(); return ret; }) @@ -495,12 +495,12 @@ final class InferredStatementContext, E extend } @Override - Stream> streamDeclared() { + Stream> streamDeclared() { return Stream.empty(); } @Override - Stream> streamEffective() { + Stream> streamEffective() { return ensureEffectiveSubstatements().stream().filter(StmtContext::isSupportedToBuildEffective); } diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/OriginalStmtCtx.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/OriginalStmtCtx.java index 7492ddd2f7..ec781391a3 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/OriginalStmtCtx.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/OriginalStmtCtx.java @@ -100,7 +100,7 @@ abstract class OriginalStmtCtx, E extends Effe } @Override - final Stream> streamEffective() { + final Stream> streamEffective() { return effective.stream().filter(StmtContext::isSupportedToBuildEffective); } 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 dd89e878f2..3a840d81eb 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 @@ -405,8 +405,8 @@ abstract class ReactorStmtCtx, E extends Effec * @return Built effective stateue */ abstract @NonNull E createInferredEffective(@NonNull StatementFactory factory, - @NonNull InferredStatementContext ctx, Stream> declared, - Stream> effective); + @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: diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java index 16bab426be..41a52ac85c 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java @@ -53,8 +53,8 @@ final class ReplicaStatementContext, E extends @Override E createInferredEffective(final StatementFactory factory, final InferredStatementContext ctx, - final Stream> declared, - final Stream> effective) { + final Stream> declared, + final Stream> effective) { return source.createInferredEffective(factory, ctx, declared, effective); } diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 81adc40068..7deeb819eb 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -439,7 +439,7 @@ abstract class StatementContextBase, E extends * @return Stream of supported declared statements. */ // FIXME: we really want to unify this with streamEffective(), under its name - abstract Stream> streamDeclared(); + abstract Stream> streamDeclared(); /** * Return a stream of inferred statements which can be built into an {@link EffectiveStatement}, as per @@ -448,7 +448,7 @@ abstract class StatementContextBase, E extends * @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(); + abstract Stream> streamEffective(); @Override final boolean doTryToCompletePhase(final byte targetOrder) { diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/UndeclaredStmtCtx.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/UndeclaredStmtCtx.java index 52a1291849..6a7c614a76 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/UndeclaredStmtCtx.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/UndeclaredStmtCtx.java @@ -94,7 +94,7 @@ class UndeclaredStmtCtx, E extends EffectiveSt } @Override - Stream> streamDeclared() { + Stream> streamDeclared() { return Stream.empty(); } @@ -123,8 +123,8 @@ class UndeclaredStmtCtx, E extends EffectiveSt @Override E createInferredEffective(final StatementFactory factory, final InferredStatementContext ctx, - final Stream> declared, - final Stream> effective) { + final Stream> declared, + final Stream> effective) { final long declaredCount = declared.count(); verify(declaredCount == 0, "Unexpected non-empty declared statements in %s", ctx); return createEffective(factory, new ForwardingUndeclaredCurrent<>(ctx), effective);