Reparent BaseQNameStatementSupport 34/92234/3
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 22 Aug 2020 17:11:03 +0000 (19:11 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 22 Aug 2020 17:42:25 +0000 (19:42 +0200)
BaseQNameStatementSupport is a specialization of BaseStatementSupport,
reparent it as appropriate. This allows us to finally encapsulate
statement creation completely within BaseStatementSupport.

Since we are ending up with no users for the argument-specialized
subclasses of AbstractStatementSupport, remove these as well.

JIRA: YANGTOOLS-1121
Change-Id: Ief35ca52ff120fef15565a1b44423b95a2defce1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java [deleted file]
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractVoidStatementSupport.java [deleted file]

index 5af1ba27831c23808cd6c5cd44f9bb48be8094ba..2b836b7b4c0126caf5d914906180c43c684a24f5 100644 (file)
@@ -9,16 +9,14 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.Status;
 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.StatusEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 /**
@@ -29,46 +27,18 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
  */
 @Beta
 public abstract class BaseQNameStatementSupport<D extends DeclaredStatement<QName>,
-        E extends EffectiveStatement<QName, D>> extends AbstractQNameStatementSupport<D, E> {
+        E extends EffectiveStatement<QName, D>> extends BaseStatementSupport<QName, D, E> {
     protected BaseQNameStatementSupport(final StatementDefinition publicDefinition) {
         super(publicDefinition);
     }
 
-    @Override
-    public final D createDeclared(final StmtContext<QName, D, ?> ctx) {
-        final ImmutableList<? extends DeclaredStatement<?>> substatements = ctx.declaredSubstatements().stream()
-                .map(StmtContext::buildDeclared)
-                .collect(ImmutableList.toImmutableList());
-        return substatements.isEmpty() ? createEmptyDeclared(ctx) : createDeclared(ctx, substatements);
+    protected BaseQNameStatementSupport(final StatementDefinition publicDefinition, final CopyPolicy copyPolicy) {
+        super(publicDefinition, copyPolicy);
     }
 
-    protected abstract @NonNull D createDeclared(@NonNull StmtContext<QName, D, ?> ctx,
-            @NonNull ImmutableList<? extends DeclaredStatement<?>> substatements);
-
-    protected abstract @NonNull D createEmptyDeclared(@NonNull StmtContext<QName, D, ?> ctx);
-
     @Override
-    public E createEffective(final StmtContext<QName, D, E> ctx) {
-        final D declared = ctx.buildDeclared();
-        final ImmutableList<? extends EffectiveStatement<?, ?>> substatements =
-                BaseStatementSupport.buildEffectiveSubstatements(ctx);
-        return substatements.isEmpty() ? createEmptyEffective(ctx, declared)
-                : createEffective(ctx, declared, substatements);
-    }
-
-    protected abstract @NonNull E createEffective(@NonNull StmtContext<QName, D, E> ctx, @NonNull D declared,
-            @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
-
-    protected abstract @NonNull E createEmptyEffective(@NonNull StmtContext<QName, D, E> ctx, @NonNull D declared);
-
-    protected static final <E extends EffectiveStatement<?, ?>> @Nullable E findFirstStatement(
-            final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type) {
-        return BaseStatementSupport.findFirstStatement(statements, type);
-    }
-
-    protected static final <A, E extends EffectiveStatement<A, ?>> A findFirstArgument(
-            final ImmutableList<? extends EffectiveStatement<?, ?>> statements, final Class<E> type, final A defValue) {
-        return BaseStatementSupport.findFirstArgument(statements, type, defValue);
+    public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
+        return ctx.coerceStatementArgument().bindTo(targetModule).intern();
     }
 
     protected static final int historyAndStatusFlags(final StmtContext<?, ?, ?> ctx,
index 3cab48caee0b6cf1560ad2828fbbdab45d867947..b7e16a68eaf446bedd1be6c0c98eb9a92fb81969 100644 (file)
@@ -54,7 +54,7 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
     protected abstract @NonNull D createEmptyDeclared(@NonNull StmtContext<A, D, ?> ctx);
 
     @Override
-    public final E createEffective(final StmtContext<A, D, E> ctx) {
+    public E createEffective(final StmtContext<A, D, E> ctx) {
         final D declared = ctx.buildDeclared();
         final ImmutableList<? extends EffectiveStatement<?, ?>> substatements =
                 buildEffectiveSubstatements(ctx, statementsToBuild(ctx, declaredSubstatements(ctx)));
@@ -109,11 +109,6 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
         return defaultBuildEffectiveSubstatements(substatements);
     }
 
-    static final ImmutableList<? extends EffectiveStatement<?, ?>> buildEffectiveSubstatements(
-            final StmtContext<?, ?, ?> ctx) {
-        return defaultBuildEffectiveSubstatements(declaredSubstatements(ctx));
-    }
-
     private static ImmutableList<? extends EffectiveStatement<?, ?>> defaultBuildEffectiveSubstatements(
             final List<? extends StmtContext<?, ?, ?>> substatements) {
         return substatements.stream()
@@ -122,7 +117,7 @@ public abstract class BaseStatementSupport<A, D extends DeclaredStatement<A>,
                 .collect(ImmutableList.toImmutableList());
     }
 
-    static final @NonNull List<StmtContext<?, ?, ?>> declaredSubstatements(final StmtContext<?, ?, ?> ctx) {
+    private static @NonNull List<StmtContext<?, ?, ?>> declaredSubstatements(final StmtContext<?, ?, ?> ctx) {
         /*
          * This dance is required to ensure that effects of 'uses' nodes are applied in the same order as
          * the statements were defined -- i.e. if we have something like this:
diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java
deleted file mode 100644 (file)
index d4cad61..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2017 Pantheon Technologies, 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.spi.meta;
-
-import com.google.common.annotations.Beta;
-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;
-
-/**
- * Class providing necessary support for processing a YANG statements which has a {@link QName} argument. In addition
- * to functions of {@link AbstractStatementSupport}, it takes care of adapting QNames across modules.
- *
- * @param <D>
- *            Declared Statement representation
- * @param <E>
- *            Effective Statement representation
- */
-@Beta
-public abstract class AbstractQNameStatementSupport<D extends DeclaredStatement<QName>,
-        E extends EffectiveStatement<QName, D>> extends AbstractStatementSupport<QName, D, E> {
-
-    protected AbstractQNameStatementSupport(final StatementDefinition publicDefinition) {
-        super(publicDefinition);
-    }
-
-    @Override
-    public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
-        return ctx.coerceStatementArgument().bindTo(targetModule).intern();
-    }
-}
diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractVoidStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractVoidStatementSupport.java
deleted file mode 100644 (file)
index be5c754..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2019 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.spi.meta;
-
-import com.google.common.annotations.Beta;
-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;
-
-/**
- * Class providing necessary support for processing a YANG statements which does not have an argument. In addition
- * to functions of {@link AbstractStatementSupport}, it provide the argument value.
- *
- * @param <D> Declared Statement representation
- * @param <E> Effective Statement representation
- */
-@Beta
-public abstract class AbstractVoidStatementSupport<D extends DeclaredStatement<Void>,
-        E extends EffectiveStatement<Void, D>> extends AbstractStatementSupport<Void, D, E> {
-
-    protected AbstractVoidStatementSupport(final StatementDefinition publicDefinition) {
-        super(publicDefinition);
-    }
-
-    protected AbstractVoidStatementSupport(final StatementDefinition publicDefinition, final CopyPolicy copyPolicy) {
-        super(publicDefinition, copyPolicy);
-    }
-
-    @Override
-    public final Void parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return null;
-    }
-}