From a2e5f1ec8616f71d1546f4cde9e4939f63120f2e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 22 Aug 2020 19:11:03 +0200 Subject: [PATCH] Reparent BaseQNameStatementSupport 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 --- .../stmt/BaseQNameStatementSupport.java | 42 +++---------------- .../rfc7950/stmt/BaseStatementSupport.java | 9 +--- .../meta/AbstractQNameStatementSupport.java | 38 ----------------- .../meta/AbstractVoidStatementSupport.java | 38 ----------------- 4 files changed, 8 insertions(+), 119 deletions(-) delete mode 100644 yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java delete mode 100644 yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractVoidStatementSupport.java diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java index 5af1ba2783..2b836b7b4c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java @@ -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, - E extends EffectiveStatement> extends AbstractQNameStatementSupport { + E extends EffectiveStatement> extends BaseStatementSupport { protected BaseQNameStatementSupport(final StatementDefinition publicDefinition) { super(publicDefinition); } - @Override - public final D createDeclared(final StmtContext ctx) { - final ImmutableList> 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 ctx, - @NonNull ImmutableList> substatements); - - protected abstract @NonNull D createEmptyDeclared(@NonNull StmtContext ctx); - @Override - public E createEffective(final StmtContext ctx) { - final D declared = ctx.buildDeclared(); - final ImmutableList> substatements = - BaseStatementSupport.buildEffectiveSubstatements(ctx); - return substatements.isEmpty() ? createEmptyEffective(ctx, declared) - : createEffective(ctx, declared, substatements); - } - - protected abstract @NonNull E createEffective(@NonNull StmtContext ctx, @NonNull D declared, - @NonNull ImmutableList> substatements); - - protected abstract @NonNull E createEmptyEffective(@NonNull StmtContext ctx, @NonNull D declared); - - protected static final > @Nullable E findFirstStatement( - final ImmutableList> statements, final Class type) { - return BaseStatementSupport.findFirstStatement(statements, type); - } - - protected static final > A findFirstArgument( - final ImmutableList> statements, final Class type, final A defValue) { - return BaseStatementSupport.findFirstArgument(statements, type, defValue); + public QName adaptArgumentValue(final StmtContext ctx, final QNameModule targetModule) { + return ctx.coerceStatementArgument().bindTo(targetModule).intern(); } protected static final int historyAndStatusFlags(final StmtContext ctx, diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseStatementSupport.java index 3cab48caee..b7e16a68ea 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseStatementSupport.java @@ -54,7 +54,7 @@ public abstract class BaseStatementSupport, protected abstract @NonNull D createEmptyDeclared(@NonNull StmtContext ctx); @Override - public final E createEffective(final StmtContext ctx) { + public E createEffective(final StmtContext ctx) { final D declared = ctx.buildDeclared(); final ImmutableList> substatements = buildEffectiveSubstatements(ctx, statementsToBuild(ctx, declaredSubstatements(ctx))); @@ -109,11 +109,6 @@ public abstract class BaseStatementSupport, return defaultBuildEffectiveSubstatements(substatements); } - static final ImmutableList> buildEffectiveSubstatements( - final StmtContext ctx) { - return defaultBuildEffectiveSubstatements(declaredSubstatements(ctx)); - } - private static ImmutableList> defaultBuildEffectiveSubstatements( final List> substatements) { return substatements.stream() @@ -122,7 +117,7 @@ public abstract class BaseStatementSupport, .collect(ImmutableList.toImmutableList()); } - static final @NonNull List> declaredSubstatements(final StmtContext ctx) { + private static @NonNull List> 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 index d4cad6182b..0000000000 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java +++ /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 - * Declared Statement representation - * @param - * Effective Statement representation - */ -@Beta -public abstract class AbstractQNameStatementSupport, - E extends EffectiveStatement> extends AbstractStatementSupport { - - protected AbstractQNameStatementSupport(final StatementDefinition publicDefinition) { - super(publicDefinition); - } - - @Override - public QName adaptArgumentValue(final StmtContext 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 index be5c7543da..0000000000 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractVoidStatementSupport.java +++ /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 Declared Statement representation - * @param Effective Statement representation - */ -@Beta -public abstract class AbstractVoidStatementSupport, - E extends EffectiveStatement> extends AbstractStatementSupport { - - 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; - } -} -- 2.36.6