public final E createEffective(final StmtContext<A, D, E> ctx) {
final D declared = ctx.buildDeclared();
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements =
- buildEffectiveSubstatements(statementsToBuild(ctx, declaredSubstatements(ctx)));
+ buildEffectiveSubstatements(ctx, statementsToBuild(ctx, declaredSubstatements(ctx)));
return substatements.isEmpty() ? createEmptyEffective(ctx, declared)
: createEffective(ctx, declared, substatements);
}
}
/**
- * Create a set of substatements. This method is split out so it can be overridden in
- * ExtensionEffectiveStatementImpl to leak a not-fully-initialized instance.
+ * Create a set of substatements. This method is split out so it can be overridden in subclasses adjust the
+ * resulting statements.
*
+ * @param ctx Parent statement context
* @param substatements proposed substatements
- * @return Filtered substatements
+ * @return Built effective substatements
*/
- private static ImmutableList<? extends EffectiveStatement<?, ?>> buildEffectiveSubstatements(
+ protected ImmutableList<? extends EffectiveStatement<?, ?>> buildEffectiveSubstatements(
+ final StmtContext<A, D, E> ctx, final List<? extends StmtContext<?, ?, ?>> substatements) {
+ return defaultBuildEffectiveSubstatements(substatements);
+ }
+
+ static final ImmutableList<? extends EffectiveStatement<?, ?>> buildEffectiveSubstatements(
+ final StmtContext<?, ?, ?> ctx) {
+ return defaultBuildEffectiveSubstatements(declaredSubstatements(ctx));
+ }
+
+ private static ImmutableList<? extends EffectiveStatement<?, ?>> defaultBuildEffectiveSubstatements(
final List<? extends StmtContext<?, ?, ?>> substatements) {
return substatements.stream()
.filter(StmtContext::isSupportedToBuildEffective)
.collect(ImmutableList.toImmutableList());
}
- static final ImmutableList<? extends EffectiveStatement<?, ?>> buildEffectiveSubstatements(
- final StmtContext<?, ?, ?> ctx) {
- return buildEffectiveSubstatements(declaredSubstatements(ctx));
- }
-
static final @NonNull List<StmtContext<?, ?, ?>> declaredSubstatements(final StmtContext<?, ?, ?> ctx) {
/*
* This dance is required to ensure that effects of 'uses' nodes are applied in the same order as