Convert length statement 29/90829/11
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 30 Jun 2020 20:54:47 +0000 (22:54 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 17:05:54 +0000 (19:05 +0200)
Convert the mostly trivial case of length statement, which can be easily
minimized.

JIRA: YANGTOOLS-1065
Change-Id: I4cdb6d80b2b9c71e493e9f145c87e2be9e25ef20
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java with 52% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java with 60% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthStatement.java [new file with mode: 0644]

index 9378f695449ae02ab06a1e093e298cc2482f1595..3a9e2ad3f7b25e4261422bdcb8b3af3f2a549b8d 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 LengthEffectiveStatement extends EffectiveStatement<List<ValueRange>, LengthStatement>,
-    // 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.LENGTH;
+    }
 }
index 728cdd021cc2b6e36003910537831a4e9a8bc75d..13f717f5b7210e6305bc8000f73cddd69405ea80 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 LengthStatement extends ConstrainedDocumentedDeclaredStatement<List<ValueRange>> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.LENGTH;
+    }
+
     @Override
     @NonNull List<ValueRange> argument();
 }
@@ -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,
@@ -11,12 +11,12 @@ import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
 
-final class LengthEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement<ValueRange, LengthStatement>
-        implements LengthEffectiveStatement {
-    LengthEffectiveStatementImpl(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx) {
-        super(ctx);
+final class EmptyLengthEffectiveStatement extends DefaultArgument<List<ValueRange>, LengthStatement>
+        implements LengthEffectiveStatement, ConstraintMetaDefinitionMixin<List<ValueRange>, LengthStatement> {
+    EmptyLengthEffectiveStatement(final LengthStatement declared) {
+        super(declared);
     }
-}
\ No newline at end of file
+}
@@ -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,
@@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length;
 import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class LengthStatementImpl extends AbstractDeclaredStatement<List<ValueRange>> implements LengthStatement {
-    LengthStatementImpl(final StmtContext<List<ValueRange>, LengthStatement, ?> context) {
+final class EmptyLengthStatement extends WithArgument<List<ValueRange>> implements LengthStatement {
+    EmptyLengthStatement(final StmtContext<List<ValueRange>, ?, ?> context) {
         super(context);
     }
 }
index f0e70d29810f4e4595eff48c07966f771ae10294..63983604487a8e3467eea64f2b8d03a95e8cd42d 100644 (file)
@@ -14,19 +14,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.LengthEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
 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 LengthStatementSupport
-        extends AbstractStatementSupport<List<ValueRange>, LengthStatement, LengthEffectiveStatement> {
+        extends BaseStatementSupport<List<ValueRange>, LengthStatement, LengthEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
         .LENGTH)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -45,7 +47,7 @@ public final class LengthStatementSupport
     }
 
     @Override
-    public List<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+    public ImmutableList<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
         final List<ValueRange> ranges = new ArrayList<>();
 
         for (final String singleRange : ArgumentUtils.PIPE_SPLITTER.split(value)) {
@@ -76,19 +78,33 @@ public final class LengthStatementSupport
     }
 
     @Override
-    public LengthStatement createDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx) {
-        return new LengthStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public LengthEffectiveStatement createEffective(
-            final StmtContext<List<ValueRange>, LengthStatement, LengthEffectiveStatement> ctx) {
-        return new LengthEffectiveStatementImpl(ctx);
+    protected LengthStatement createDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularLengthStatement(ctx, substatements);
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected LengthStatement createEmptyDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx) {
+        return new EmptyLengthStatement(ctx);
+    }
+
+    @Override
+    protected LengthEffectiveStatement createEffective(
+            final StmtContext<List<ValueRange>, LengthStatement, LengthEffectiveStatement> ctx,
+            final LengthStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularLengthEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected LengthEffectiveStatement createEmptyEffective(
+            final StmtContext<List<ValueRange>, LengthStatement, LengthEffectiveStatement> ctx,
+            final LengthStatement declared) {
+        return new EmptyLengthEffectiveStatement(declared);
     }
 
     private static Number parseIntegerConstraintValue(final StmtContext<?, ?, ?> ctx, final String value) {
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java
new file mode 100644 (file)
index 0000000..7a6f4de
--- /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.length;
+
+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.LengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
+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 RegularLengthEffectiveStatement extends WithSubstatements<List<ValueRange>, LengthStatement>
+        implements LengthEffectiveStatement, ConstraintMetaDefinitionMixin<List<ValueRange>, LengthStatement> {
+    RegularLengthEffectiveStatement(final LengthStatement 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/length/RegularLengthStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthStatement.java
new file mode 100644 (file)
index 0000000..95af348
--- /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.length;
+
+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.LengthStatement;
+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 RegularLengthStatement extends WithSubstatements<List<ValueRange>> implements LengthStatement {
+    RegularLengthStatement(final StmtContext<List<ValueRange>, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}