/** * Copy statements from a grouping to a target node. * * @param sourceGrpStmtCtx * source grouping statement context * @param targetCtx * target context * @param usesNode * uses node * @throws SourceException * instance of SourceException */ static void copyFromSourceToTarget(final Mutable<?, ?, ?> sourceGrpStmtCtx, final StatementContextBase<?, ?, ?> targetCtx, final Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> usesNode) { final Collection<? extends Mutable<?, ?, ?>> declared = sourceGrpStmtCtx.mutableDeclaredSubstatements(); final Collection<? extends Mutable<?, ?, ?>> effective = sourceGrpStmtCtx.mutableEffectiveSubstatements(); final Collection<Mutable<?, ?, ?>> buffer = new ArrayList<>(declared.size() + effective.size()); final QNameModule newQNameModule = getNewQNameModule(targetCtx, sourceGrpStmtCtx); for (final Mutable<?, ?, ?> original : declared) { if (original.isSupportedByFeatures()) { copyStatement(original, targetCtx, newQNameModule, buffer); } } for (final Mutable<?, ?, ?> original : effective) { copyStatement(original, targetCtx, newQNameModule, buffer); } targetCtx.addEffectiveSubstatements(buffer); usesNode.addAsEffectOfStatement(buffer); }
public static void resolveUsesNode( final Mutable<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> usesNode, final StmtContext<?, ?, ?> targetNodeStmtCtx) { for (final Mutable<?, ?, ?> subStmtCtx : usesNode.mutableDeclaredSubstatements()) { if (StmtContextUtils.producesDeclared(subStmtCtx, RefineStatement.class) && areFeaturesSupported(subStmtCtx)) { performRefine(subStmtCtx, targetNodeStmtCtx); } } }
private static void addOrReplaceNodes(final Mutable<?, ?, ?> subStmtCtx, final StatementContextBase<?, ?, ?> refineTargetNodeCtx) { for (final Mutable<?, ?, ?> refineSubstatementCtx : subStmtCtx.mutableDeclaredSubstatements()) { if (isSupportedRefineSubstatement(refineSubstatementCtx)) { addOrReplaceNode(refineSubstatementCtx, refineTargetNodeCtx); } } }