From 62c350eff478deeaa90ab0304cdc9c3623c01c83 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 27 Jan 2021 11:06:52 +0100 Subject: [PATCH] Make CopyHistory implement CopyableNode We have a few call sites checking the same thing. Make a strong connection between CopyableNode and CopyHistory -- centralizing checks and providing an opportunity for optimization. CopyHistory.contains() now exists only for testing purposes. JIRA: YANGTOOLS-1215 Change-Id: Ibc9cebe4bee6c5818570c52415c3d8a5ba1ff19d Signed-off-by: Robert Varga --- .../stmt/BaseSchemaTreeStatementSupport.java | 21 ++------------ .../stmt/EffectiveStatementMixins.java | 17 ++--------- .../stmt/UnknownEffectiveStatementBase.java | 10 ++----- .../yang/parser/spi/meta/CopyHistory.java | 28 +++++++++++++++---- 4 files changed, 30 insertions(+), 46 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseSchemaTreeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseSchemaTreeStatementSupport.java index d01bc67b2a..a2d2ea2436 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseSchemaTreeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseSchemaTreeStatementSupport.java @@ -18,7 +18,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStateme import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; -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.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; @@ -49,27 +48,13 @@ public abstract class BaseSchemaTreeStatementSupport copy, final Current current, final Collection> substatements) { - return equalHistory(copy, current) + return equalHistory(copy.history(), current.history()) // FIXME: this should devolve to getArgument() equality && copy.getSchemaPath().equals(current.getSchemaPath()); } - // TODO: can we speed this up? - private static boolean equalHistory(final Current copy, final Current current) { - return isAugmenting(copy) == isAugmenting(current) - && isAddedByUses(copy) == isAddedByUses(current); - } - - private static boolean isAugmenting(final Current stmt) { - final CopyHistory history = stmt.history(); - return history.contains(CopyType.ADDED_BY_AUGMENTATION) - || history.contains(CopyType.ADDED_BY_USES_AUGMENTATION); - } - - private static boolean isAddedByUses(final Current stmt) { - final CopyHistory history = stmt.history(); - return history.contains(CopyType.ADDED_BY_USES) - || history.contains(CopyType.ADDED_BY_USES_AUGMENTATION); + private static boolean equalHistory(final CopyHistory copy, final CopyHistory current) { + return copy.isAugmenting() == current.isAugmenting() && copy.isAddedByUses() == current.isAddedByUses(); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java index 3cb0eca95a..3eb78f0488 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java @@ -61,7 +61,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; -import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound; /** @@ -505,20 +504,8 @@ public final class EffectiveStatementMixins { } public FlagsBuilder setHistory(final CopyHistory history) { - int bits; - if (history.contains(CopyType.ADDED_BY_USES_AUGMENTATION)) { - bits = AUGMENTING | ADDED_BY_USES; - } else { - bits = 0; - if (history.contains(CopyType.ADDED_BY_AUGMENTATION)) { - bits |= AUGMENTING; - } - if (history.contains(CopyType.ADDED_BY_USES)) { - bits |= ADDED_BY_USES; - } - } - - flags = flags & ~MASK_HISTORY | bits; + flags = flags & ~MASK_HISTORY + | (history.isAugmenting() ? AUGMENTING : 0) | (history.isAddedByUses() ? ADDED_BY_USES : 0); return this; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java index d47c51e4e5..708208c528 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java @@ -19,7 +19,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; -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.StmtContext; @@ -53,13 +52,8 @@ public abstract class UnknownEffectiveStatementBase