From 9cdc6930eee46a44491ea4a5e505f2980846d5e6 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 21 Dec 2022 21:31:00 +0100 Subject: [PATCH] Modernize UsesStatementSupport a bit Use Java 11 trivial features to clean up logic. Change-Id: Id4f5d68726acafe7ecdf3e7739719d0619925fca Signed-off-by: Robert Varga (cherry picked from commit 8ec4aaf5743b34a74e58907a18ebcebbfd585d60) (cherry picked from commit fef7b7364c5bf46d3736d7a86bc5ff7f51c7b536) --- .../stmt/uses/UsesStatementSupport.java | 55 ++++++++----------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java index b2be7e5465..d4d37aa172 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java @@ -15,7 +15,6 @@ import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; -import java.util.Map; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Empty; @@ -50,7 +49,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceAction; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; @@ -96,23 +94,29 @@ public final class UsesStatementSupport } super.onFullDefinitionDeclared(usesNode); - final ModelActionBuilder usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); - final QName groupingName = usesNode.argument(); + final var usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); + final var groupingName = usesNode.argument(); - final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, - GroupingNamespace.class, groupingName, ModelProcessingPhase.EFFECTIVE_MODEL); - final Prerequisite> targetNodePre = usesAction.mutatesEffectiveCtx( - usesNode.getParentContext()); + final var sourceGroupingPre = usesAction.requiresCtx(usesNode, GroupingNamespace.class, groupingName, + ModelProcessingPhase.EFFECTIVE_MODEL); + final var targetNodePre = usesAction.mutatesEffectiveCtx(usesNode.getParentContext()); usesAction.apply(new InferenceAction() { @Override public void apply(final InferenceContext ctx) { - final Mutable targetNodeStmtCtx = targetNodePre.resolve(ctx); - final StmtContext sourceGrpStmtCtx = sourceGroupingPre.resolve(ctx); + final var targetNodeStmtCtx = targetNodePre.resolve(ctx); + final var sourceGrpStmtCtx = sourceGroupingPre.resolve(ctx); copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx, usesNode); - resolveUsesNode(usesNode, targetNodeStmtCtx); + + // Apply any refine statements + for (var subStmtCtx : usesNode.mutableDeclaredSubstatements()) { + if (subStmtCtx.producesDeclared(RefineStatement.class) && areFeaturesSupported(subStmtCtx)) { + performRefine(subStmtCtx, targetNodeStmtCtx); + } + } + StmtContextUtils.validateIfFeatureAndWhenOnListKeys(usesNode); usesNode.addToNs(SourceGroupingNamespace.class, Empty.value(), sourceGrpStmtCtx); } @@ -166,15 +170,13 @@ public final class UsesStatementSupport static @NonNull ImmutableMap indexRefines( final ImmutableList> substatements) { - final Map refines = new LinkedHashMap<>(); - - for (EffectiveStatement effectiveStatement : substatements) { + final var refines = new LinkedHashMap(); + for (var effectiveStatement : substatements) { if (effectiveStatement instanceof RefineEffectiveStatementImpl) { final RefineEffectiveStatementImpl refineStmt = (RefineEffectiveStatementImpl) effectiveStatement; refines.put(refineStmt.argument(), refineStmt.getRefineTargetNode()); } } - return ImmutableMap.copyOf(refines); } @@ -195,9 +197,9 @@ public final class UsesStatementSupport final var declared = sourceGrpStmtCtx.declaredSubstatements(); final var effective = sourceGrpStmtCtx.effectiveSubstatements(); final var buffer = new ArrayList>(declared.size() + effective.size()); - final QNameModule newQNameModule = getNewQNameModule(targetCtx, sourceGrpStmtCtx); + final var newQNameModule = getNewQNameModule(targetCtx, sourceGrpStmtCtx); - for (StmtContext original : declared) { + for (var original : declared) { if (shouldCopy(original)) { original.copyAsChildOf(targetCtx, CopyType.ADDED_BY_USES, newQNameModule).ifPresent(copy -> { if (!original.isSupportedByFeatures() || !original.isSupportedToBuildEffective()) { @@ -208,7 +210,7 @@ public final class UsesStatementSupport } } - for (StmtContext original : effective) { + for (var original : effective) { if (shouldCopy(original)) { original.copyAsChildOf(targetCtx, CopyType.ADDED_BY_USES, newQNameModule).ifPresent(buffer::add); } @@ -262,25 +264,14 @@ public final class UsesStatementSupport if (targetCtx.publicDefinition() == YangStmtMapping.AUGMENT) { return StmtContextUtils.getRootModuleQName(targetCtx); } - - final Object targetStmtArgument = targetCtx.argument(); - final Object sourceStmtArgument = stmtContext.argument(); - if (targetStmtArgument instanceof QName && sourceStmtArgument instanceof QName) { - return ((QName) targetStmtArgument).getModule(); + final var targetArgument = targetCtx.argument(); + if (targetArgument instanceof QName && stmtContext.argument() instanceof QName) { + return ((QName) targetArgument).getModule(); } return null; } - private static void resolveUsesNode(final Mutable usesNode, - final StmtContext targetNodeStmtCtx) { - for (Mutable subStmtCtx : usesNode.mutableDeclaredSubstatements()) { - if (subStmtCtx.producesDeclared(RefineStatement.class) && areFeaturesSupported(subStmtCtx)) { - performRefine(subStmtCtx, targetNodeStmtCtx); - } - } - } - private static boolean areFeaturesSupported(final StmtContext subStmtCtx) { /* * In case of Yang 1.1, checks whether features are supported. -- 2.36.6