final List<ReactorStmtCtx<?, ?, ?>> addEffectiveSubstatement(final List<ReactorStmtCtx<?, ?, ?>> effective,
final Mutable<?, ?, ?> substatement) {
- verifyStatement(substatement);
-
+ final ReactorStmtCtx<?, ?, ?> stmt = verifyStatement(substatement);
final List<ReactorStmtCtx<?, ?, ?>> resized = beforeAddEffectiveStatement(effective, 1);
- final ReactorStmtCtx<?, ?, ?> stmt = (ReactorStmtCtx<?, ?, ?>) substatement;
ensureCompletedExecution(stmt);
resized.add(stmt);
return resized;
// exposed for InferredStatementContext only
final void ensureCompletedPhase(final Mutable<?, ?, ?> stmt) {
- verifyStatement(stmt);
- ensureCompletedExecution((ReactorStmtCtx<?, ?, ?>) stmt);
+ ensureCompletedExecution(verifyStatement(stmt));
}
// Make sure target statement has transitioned at least to our phase (if we have one). This method is just before we
verify(stmt.tryToCompletePhase(executionOrder), "Statement %s cannot complete phase %s", stmt, executionOrder);
}
- private static void verifyStatement(final Mutable<?, ?, ?> stmt) {
+ private static ReactorStmtCtx<?, ?, ?> verifyStatement(final Mutable<?, ?, ?> stmt) {
verify(stmt instanceof ReactorStmtCtx, "Unexpected statement %s", stmt);
+ return (ReactorStmtCtx<?, ?, ?>) stmt;
}
private List<ReactorStmtCtx<?, ?, ?>> beforeAddEffectiveStatement(final List<ReactorStmtCtx<?, ?, ?>> effective,
abstract @NonNull E createEffective(@NonNull StatementFactory<A, D, E> factory);
- /**
- * Routing of the request to build an effective statement from {@link InferredStatementContext} towards the original
- * definition site. This is needed to pick the correct instantiation method: for declared statements we will
- * eventually land in {@link AbstractResumedStatement}, for underclared statements that will be
- * {@link UndeclaredStmtCtx}.
- *
- * @param factory Statement factory
- * @param ctx Inferred statement context, i.e. where the effective statement is instantiated
- * @return Built effective stateue
- */
- abstract @NonNull E createInferredEffective(@NonNull StatementFactory<A, D, E> factory,
- @NonNull InferredStatementContext<A, D, E> ctx);
-
/**
* Return a stream of declared statements which can be built into an {@link EffectiveStatement}, as per
* {@link StmtContext#buildEffective()} contract.
return null;
}
- parent.ensureCompletedPhase(copy);
+ parent.ensureCompletedExecution(copy);
return canReuseCurrent(copy) ? this : copy;
}
copy = new InferredStatementContext<>(result, original, childCopyType, type, targetModule);
result.addEffectiveSubstatement(copy);
+ result.definition.onStatementAdded(result);
} else {
result = copy = new InferredStatementContext<>(this, original, type, type, targetModule);
}