Centralize Abstract{Input,Output}StatementSupport.parseArgumentValue() 69/93469/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 29 Oct 2020 13:19:58 +0000 (14:19 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 29 Oct 2020 15:53:13 +0000 (16:53 +0100)
As we have reduced the number of implementations of this method,
by introducing the default implementation, we are down to three
possible implementations under BaseSchemaTreeStatementSupport.

Add a level of indirection through Function<QNameModule, QName>, which
allows us to combine the two implementations into a single one residing
in BaseOperationContainerStatementSupport.

Change-Id: Ia5232d356ce2141800a950e6222cdc2174cd926b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 1c4590ae7e257deb5a64137485a43b150563f2e9)

yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java

index 4b2d3d98a71febe5148c7ae0a84c5c391d66dfab..07426d7e4a10b73bb18482c76e9865e670d98e64 100644 (file)
@@ -7,15 +7,20 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
+import java.util.function.Function;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 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.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 /**
  * Specialization of {@link BaseQNameStatementSupport} for {@code input} and {@code output} statements.
@@ -26,8 +31,17 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 @Beta
 public abstract class BaseOperationContainerStatementSupport<D extends DeclaredStatement<QName>,
         E extends SchemaTreeEffectiveStatement<D>> extends BaseImplicitStatementSupport<D, E> {
-    protected BaseOperationContainerStatementSupport(final StatementDefinition publicDefinition) {
+    private final Function<QNameModule, QName> createArgument;
+
+    protected BaseOperationContainerStatementSupport(final StatementDefinition publicDefinition,
+            final Function<QNameModule, QName> createArgument) {
         super(publicDefinition);
+        this.createArgument = requireNonNull(createArgument);
+    }
+
+    @Override
+    public final QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return createArgument.apply(StmtContextUtils.getRootModuleQName(ctx));
     }
 
     @Override
index d8632351587322f9e7c16f8bc76ef0c0f4200879..ad7d6a4faa32be2d7044444d509f7ddec228c5de 100644 (file)
@@ -18,17 +18,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 abstract class AbstractInputStatementSupport
         extends BaseOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
     AbstractInputStatementSupport() {
-        super(YangStmtMapping.INPUT);
-    }
-
-    @Override
-    public final QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return YangConstants.operationInputQName(StmtContextUtils.getRootModuleQName(ctx));
+        super(YangStmtMapping.INPUT, YangConstants::operationInputQName);
     }
 
     @Override
index aee7fc5fe18e350304e15ee4bcf9994efaf5159d..f50320e02c729bdd931509a8de78908e8f0c107a 100644 (file)
@@ -18,17 +18,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 abstract class AbstractOutputStatementSupport
         extends BaseOperationContainerStatementSupport<OutputStatement, OutputEffectiveStatement> {
     AbstractOutputStatementSupport() {
-        super(YangStmtMapping.OUTPUT);
-    }
-
-    @Override
-    public final QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return YangConstants.operationOutputQName(StmtContextUtils.getRootModuleQName(ctx));
+        super(YangStmtMapping.OUTPUT, YangConstants::operationOutputQName);
     }
 
     @Override