BUG-8043: correct RangeConstraint definition
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / TypeUtils.java
index 30123541b9084d326af4743e0eacd7f0018568db..8f832ca79cfde8e868446209f31207d81f8f4bfb 100644 (file)
@@ -20,7 +20,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.YangVersion;
@@ -33,13 +32,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeConstraintEffectiveImpl;
 
 /**
 * Utility class for manipulating YANG base and extended types implementation.
@@ -146,16 +143,12 @@ public final class TypeUtils {
         }
     }
 
-    public static List<RangeConstraint> parseRangeListFromString(final StmtContext<?, ?, ?> ctx,
-                                                                 final String rangeArgument) {
-
-        final Optional<String> description = Optional.empty();
-        final Optional<String> reference = Optional.empty();
-
-        final List<RangeConstraint> rangeConstraints = new ArrayList<>();
+    public static List<ValueRange> parseRangeListFromString(final StmtContext<?, ?, ?> ctx,
+            final String rangeArgument) {
+        final List<ValueRange> ranges = new ArrayList<>();
 
         for (final String singleRange : PIPE_SPLITTER.split(rangeArgument)) {
-            final Iterator<String> boundaries = TWO_DOTS_SPLITTER.splitToList(singleRange).iterator();
+            final Iterator<String> boundaries = TWO_DOTS_SPLITTER.split(singleRange).iterator();
             final Number min = parseDecimalConstraintValue(ctx, boundaries.next());
 
             final Number max;
@@ -163,9 +156,8 @@ public final class TypeUtils {
                 max = parseDecimalConstraintValue(ctx, boundaries.next());
 
                 // if min larger than max then error
-                InferenceException.throwIf(compareNumbers(min, max) == 1, ctx.getStatementSourceReference(),
+                SourceException.throwIf(compareNumbers(min, max) == 1, ctx.getStatementSourceReference(),
                         "Range constraint %s has descending order of boundaries; should be ascending", singleRange);
-
                 SourceException.throwIf(boundaries.hasNext(), ctx.getStatementSourceReference(),
                     "Wrong number of boundaries in range constraint %s", singleRange);
             } else {
@@ -173,15 +165,14 @@ public final class TypeUtils {
             }
 
             // some of intervals overlapping
-            if (rangeConstraints.size() > 1 && compareNumbers(min, Iterables.getLast(rangeConstraints).getMax()) != 1) {
-                throw new InferenceException(ctx.getStatementSourceReference(),
-                    "Some of the ranges in %s are not disjoint", rangeArgument);
-            }
-
-            rangeConstraints.add(new RangeConstraintEffectiveImpl(min, max, description, reference));
+            InferenceException.throwIf(ranges.size() > 1
+                && compareNumbers(min, Iterables.getLast(ranges).upperBound()) != 1,
+                ctx.getStatementSourceReference(),  "Some of the value ranges in %s are not disjoint",
+                rangeArgument);
+            ranges.add(ValueRange.of(min, max));
         }
 
-        return rangeConstraints;
+        return ranges;
     }
 
     public static List<ValueRange> parseLengthListFromString(final StmtContext<?, ?, ?> ctx,
@@ -198,8 +189,7 @@ public final class TypeUtils {
 
                 // if min larger than max then error
                 SourceException.throwIf(compareNumbers(min, max) == 1, ctx.getStatementSourceReference(),
-                        "Length constraint %s has descending order of boundaries; should be ascending.",
-                        singleRange);
+                        "Length constraint %s has descending order of boundaries; should be ascending.", singleRange);
                 SourceException.throwIf(boundaries.hasNext(), ctx.getStatementSourceReference(),
                         "Wrong number of boundaries in length constraint %s.", singleRange);
             } else {
@@ -211,7 +201,6 @@ public final class TypeUtils {
                 && compareNumbers(min, Iterables.getLast(ranges).upperBound()) != 1,
                         ctx.getStatementSourceReference(),  "Some of the length ranges in %s are not disjoint",
                         lengthArgument);
-
             ranges.add(ValueRange.of(min, max));
         }