Convert range statement
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / range / RangeStatementSupport.java
index bb74845c3e5c29891b893f5fffd91f0ca44cfb39..17527508f0df84eb9184ce3413ee4285b68fa0d0 100644 (file)
@@ -15,19 +15,21 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 public final class RangeStatementSupport
-        extends AbstractStatementSupport<List<ValueRange>, RangeStatement, RangeEffectiveStatement> {
+        extends BaseStatementSupport<List<ValueRange>, RangeStatement, RangeEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
         .RANGE)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -46,7 +48,7 @@ public final class RangeStatementSupport
     }
 
     @Override
-    public List<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String rangeArgument) {
+    public ImmutableList<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String rangeArgument) {
         final List<ValueRange> ranges = new ArrayList<>();
 
         for (final String singleRange : ArgumentUtils.PIPE_SPLITTER.split(rangeArgument)) {
@@ -77,14 +79,28 @@ public final class RangeStatementSupport
     }
 
     @Override
-    public RangeStatement createDeclared(final StmtContext<List<ValueRange>, RangeStatement, ?> ctx) {
-        return new RangeStatementImpl(ctx);
+    protected RangeStatement createDeclared(final StmtContext<List<ValueRange>, RangeStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularRangeStatement(ctx, substatements);
     }
 
     @Override
-    public RangeEffectiveStatement createEffective(
-            final StmtContext<List<ValueRange>, RangeStatement, RangeEffectiveStatement> ctx) {
-        return new RangeEffectiveStatementImpl(ctx);
+    protected RangeStatement createEmptyDeclared(final StmtContext<List<ValueRange>, RangeStatement, ?> ctx) {
+        return new EmptyRangeStatement(ctx);
+    }
+
+    @Override
+    protected RangeEffectiveStatement createEffective(
+            final StmtContext<List<ValueRange>, RangeStatement, RangeEffectiveStatement> ctx,
+            final RangeStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularRangeEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected RangeEffectiveStatement createEmptyEffective(
+            final StmtContext<List<ValueRange>, RangeStatement, RangeEffectiveStatement> ctx,
+            final RangeStatement declared) {
+        return new EmptyRangeEffectiveStatement(declared);
     }
 
     @Override