Convert ModifierStatementSupport 24/90824/3
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 30 Jun 2020 14:43:25 +0000 (16:43 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 10:45:22 +0000 (12:45 +0200)
Convert the trivial case of modifier statement, which can be easily
minimized.

JIRA: YANGTOOLS-1065
Change-Id: If2566654249f49ad63956cc062ae173c0cbbd5c8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java with 52% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.java [new file with mode: 0644]

index 6cc34180ac5d4e8cf2c2fc5f1229629e80945ee6..5895abddeb2c8741cca8713361dc2a294a152668 100644 (file)
@@ -8,10 +8,15 @@
 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;
 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
 
 @Beta
 public interface ModifierEffectiveStatement extends EffectiveStatement<ModifierKind, ModifierStatement> {
-
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MODIFIER;
+    }
 }
index 0c9cda2c629257c974ed4102c623bc060c5a9c22..3941b55e5853229f48e86223f657e5e5701d123f 100644 (file)
@@ -12,7 +12,9 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import com.google.common.annotations.Beta;
 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;
 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
 
 /**
@@ -25,6 +27,11 @@ import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
  */
 @Beta
 public interface ModifierStatement extends DeclaredStatement<ModifierKind> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MODIFIER;
+    }
+
     default @NonNull ModifierKind 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/modifier/EmptyModifierEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java
new file mode 100644 (file)
index 0000000..1307cee
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * 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.modifier;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+
+final class EmptyModifierEffectiveStatement extends DefaultArgument<ModifierKind, ModifierStatement>
+        implements ModifierEffectiveStatement {
+    EmptyModifierEffectiveStatement(final ModifierStatement declared) {
+        super(declared);
+    }
+}
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 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,
@@ -7,18 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier;
 
-import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-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;
 
-/**
- * Class providing necessary support for processing YANG 1.1 Modifier statement.
- */
-@Beta
-final class ModifierStatementImpl extends AbstractDeclaredStatement<ModifierKind> implements ModifierStatement {
-    ModifierStatementImpl(final StmtContext<ModifierKind, ModifierStatement, ?> context) {
+final class EmptyModifierStatement extends WithArgument<ModifierKind> implements ModifierStatement {
+    EmptyModifierStatement(final StmtContext<ModifierKind, ModifierStatement, ?> context) {
         super(context);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java
deleted file mode 100644 (file)
index b6f4200..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2016 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.modifier;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
-import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-/**
- * YANG 1.1 Modifier effective statement implementation.
- */
-@Beta
-final class ModifierEffectiveStatementImpl extends DeclaredEffectiveStatementBase<ModifierKind, ModifierStatement>
-        implements ModifierEffectiveStatement {
-    ModifierEffectiveStatementImpl(final StmtContext<ModifierKind, ModifierStatement, ?> ctx) {
-        super(ctx);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this).add("argument", argument()).toString();
-    }
-}
\ No newline at end of file
index 2af16de950c779595bafcb6b72106c69dcd15660..b22de19014304aac22471aebb2f5ae68de65472a 100644 (file)
@@ -7,17 +7,20 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier;
 
+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.ModifierEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-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.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 public final class ModifierStatementSupport
-        extends AbstractStatementSupport<ModifierKind, ModifierStatement, ModifierEffectiveStatement> {
+        extends BaseStatementSupport<ModifierKind, ModifierStatement, ModifierEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         YangStmtMapping.MODIFIER).build();
     private static final ModifierStatementSupport INSTANCE = new ModifierStatementSupport();
@@ -37,23 +40,37 @@ public final class ModifierStatementSupport
     }
 
     @Override
-    public ModifierStatement createDeclared(final StmtContext<ModifierKind, ModifierStatement, ?> ctx) {
-        return new ModifierStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public ModifierEffectiveStatement createEffective(
-            final StmtContext<ModifierKind, ModifierStatement, ModifierEffectiveStatement> ctx) {
-        return new ModifierEffectiveStatementImpl(ctx);
+    public String internArgument(final String rawArgument) {
+        return "invert-match".equals(rawArgument) ? "invert-match" : rawArgument;
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected ModifierStatement createDeclared(final StmtContext<ModifierKind, ModifierStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularModifierStatement(ctx, substatements);
     }
 
     @Override
-    public String internArgument(final String rawArgument) {
-        return "invert-match".equals(rawArgument) ? "invert-match" : rawArgument;
+    protected ModifierStatement createEmptyDeclared(final StmtContext<ModifierKind, ModifierStatement, ?> ctx) {
+        return new EmptyModifierStatement(ctx);
+    }
+
+    @Override
+    protected ModifierEffectiveStatement createEffective(
+            final StmtContext<ModifierKind, ModifierStatement, ModifierEffectiveStatement> ctx,
+            final ModifierStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularModifierEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected ModifierEffectiveStatement createEmptyEffective(
+            final StmtContext<ModifierKind, ModifierStatement, ModifierEffectiveStatement> ctx,
+            final ModifierStatement declared) {
+        return new EmptyModifierEffectiveStatement(declared);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java
new file mode 100644 (file)
index 0000000..dfbd015
--- /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.modifier;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+
+final class RegularModifierEffectiveStatement extends WithSubstatements<ModifierKind, ModifierStatement>
+        implements ModifierEffectiveStatement {
+    RegularModifierEffectiveStatement(final ModifierStatement 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/modifier/RegularModifierStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.java
new file mode 100644 (file)
index 0000000..3ab2ff0
--- /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.modifier;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularModifierStatement extends WithSubstatements<ModifierKind> implements ModifierStatement {
+    RegularModifierStatement(final StmtContext<ModifierKind, ModifierStatement, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}