private static void validateNodeCanBeCopiedByAugment(final StmtContext<?, ?, ?> sourceCtx,
final StatementContextBase<?, ?, ?> targetCtx, final CopyType typeOfCopy,
final boolean skipCheckOfMandatoryNodes) {
if (WhenStatement.class.equals(sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) {
return;
}
if (!skipCheckOfMandatoryNodes && typeOfCopy == CopyType.ADDED_BY_AUGMENTATION
&& reguiredCheckOfMandatoryNodes(sourceCtx, targetCtx)) {
checkForMandatoryNodes(sourceCtx);
}
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());
}
}
}
}