From bef7daf9a010099d542b09289328bc2d69e6e6d3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 2 Jul 2020 14:03:13 +0200 Subject: [PATCH] Add BaseQNameStatementSupport.historyAndStatusFlags() A number of subclasses are open-coding the same computation, let's centralize it a bit. Change-Id: I1ebbe63a16dcc876324960c2a11baca604476ba5 Signed-off-by: Robert Varga --- .../BaseOperationContainerStatementSupport.java | 15 ++------------- .../rfc7950/stmt/BaseQNameStatementSupport.java | 11 +++++++++++ .../stmt/action/ActionStatementSupport.java | 16 ++-------------- .../AbstractGroupingStatementSupport.java | 9 ++------- .../AbstractNotificationStatementSupport.java | 11 ++--------- .../rfc7950/stmt/uses/UsesStatementSupport.java | 15 ++------------- 6 files changed, 21 insertions(+), 56 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java index afe52b8935..f8369d1871 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java @@ -11,12 +11,9 @@ import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; -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.StmtContext; /** @@ -35,7 +32,7 @@ public abstract class BaseOperationContainerStatementSupport ctx, final ImmutableList> substatements, final D declared) { - return createDeclaredEffective(computeFlags(ctx, substatements), ctx, substatements, declared); + return createDeclaredEffective(historyAndStatusFlags(ctx, substatements), ctx, substatements, declared); } protected abstract @NonNull E createDeclaredEffective(int flags, @NonNull StmtContext ctx, @@ -44,17 +41,9 @@ public abstract class BaseOperationContainerStatementSupport ctx, final ImmutableList> substatements) { - return createUndeclaredEffective(computeFlags(ctx, substatements), ctx, substatements); + return createUndeclaredEffective(historyAndStatusFlags(ctx, substatements), ctx, substatements); } protected abstract @NonNull E createUndeclaredEffective(int flags, @NonNull StmtContext ctx, @NonNull ImmutableList> substatements); - - private static int computeFlags(final StmtContext ctx, - final ImmutableList> substatements) { - return new FlagsBuilder() - .setHistory(ctx.getCopyHistory()) - .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) - .toFlags(); - } } 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 0ff9cfb4a2..bbc2d6c94a 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 @@ -12,9 +12,12 @@ 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.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; @@ -67,4 +70,12 @@ public abstract class BaseQNameStatementSupport> statements, final Class type, final A defValue) { return BaseStatementSupport.findFirstArgument(statements, type, defValue); } + + protected static final int historyAndStatusFlags(final StmtContext ctx, + final ImmutableList> substatements) { + return new FlagsBuilder() + .setHistory(ctx.getCopyHistory()) + .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) + .toFlags(); + } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index 7a25df9de1..e22e3366f3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.Status; 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; @@ -19,10 +18,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -114,8 +111,8 @@ public final class ActionStatementSupport extends BaseQNameStatementSupport ctx, - final ImmutableList> substatements) { - return new FlagsBuilder() - .setHistory(ctx.getCopyHistory()) - .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) - .toFlags(); - } - } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java index 37c2fa3389..636585871a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java @@ -9,15 +9,12 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.Status; 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.GroupingEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; @@ -68,10 +65,8 @@ abstract class AbstractGroupingStatementSupport protected final GroupingEffectiveStatement createEffective( final StmtContext ctx, final GroupingStatement declared, final ImmutableList> substatements) { - return new GroupingEffectiveStatementImpl(declared, ctx, substatements, new FlagsBuilder() - .setHistory(ctx.getCopyHistory()) - .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) - .toFlags()); + return new GroupingEffectiveStatementImpl(declared, ctx, substatements, + historyAndStatusFlags(ctx, substatements)); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java index e90d20cdec..1ecac7e0e2 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -9,16 +9,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.Status; 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.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; @@ -58,12 +55,8 @@ abstract class AbstractNotificationStatementSupport final ImmutableList> substatements) { checkEffective(ctx); - final int flags = new FlagsBuilder() - .setHistory(ctx.getCopyHistory()) - .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) - .toFlags(); - - return new NotificationEffectiveStatementImpl(declared, flags, ctx, substatements); + return new NotificationEffectiveStatementImpl(declared, historyAndStatusFlags(ctx, substatements), ctx, + substatements); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java index 3fffa8a010..829377050e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java @@ -22,7 +22,6 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.Status; 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; @@ -32,13 +31,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; @@ -147,7 +144,7 @@ public final class UsesStatementSupport final StmtContext ctx, final UsesStatement declared, final ImmutableList> substatements) { final GroupingDefinition sourceGrouping = getSourceGrouping(ctx); - final int flags = computeFlags(ctx, substatements); + final int flags = historyAndStatusFlags(ctx, substatements); final QName argument = ctx.coerceStatementArgument(); if (declared.argument().equals(argument)) { return new RegularLocalUsesEffectiveStatement(declared, sourceGrouping, flags, substatements); @@ -162,7 +159,7 @@ public final class UsesStatementSupport protected UsesEffectiveStatement createEmptyEffective( final StmtContext ctx, final UsesStatement declared) { final GroupingDefinition sourceGrouping = getSourceGrouping(ctx); - final int flags = computeFlags(ctx, ImmutableList.of()); + final int flags = historyAndStatusFlags(ctx, ImmutableList.of()); final QName argument = ctx.coerceStatementArgument(); return argument.equals(declared.argument()) ? new EmptyLocalUsesEffectiveStatement(declared, sourceGrouping, flags) @@ -188,14 +185,6 @@ public final class UsesStatementSupport .buildEffective(); } - private static int computeFlags(final StmtContext ctx, - final ImmutableList> substatements) { - return new FlagsBuilder() - .setHistory(ctx.getCopyHistory()) - .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) - .toFlags(); - } - /** * Copy statements from a grouping to a target node. * -- 2.36.6