Convert bit statement 46/90846/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 18:25:10 +0000 (20:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 2 Jul 2020 07:40:00 +0000 (09:40 +0200)
Convert the mostly trivial case of bit statement, which can be easily
minimized.

Change-Id: I4b1041c3205034d28844be0e8faab5545006ea23
JIRA: YANGTOOLS-1065
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java with 58% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java [new file with mode: 0644]

index f9bb3827fb7cbf2e5dc42b984a3e91f5c722bdb7..bcb6004c67eca992509e4d6ed117830901fcf6f5 100644 (file)
@@ -10,10 +10,17 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import com.google.common.annotations.Beta;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.Uint32;
+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 BitEffectiveStatement extends EffectiveStatement<String, BitStatement> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.BIT;
+    }
+
     default Optional<Uint32> getDeclaredPosition() {
         return findFirstEffectiveSubstatementArgument(PositionEffectiveStatement.class);
     }
index d9fbdf0df241b1abb3186277b3a8e3794f557f67..99c62694b8c4d0262aa565893f00cec9f41683ea 100644 (file)
@@ -12,9 +12,16 @@ import static com.google.common.base.Verify.verifyNotNull;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface BitStatement extends DocumentedDeclaredStatement.WithStatus<String>,
         IfFeatureAwareDeclaredStatement<String> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.BIT;
+    }
+
     default @NonNull String getName() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
index 6c0f2cc5e07d604ccae845056c1e52fef05fa6e2..21445b02b70fcd82dddaf06474598c689da333ca 100644 (file)
@@ -7,15 +7,17 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit;
 
+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.BitEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
-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.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
-abstract class AbstractBitStatementSupport
-        extends AbstractStatementSupport<String, BitStatement, BitEffectiveStatement> {
+abstract class AbstractBitStatementSupport extends BaseStatementSupport<String, BitStatement, BitEffectiveStatement> {
     AbstractBitStatementSupport() {
         super(YangStmtMapping.BIT);
     }
@@ -27,13 +29,26 @@ abstract class AbstractBitStatementSupport
     }
 
     @Override
-    public final BitStatement createDeclared(final StmtContext<String, BitStatement, ?> ctx) {
-        return new BitStatementImpl(ctx);
+    protected final BitStatement createDeclared(final StmtContext<String, BitStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularBitStatement(ctx, substatements);
     }
 
     @Override
-    public final BitEffectiveStatement createEffective(
-            final StmtContext<String, BitStatement, BitEffectiveStatement> ctx) {
-        return new BitEffectiveStatementImpl(ctx);
+    protected final BitStatement createEmptyDeclared(final StmtContext<String, BitStatement, ?> ctx) {
+        return new EmptyBitStatement(ctx);
     }
-}
\ No newline at end of file
+
+    @Override
+    protected final BitEffectiveStatement createEffective(
+            final StmtContext<String, BitStatement, BitEffectiveStatement> ctx, final BitStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularBitEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected final BitEffectiveStatement createEmptyEffective(
+            final StmtContext<String, BitStatement, BitEffectiveStatement> ctx, final BitStatement declared) {
+        return new EmptyBitEffectiveStatement(declared);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java
deleted file mode 100644 (file)
index 68cde84..0000000
+++ /dev/null
@@ -1,26 +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.bit;
-
-import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNodeWithStatus;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class BitEffectiveStatementImpl extends AbstractEffectiveDocumentedNodeWithStatus<String, BitStatement>
-        implements BitEffectiveStatement {
-    BitEffectiveStatementImpl(final StmtContext<String, BitStatement, ?> ctx) {
-        super(ctx);
-    }
-
-    @Override
-    public String toString() {
-        return BitEffectiveStatementImpl.class.getSimpleName() + "[name=" + argument() + ", position="
-                + getDeclaredPosition().orElse(null) + "]";
-    }
-}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java
new file mode 100644 (file)
index 0000000..9bc73d0
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * 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.bit;
+
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
+import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
+
+class EmptyBitEffectiveStatement extends DefaultArgument<String, BitStatement> implements
+        BitEffectiveStatement, DocumentedNodeMixin<String, BitStatement>, WithStatus {
+    EmptyBitEffectiveStatement(final BitStatement declared) {
+        super(declared);
+    }
+
+    @Override
+    public final Status getStatus() {
+        return findFirstEffectiveSubstatementArgument(StatusEffectiveStatement.class).orElse(Status.CURRENT);
+    }
+
+    @Override
+    public final String toString() {
+        return "BitEffectiveStatementImpl[name=" + argument() + ", position=" + getDeclaredPosition().orElse(null)
+                + "]";
+    }
+}
@@ -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.bit;
 
 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
-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 BitStatementImpl extends AbstractDeclaredStatement<String> implements BitStatement {
-    BitStatementImpl(final StmtContext<String, BitStatement, ?> context) {
+final class EmptyBitStatement extends WithArgument<String> implements BitStatement {
+    EmptyBitStatement(final StmtContext<String, ?, ?> context) {
         super(context);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java
new file mode 100644 (file)
index 0000000..5bb1139
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * 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.bit;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
+
+final class RegularBitEffectiveStatement extends EmptyBitEffectiveStatement {
+    private final Object substatements;
+
+    RegularBitEffectiveStatement(final BitStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(declared);
+        this.substatements = maskList(substatements);
+    }
+
+    @Override
+    public ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+        return unmaskList(substatements);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java
new file mode 100644 (file)
index 0000000..c26bf08
--- /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.bit;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularBitStatement extends WithSubstatements<String> implements BitStatement {
+    RegularBitStatement(final StmtContext<String, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}