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 <robert.varga@pantheon.tech>
(cherry picked from commit
62c350eff478deeaa90ab0304cdc9c3623c01c83)
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
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;
/**
}
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;
}
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.StmtContext;
public abstract class UnknownEffectiveStatementBase<A, D extends UnknownStatement<A>>
// initCopyType
final CopyHistory copyTypesFromOriginal = ctx.getCopyHistory();
- if (copyTypesFromOriginal.contains(CopyType.ADDED_BY_USES_AUGMENTATION)) {
- this.augmenting = true;
- this.addedByUses = true;
- } else {
- this.augmenting = copyTypesFromOriginal.contains(CopyType.ADDED_BY_AUGMENTATION);
- this.addedByUses = copyTypesFromOriginal.contains(CopyType.ADDED_BY_USES);
- }
+ this.augmenting = copyTypesFromOriginal.isAugmenting();
+ this.addedByUses = copyTypesFromOriginal.isAddedByUses();
nodeParameter = ctx.rawStatementArgument() == null ? "" : ctx.rawStatementArgument();
}
import java.util.Arrays;
import java.util.stream.Collectors;
import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.model.api.CopyableNode;
@Beta
-public final class CopyHistory implements Immutable {
+public final class CopyHistory implements Immutable, CopyableNode {
private static final CopyType[] VALUES = CopyType.values();
private static final CopyHistory[][] CACHE = new CopyHistory[VALUES.length][];
}
private static final CopyHistory ORIGINAL = cacheObject(CopyType.ORIGINAL, CopyType.ORIGINAL.bit());
+ private static final int IS_ADDED_BY_USES_BITS =
+ CopyType.ADDED_BY_USES_AUGMENTATION.bit() | CopyType.ADDED_BY_USES.bit();
+ private static final int IS_AUGMENTING_BITS =
+ CopyType.ADDED_BY_USES_AUGMENTATION.bit() | CopyType.ADDED_BY_AUGMENTATION.bit();
private final short operations;
private final short lastOperation;
return ret;
}
+ @VisibleForTesting
+ // FIXME: 7.0.0: hide this method
public boolean contains(final CopyType type) {
return (operations & type.bit()) != 0;
}
return VALUES[lastOperation];
}
+ @Override
+ @Deprecated
+ public boolean isAugmenting() {
+ return (operations & IS_AUGMENTING_BITS) != 0;
+ }
+
+ @Override
+ @Deprecated
+ public boolean isAddedByUses() {
+ return (operations & IS_ADDED_BY_USES_BITS) != 0;
+ }
+
@VisibleForTesting
CopyHistory append(final CopyType typeOfCopy, final CopyHistory toAppend) {
final int newOperations = operations | toAppend.operations | typeOfCopy.bit();