Refactor {Module,Submodule}EffectiveStatementImpl
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / BaseStatementSupport.java
index 941eb12d9ece976d5e501fdb6a1dc1b23564a92e..3cab48caee0b6cf1560ad2828fbbdab45d867947 100644 (file)
@@ -57,7 +57,7 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
     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);
     }
@@ -97,13 +97,24 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
     }
 
     /**
-     * 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)
@@ -111,11 +122,6 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
                 .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