* @param stmt Effective capture of this statement's significant state
* @return An effective statement instance
*/
- @NonNull E createEffective(EffectiveStmtCtx.@NonNull Current<A, D> stmt,
+ @NonNull E createEffective(@NonNull Current<A, D> stmt,
Stream<? extends StmtContext<?, ?, ?>> declaredSubstatements,
Stream<? extends StmtContext<?, ?, ?>> effectiveSubstatements);
+ /**
+ * Create a {@link EffectiveStatement} copy of provided original for specified context.
+ *
+ * @param stmt Effective capture of this statement's significant state
+ * @param original Original effective statement
+ * @return An effective statement instance
+ * @throws NullPointerException if any argument is null
+ */
+ @NonNull E copyEffective(@NonNull Current<A, D> stmt, @NonNull E original);
+
/**
* Determine reactor copy behaviour of a statement instance. Implementations classes are required to determine
* their operations with regard to their statements being replicated into different contexts -- potentially sharing
* @param substatements Current effective substatements
* @return True if the differences between {@code copy} and {@code current} do not affect this statement's effective
* semantics.
+ * @throws NullPointerException if any argument is null
*/
boolean canReuseCurrent(@NonNull Current<A, D> copy, @NonNull Current<A, D> current,
@NonNull Collection<? extends EffectiveStatement<?, ?>> substatements);