Improve StatementContextBase.stream{Declared,Effective} 54/102554/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Oct 2022 13:08:07 +0000 (15:08 +0200)
committerRobert Varga <nite@hq.sk>
Tue, 4 Oct 2022 15:06:31 +0000 (15:06 +0000)
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>
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 c528de4152e2843446935b4a1a68386e8477f0be..d37cd34b0c5703bec8d915ff9c9a527a4f30134f 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;
             })
@@ -493,12 +493,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 b5de98744135015091ed88ad03863bfaf8adb162..a00b5446e56db4d2fbfd566267cc50fec0fd18af 100644 (file)
@@ -402,8 +402,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 9952c348d68bcf032342326504ffe220df41022c..c0872c56712a32c44b444c3835b37422dcaac7bc 100644 (file)
@@ -51,8 +51,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 e65c0a63294ec7e2c7116d4d6063ecefb1c535bc..ce354b2b2204f7e71b5075bd94261b7d6b11871a 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);