Improve StatementContextBase.stream{Declared,Effective} 51/102651/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Oct 2022 13:08:07 +0000 (15:08 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 12 Oct 2022 15:10:03 +0000 (17:10 +0200)
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 <robert.varga@pantheon.tech>
(cherry picked from commit a964a780e67e0f094f275a35c20a9079cb902a47)

parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/OriginalStmtCtx.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/UndeclaredStmtCtx.java

index 03d20e81d900b0adcbcb670e5501c6fdd2d061aa..d2efc1be634fb95f351b653adcb4aef1b80531e3 100644 (file)
@@ -113,7 +113,7 @@ abstract class AbstractResumedStatement<A, D extends DeclaredStatement<A>, E ext
     // Creates EffectiveStatement through full materialization and assumes declared statement presence
     private @NonNull E createEffective(final StatementFactory<A, D, E> factory,
             final StatementContextBase<A, D, E> ctx, final Stream<? extends StmtContext<?, ?, ?>> declared,
-            final Stream<? extends StmtContext<?, ?, ?>> effective) {
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> 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<A, D extends DeclaredStatement<A>, E ext
 
     @Override
     final E createInferredEffective(final StatementFactory<A, D, E> factory,
-            final InferredStatementContext<A, D, E> ctx, final Stream<? extends StmtContext<?, ?, ?>> declared,
-            final Stream<? extends StmtContext<?, ?, ?>> effective) {
+            final InferredStatementContext<A, D, E> ctx, final Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> effective) {
         return createEffective(factory, ctx, declared, effective);
     }
 
@@ -187,7 +187,7 @@ abstract class AbstractResumedStatement<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Override
-    final Stream<? extends @NonNull StmtContext<?, ?, ?>> streamDeclared() {
+    final Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamDeclared() {
         return substatements.stream().filter(StmtContext::isSupportedToBuildEffective);
     }
 
index af2b5bbe566d6dbe830116f35e7a9aca6ca5b4e8..3d85bda8420965321ac635387ac7a57463f42fd4 100644 (file)
@@ -225,8 +225,8 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
 
     @Override
     E createInferredEffective(final StatementFactory<A, D, E> factory, final InferredStatementContext<A, D, E> ctx,
-            final Stream<? extends StmtContext<?, ?, ?>> declared,
-            final Stream<? extends StmtContext<?, ?, ?>> effective) {
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> effective) {
         return originalCtx.createInferredEffective(factory, ctx, declared, effective);
     }
 
@@ -259,11 +259,11 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
 
         // ... copy-sensitive check
         final List<EffectiveCopy> declCopy = prototype.streamDeclared()
-            .map(sub -> effectiveCopy((ReactorStmtCtx<?, ?, ?>) sub))
+            .map(this::effectiveCopy)
             .filter(Objects::nonNull)
             .collect(Collectors.toUnmodifiableList());
         final List<EffectiveCopy> effCopy = prototype.streamEffective()
-            .map(sub -> effectiveCopy((ReactorStmtCtx<?, ?, ?>) sub))
+            .map(this::effectiveCopy)
             .filter(Objects::nonNull)
             .collect(Collectors.toUnmodifiableList());
 
@@ -329,10 +329,10 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
         return reusePrototypeReplicas(Streams.concat(prototype.streamDeclared(), prototype.streamEffective()));
     }
 
-    private List<ReactorStmtCtx<?, ?, ?>> reusePrototypeReplicas(final Stream<StmtContext<?, ?, ?>> stream) {
+    private List<ReactorStmtCtx<?, ?, ?>> reusePrototypeReplicas(final Stream<ReactorStmtCtx<?, ?, ?>> 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<A, D extends DeclaredStatement<A>, E extend
     }
 
     @Override
-    Stream<? extends @NonNull StmtContext<?, ?, ?>> streamDeclared() {
+    Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamDeclared() {
         return Stream.empty();
     }
 
     @Override
-    Stream<? extends @NonNull StmtContext<?, ?, ?>> streamEffective() {
+    Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamEffective() {
         return ensureEffectiveSubstatements().stream().filter(StmtContext::isSupportedToBuildEffective);
     }
 
index 7492ddd2f79f41a82d3a79205081b39ee7ded3c8..ec781391a316a9826bd12407bdb7b4066fee0348 100644 (file)
@@ -100,7 +100,7 @@ abstract class OriginalStmtCtx<A, D extends DeclaredStatement<A>, E extends Effe
     }
 
     @Override
-    final Stream<? extends @NonNull StmtContext<?, ?, ?>> streamEffective() {
+    final Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamEffective() {
         return effective.stream().filter(StmtContext::isSupportedToBuildEffective);
     }
 
index dd89e878f2f6a577aa1d1a4aaf3e7afee6075dfe..3a840d81eb75b4f9b9e6473666b529cad3a9fcfb 100644 (file)
@@ -405,8 +405,8 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
      * @return Built effective stateue
      */
     abstract @NonNull E createInferredEffective(@NonNull StatementFactory<A, D, E> factory,
-        @NonNull InferredStatementContext<A, D, E> ctx, Stream<? extends StmtContext<?, ?, ?>> declared,
-        Stream<? extends StmtContext<?, ?, ?>> effective);
+        @NonNull InferredStatementContext<A, D, E> ctx, Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+        Stream<? extends ReactorStmtCtx<?, ?, ?>> effective);
 
     /**
      * Attach an effective copy of this statement. This essentially acts as a map, where we make a few assumptions:
index 16bab426be499d7a043ed85b9a8d89f427ba2b5e..41a52ac85cbb8cc22dfd11eb2dc67e12a87c5d81 100644 (file)
@@ -53,8 +53,8 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
 
     @Override
     E createInferredEffective(final StatementFactory<A, D, E> factory, final InferredStatementContext<A, D, E> ctx,
-            final Stream<? extends StmtContext<?, ?, ?>> declared,
-            final Stream<? extends StmtContext<?, ?, ?>> effective) {
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> effective) {
         return source.createInferredEffective(factory, ctx, declared, effective);
     }
 
index 81adc400687ae0cf961e2923f34ac30ffe2dbc1a..7deeb819eb45ab0a6eee2d806acb19f7fc346a05 100644 (file)
@@ -439,7 +439,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
      * @return Stream of supported declared statements.
      */
     // FIXME: we really want to unify this with streamEffective(), under its name
-    abstract Stream<? extends @NonNull StmtContext<?, ?, ?>> streamDeclared();
+    abstract Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamDeclared();
 
     /**
      * Return a stream of inferred statements which can be built into an {@link EffectiveStatement}, as per
@@ -448,7 +448,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, 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<? extends @NonNull StmtContext<?, ?, ?>> streamEffective();
+    abstract Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamEffective();
 
     @Override
     final boolean doTryToCompletePhase(final byte targetOrder) {
index 52a12918492cfe4ad0d3706ffb03a620a0cec542..6a7c614a76cc39f464740422a46285343345e591 100644 (file)
@@ -94,7 +94,7 @@ class UndeclaredStmtCtx<A, D extends DeclaredStatement<A>, E extends EffectiveSt
     }
 
     @Override
-    Stream<? extends @NonNull StmtContext<?, ?, ?>> streamDeclared() {
+    Stream<? extends @NonNull ReactorStmtCtx<?, ?, ?>> streamDeclared() {
         return Stream.empty();
     }
 
@@ -123,8 +123,8 @@ class UndeclaredStmtCtx<A, D extends DeclaredStatement<A>, E extends EffectiveSt
 
     @Override
     E createInferredEffective(final StatementFactory<A, D, E> factory, final InferredStatementContext<A, D, E> ctx,
-            final Stream<? extends StmtContext<?, ?, ?>> declared,
-            final Stream<? extends StmtContext<?, ?, ?>> effective) {
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+            final Stream<? extends ReactorStmtCtx<?, ?, ?>> effective) {
         final long declaredCount = declared.count();
         verify(declaredCount == 0, "Unexpected non-empty declared statements in %s", ctx);
         return createEffective(factory, new ForwardingUndeclaredCurrent<>(ctx), effective);