import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.GroupingUtils;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> extends
StatementContextBase<A, D, E> {
+ private static final Logger LOG = LoggerFactory.getLogger(SubstatementContext.class);
private final StatementContextBase<?, ?, ?> parent;
private final A argument;
}
}
- private void copyDeclaredStmts(final SubstatementContext<A, D, E> original, final QNameModule newQNameModule,
- final CopyType typeOfCopy) {
- final Collection<? extends StatementContextBase<?, ?, ?>> originalDeclaredSubstatements = original
- .declaredSubstatements();
- for (final StatementContextBase<?, ?, ?> stmtContext : originalDeclaredSubstatements) {
- if (!StmtContextUtils.areFeaturesSupported(stmtContext)) {
- continue;
- }
- if (GroupingUtils.needToCopyByUses(stmtContext)) {
- final StatementContextBase<?, ?, ?> copy = stmtContext.createCopy(newQNameModule, this, typeOfCopy);
- this.addEffectiveSubstatement(copy);
- } else if (GroupingUtils.isReusedByUses(stmtContext)) {
- this.addEffectiveSubstatement(stmtContext);
- }
- }
- }
-
- private void copyEffectiveStmts(final SubstatementContext<A, D, E> original, final QNameModule newQNameModule,
- final CopyType typeOfCopy) {
- final Collection<? extends StatementContextBase<?, ?, ?>> originalEffectiveSubstatements = original
- .effectiveSubstatements();
- for (final StatementContextBase<?, ?, ?> stmtContext : originalEffectiveSubstatements) {
- if (GroupingUtils.needToCopyByUses(stmtContext)) {
- final StatementContextBase<?, ?, ?> copy = stmtContext.createCopy(newQNameModule, this, typeOfCopy);
- this.addEffectiveSubstatement(copy);
- } else if (GroupingUtils.isReusedByUses(stmtContext)) {
- this.addEffectiveSubstatement(stmtContext);
- }
- }
- }
-
@Override
public StatementContextBase<?, ?, ?> getParentContext() {
return parent;
return copy;
}
+ private void copySubstatement(final StatementContextBase<?, ?, ?> stmtContext,
+ final QNameModule newQNameModule, final CopyType typeOfCopy) {
+ if (GroupingUtils.needToCopyByUses(stmtContext)) {
+ final StatementContextBase<?, ?, ?> copy = stmtContext.createCopy(newQNameModule, this, typeOfCopy);
+ LOG.debug("Copying substatement {} for {} as", stmtContext, this, copy);
+ this.addEffectiveSubstatement(copy);
+ } else if (GroupingUtils.isReusedByUses(stmtContext)) {
+ LOG.debug("Reusing substatement {} for {}", stmtContext, this);
+ this.addEffectiveSubstatement(stmtContext);
+ } else {
+ LOG.debug("Skipping statement {}", stmtContext);
+ }
+ }
+
+ private void copyDeclaredStmts(final SubstatementContext<A, D, E> original, final QNameModule newQNameModule,
+ final CopyType typeOfCopy) {
+ for (final StatementContextBase<?, ?, ?> stmtContext : original.declaredSubstatements()) {
+ if (StmtContextUtils.areFeaturesSupported(stmtContext)) {
+ copySubstatement(stmtContext, newQNameModule, typeOfCopy);
+ }
+ }
+ }
+
+ private void copyEffectiveStmts(final SubstatementContext<A, D, E> original, final QNameModule newQNameModule,
+ final CopyType typeOfCopy) {
+ for (final StatementContextBase<?, ?, ?> stmtContext : original.effectiveSubstatements()) {
+ copySubstatement(stmtContext, newQNameModule, typeOfCopy);
+ }
+ }
+
private boolean isSupportedAsShorthandCase() {
final Collection<?> supportedCaseShorthands = getFromNamespace(ValidationBundlesNamespace.class,
ValidationBundleType.SUPPORTED_CASE_SHORTHANDS);
final StmtContext.Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> usesNode) {
final QNameModule newQNameModule = getNewQNameModule(targetCtx, sourceGrpStmtCtx);
- copyDeclaredStmts(sourceGrpStmtCtx, targetCtx, usesNode, newQNameModule);
- copyEffectiveStmts(sourceGrpStmtCtx, targetCtx, usesNode, newQNameModule);
- }
-
- public static void copyDeclaredStmts(final StatementContextBase<?, ?, ?> sourceGrpStmtCtx,
- final StatementContextBase<?, ?, ?> targetCtx,
- final StmtContext.Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> usesNode,
- final QNameModule newQNameModule) {
- for (final StatementContextBase<?, ?, ?> originalStmtCtx : sourceGrpStmtCtx.declaredSubstatements()) {
- if (!StmtContextUtils.areFeaturesSupported(originalStmtCtx)) {
- continue;
- }
- if (needToCopyByUses(originalStmtCtx)) {
- final StatementContextBase<?, ?, ?> copy = originalStmtCtx.createCopy(newQNameModule, targetCtx,
- CopyType.ADDED_BY_USES);
- targetCtx.addEffectiveSubstatement(copy);
- usesNode.addAsEffectOfStatement(copy);
- } else if (isReusedByUsesOnTop(originalStmtCtx)) {
- targetCtx.addEffectiveSubstatement(originalStmtCtx);
- usesNode.addAsEffectOfStatement(originalStmtCtx);
+ for (final StatementContextBase<?, ?, ?> original : sourceGrpStmtCtx.declaredSubstatements()) {
+ if (StmtContextUtils.areFeaturesSupported(original)) {
+ copyStatement(original, targetCtx, usesNode, newQNameModule);
}
}
+
+ for (final StatementContextBase<?, ?, ?> original : sourceGrpStmtCtx.effectiveSubstatements()) {
+ copyStatement(original, targetCtx, usesNode, newQNameModule);
+ }
}
- public static void copyEffectiveStmts(final StatementContextBase<?, ?, ?> sourceGrpStmtCtx,
+ private static void copyStatement(final StatementContextBase<?, ?, ?> original,
final StatementContextBase<?, ?, ?> targetCtx,
- final StmtContext.Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> usesNode,
- final QNameModule newQNameModule) {
- for (final StatementContextBase<?, ?, ?> originalStmtCtx : sourceGrpStmtCtx.effectiveSubstatements()) {
- if (needToCopyByUses(originalStmtCtx)) {
- final StatementContextBase<?, ?, ?> copy = originalStmtCtx.createCopy(newQNameModule, targetCtx,
- CopyType.ADDED_BY_USES);
- targetCtx.addEffectiveSubstatement(copy);
- usesNode.addAsEffectOfStatement(copy);
- } else if (isReusedByUsesOnTop(originalStmtCtx)) {
- targetCtx.addEffectiveSubstatement(originalStmtCtx);
- usesNode.addAsEffectOfStatement(originalStmtCtx);
- }
+ final StmtContext.Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> targetUses,
+ final QNameModule targetModule) {
+ if (needToCopyByUses(original)) {
+ final StatementContextBase<?, ?, ?> copy = original.createCopy(targetModule, targetCtx,
+ CopyType.ADDED_BY_USES);
+ targetCtx.addEffectiveSubstatement(copy);
+ targetUses.addAsEffectOfStatement(copy);
+ } else if (isReusedByUsesOnTop(original)) {
+ targetCtx.addEffectiveSubstatement(original);
+ targetUses.addAsEffectOfStatement(original);
}
}