Convert range statement 39/90839/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 14:38:15 +0000 (16:38 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 17:05:54 +0000 (19:05 +0200)
Convert the mostly trivial case of range statement, which can be easily
minimized.

We also terminally-deprecate AbstractListConstraintEffectiveStatement,
as it is no longer needed.

JIRA: YANGTOOLS-1065
Change-Id: I38c0583aaf46670639c4b8a5b9464113c0032bb4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java with 62% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java [new file with mode: 0644]

index 89685dccf24ba97ca59a4def738d8e7f029748b1..1274c713c76c761def970b421637ec4fa31f6543 100644 (file)
@@ -10,12 +10,18 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import com.google.common.annotations.Beta;
 import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
 public interface RangeEffectiveStatement extends EffectiveStatement<List<ValueRange>, RangeStatement>,
-    // FIXME: 6.0.0: reconsider this interface extension
-    // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective statements)
-    ConstraintMetaDefinition {
-
+        // FIXME: 6.0.0: reconsider this interface extension
+        // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective
+        //               statements)
+        ConstraintMetaDefinition {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.RANGE;
+    }
 }
index 40713334b1623cd97eca381c88446ebcea7a982d..512c706375437a893d05423561c895e26fd3ac88 100644 (file)
@@ -9,8 +9,15 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface RangeStatement extends ConstrainedDocumentedDeclaredStatement<List<ValueRange>> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.RANGE;
+    }
+
     @Override
     @NonNull List<ValueRange> argument();
 }
index 1700c1d1756a6b83dd5e0e9e1848193f5f80efc5..f21584da7c2e97b199698b343d47ff8cde0541a6 100644 (file)
@@ -14,6 +14,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 @Beta
+@Deprecated(forRemoval = true)
+// FIXME: 6.0.0: remove this class
 public abstract class AbstractListConstraintEffectiveStatement<T, D extends DeclaredStatement<List<T>>>
         extends AbstractConstraintEffectiveStatement<List<T>, D> {
 
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java
new file mode 100644 (file)
index 0000000..1bf06f4
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range;
+
+import java.util.List;
+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.ValueRange;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+final class EmptyRangeEffectiveStatement extends DefaultArgument<List<ValueRange>, RangeStatement>
+        implements RangeEffectiveStatement, ConstraintMetaDefinitionMixin<List<ValueRange>, RangeStatement> {
+    EmptyRangeEffectiveStatement(final RangeStatement declared) {
+        super(declared);
+    }
+}
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -8,15 +8,13 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range;
 
 import java.util.List;
-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.ValueRange;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class RangeEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement<ValueRange, RangeStatement>
-        implements RangeEffectiveStatement {
-    RangeEffectiveStatementImpl(final StmtContext<List<ValueRange>, RangeStatement, ?> ctx) {
-        super(ctx);
+final class EmptyRangeStatement extends WithArgument<List<ValueRange>> implements RangeStatement {
+    EmptyRangeStatement(final StmtContext<List<ValueRange>, ?, ?> context) {
+        super(context);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java
deleted file mode 100644 (file)
index c715067..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range;
-
-import java.util.List;
-import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class RangeStatementImpl extends AbstractDeclaredStatement<List<ValueRange>> implements RangeStatement {
-    RangeStatementImpl(final StmtContext<List<ValueRange>, RangeStatement, ?> context) {
-        super(context);
-    }
-}
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
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java
new file mode 100644 (file)
index 0000000..43c4f70
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+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.ValueRange;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+final class RegularRangeEffectiveStatement extends WithSubstatements<List<ValueRange>, RangeStatement>
+        implements RangeEffectiveStatement, ConstraintMetaDefinitionMixin<List<ValueRange>, RangeStatement> {
+    RegularRangeEffectiveStatement(final RangeStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(declared, substatements);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java
new file mode 100644 (file)
index 0000000..d19b218
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range;
+
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularRangeStatement extends WithSubstatements<List<ValueRange>> implements RangeStatement {
+    RegularRangeStatement(final StmtContext<List<ValueRange>, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}