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.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
+import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq =
augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL);
final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> target =
- augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode),
- SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument());
+ augmentAction.mutatesEffectiveCtxPath(getSearchRoot(augmentNode),
+ ChildSchemaNodeNamespace.class, augmentNode.getStatementArgument().getPathFromRoot());
augmentAction.apply(new ModelActionBuilder.InferenceAction() {
@Override
* Do not fail, if it is an uses-augment to an unknown node.
*/
if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) {
- final Optional<StmtContext<?, ?, ?>> targetNode = SchemaNodeIdentifierBuildNamespace.findNode(
+ final Optional<StmtContext<?, ?, ?>> targetNode = ChildSchemaNodeNamespace.findNode(
getSearchRoot(augmentNode), augmentNode.getStatementArgument());
if (targetNode.isPresent() && StmtContextUtils.isUnknownStatement(targetNode.get())) {
augmentNode.setIsSupportedToBuildEffective(false);
checkForMandatoryNodes(sourceCtx);
}
- for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
- final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx
- .getPublicDefinition().getDeclaredRepresentationClass());
- final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement
- .getPublicDefinition().getDeclaredRepresentationClass());
- final boolean qNamesEqual = sourceIsDataNode && targetIsDataNode
- && Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument());
-
- InferenceException.throwIf(qNamesEqual, sourceCtx.getStatementSourceReference(),
- "An augment cannot add node named '%s' because this name is already used in target",
- sourceCtx.rawStatementArgument());
+ // Data definition statements must not collide on their namespace
+ if (DataDefinitionStatement.class.isAssignableFrom(
+ sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) {
+ for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
+ if (DataDefinitionStatement.class.isAssignableFrom(
+ subStatement.getPublicDefinition().getDeclaredRepresentationClass())) {
+
+ InferenceException.throwIf(
+ Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument()),
+ sourceCtx.getStatementSourceReference(),
+ "An augment cannot add node named '%s' because this name is already used in target",
+ sourceCtx.rawStatementArgument());
+ }
+ }
}
}