package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
import com.google.common.base.Verify;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.regex.Pattern;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
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;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace;
super(context);
}
- public static class Definition extends
- AbstractStatementSupport<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> {
+ public static class Definition extends AbstractStatementSupport<SchemaNodeIdentifier, AugmentStatement,
+ EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> {
public Definition() {
super(YangStmtMapping.AUGMENT);
@Override
public EffectiveStatement<SchemaNodeIdentifier, AugmentStatement> createEffective(
- final StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
+ final StmtContext<SchemaNodeIdentifier, AugmentStatement,
+ EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
return new AugmentEffectiveStatementImpl(ctx);
}
@Override
- public void onFullDefinitionDeclared(
- final Mutable<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
+ public void onFullDefinitionDeclared(final Mutable<SchemaNodeIdentifier, AugmentStatement,
+ EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode) {
if (!augmentNode.isSupportedByFeatures()) {
return;
}
final ModelActionBuilder augmentAction = augmentNode.newInferenceAction(
ModelProcessingPhase.EFFECTIVE_MODEL);
- final ModelActionBuilder.Prerequisite<StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq =
+ final Prerequisite<StmtContext<SchemaNodeIdentifier, AugmentStatement,
+ EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq =
augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL);
final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> target =
- augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode), SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument());
- augmentAction.apply(new ModelActionBuilder.InferenceAction() {
+ augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode),
+ SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument());
+ augmentAction.apply(new ModelActionBuilder.InferenceAction() {
@Override
public void apply(final ModelActionBuilder.InferenceContext ctx) {
final StatementContextBase<?, ?, ?> augmentTargetCtx =
currentOrder++;
}
- augmentSourceCtx.setOrder(currentOrder);
augmentSourceCtx.addToNs(StmtOrderingNamespace.class, YangStmtMapping.AUGMENT, currentOrder);
}
if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) {
final StatementContextBase<?, ?, ?> targetNode = Utils.findNode(getSearchRoot(augmentNode),
augmentNode.getStatementArgument());
- if (StmtContextUtils.isUnknownNode(targetNode)) {
+ if (targetNode != null && StmtContextUtils.isUnknownStatement(targetNode)) {
augmentNode.setIsSupportedToBuildEffective(false);
LOG.warn(
"Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}",
if (needToCopyByAugment(original)) {
validateNodeCanBeCopiedByAugment(original, target, typeOfCopy, skipCheckOfMandatoryNodes);
- final Mutable<?, ?, ?> copy = original.createCopy(target, typeOfCopy);
- buffer.add(copy);
+ buffer.add(target.childCopyOf(original, typeOfCopy));
} else if (isReusedByAugment(original)) {
buffer.add(original);
}
checkForMandatoryNodes(sourceCtx);
}
- final List<Mutable<?, ?, ?>> targetSubStatements = ImmutableList.<Mutable<?, ?, ?>>builder()
- .addAll(targetCtx.mutableDeclaredSubstatements()).addAll(targetCtx.mutableEffectiveSubstatements())
- .build();
-
- for (final Mutable<?, ?, ?> subStatement : targetSubStatements) {
+ for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx
.getPublicDefinition().getDeclaredRepresentationClass());
final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement
* b) added to augment body also via uses of a grouping and
* such sub-statements are stored in effective sub-statements collection.
*/
- sourceCtx.declaredSubstatements().forEach(Definition::checkForMandatoryNodes);
- sourceCtx.effectiveSubstatements().forEach(Definition::checkForMandatoryNodes);
+ sourceCtx.allSubstatementsStream().forEach(Definition::checkForMandatoryNodes);
}
InferenceException.throwIf(StmtContextUtils.isMandatoryNode(sourceCtx),
return false;
}
- private static final Set<YangStmtMapping> NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES, YangStmtMapping.WHEN,
- YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS);
+ private static final Set<YangStmtMapping> NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES,
+ YangStmtMapping.WHEN, YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS);
public static boolean needToCopyByAugment(final StmtContext<?, ?, ?> stmtContext) {
return !NOCOPY_DEF_SET.contains(stmtContext.getPublicDefinition());