Convert MaxElementsStatementSupport 36/90836/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 07:30:56 +0000 (09:30 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 11:16:17 +0000 (13:16 +0200)
Convert the trivial case of max-elements statement, which can be
easily minimized.

JIRA: YANGTOOLS-1065
Change-Id: I47d91af7515e4ecd90776d7df2ae624cf265270f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java with 57% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java [new file with mode: 0644]

index d4cd28def95d372d8932ef8bf8de0476761b3a88..6dfd961be0252f62f12bde873c20c705acf7a253 100644 (file)
@@ -8,9 +8,14 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
+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 MaxElementsEffectiveStatement extends EffectiveStatement<String, MaxElementsStatement> {
-
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MAX_ELEMENTS;
+    }
 }
index cf669e2b90734d2d28f6df82b235068a2a88d4cf..9fe75c4f73901f32a3b261f513ede3b03a1d4505 100644 (file)
@@ -10,9 +10,16 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import static com.google.common.base.Verify.verifyNotNull;
 
 import org.eclipse.jdt.annotation.NonNull;
+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.StatementDefinition;
 
 public interface MaxElementsStatement extends DeclaredStatement<String> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MAX_ELEMENTS;
+    }
+
     default @NonNull String getValue() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java
new file mode 100644 (file)
index 0000000..42b47ac
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * 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.max_elements;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+
+final class EmptyMaxElementsEffectiveStatement extends DefaultArgument<String, MaxElementsStatement>
+        implements MaxElementsEffectiveStatement {
+    EmptyMaxElementsEffectiveStatement(final MaxElementsStatement 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,11 +8,11 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements;
 
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
-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 MaxElementsStatementImpl extends AbstractDeclaredStatement<String> implements MaxElementsStatement {
-    MaxElementsStatementImpl(final StmtContext<String, MaxElementsStatement, ?> context) {
+final class EmptyMaxElementsStatement extends WithArgument<String> implements MaxElementsStatement {
+    EmptyMaxElementsStatement(final StmtContext<String, ?, ?> context) {
         super(context);
     }
 }
index b6ff968e21bc093b3b9e3307695e487e280561f3..b4ec2c69c6846f15259e07a49e6d0d16011457c9 100644 (file)
@@ -7,22 +7,25 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements;
 
+import com.google.common.collect.ImmutableList;
 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.MaxElementsEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class MaxElementsStatementSupport
-        extends AbstractStatementSupport<String, MaxElementsStatement, MaxElementsEffectiveStatement> {
+        extends BaseStringStatementSupport<MaxElementsStatement, MaxElementsEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         YangStmtMapping.MAX_ELEMENTS)
         .build();
     private static final MaxElementsStatementSupport INSTANCE = new MaxElementsStatementSupport();
 
     private MaxElementsStatementSupport() {
-        super(YangStmtMapping.MAX_ELEMENTS, CopyPolicy.CONTEXT_INDEPENDENT);
+        super(YangStmtMapping.MAX_ELEMENTS);
     }
 
     public static MaxElementsStatementSupport getInstance() {
@@ -30,29 +33,38 @@ public final class MaxElementsStatementSupport
     }
 
     @Override
-    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return value;
+    public String internArgument(final String rawArgument) {
+        return "unbounded".equals(rawArgument) ? "unbounded" : rawArgument;
     }
 
     @Override
-    public MaxElementsStatement createDeclared(
-            final StmtContext<String, MaxElementsStatement, ?> ctx) {
-        return new MaxElementsStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public MaxElementsEffectiveStatement createEffective(
-            final StmtContext<String, MaxElementsStatement, MaxElementsEffectiveStatement> ctx) {
-        return new MaxElementsEffectiveStatementImpl(ctx);
+    protected MaxElementsStatement createDeclared(final StmtContext<String, MaxElementsStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularMaxElementsStatement(ctx, substatements);
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected MaxElementsStatement createEmptyDeclared(final StmtContext<String, MaxElementsStatement, ?> ctx) {
+        return new EmptyMaxElementsStatement(ctx);
     }
 
     @Override
-    public String internArgument(final String rawArgument) {
-        return "unbounded".equals(rawArgument) ? "unbounded" : rawArgument;
+    protected MaxElementsEffectiveStatement createEffective(
+            final StmtContext<String, MaxElementsStatement, MaxElementsEffectiveStatement> ctx,
+            final MaxElementsStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularMaxElementsEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected MaxElementsEffectiveStatement createEmptyEffective(
+            final StmtContext<String, MaxElementsStatement, MaxElementsEffectiveStatement> ctx,
+            final MaxElementsStatement declared) {
+        return new EmptyMaxElementsEffectiveStatement(declared);
     }
-}
\ No newline at end of file
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java
new file mode 100644 (file)
index 0000000..d9ff3e0
--- /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.max_elements;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+
+final class RegularMaxElementsEffectiveStatement extends WithSubstatements<String, MaxElementsStatement>
+        implements MaxElementsEffectiveStatement {
+    RegularMaxElementsEffectiveStatement(final MaxElementsStatement 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/max_elements/RegularMaxElementsStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java
new file mode 100644 (file)
index 0000000..d1fbf21
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * 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.max_elements;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularMaxElementsStatement extends WithSubstatements<String> implements MaxElementsStatement {
+    RegularMaxElementsStatement(final StmtContext<String, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}