+ @Override
+ protected final AugmentStatement createDeclared(final StmtContext<SchemaNodeIdentifier, AugmentStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new RegularAugmentStatement(ctx.coerceRawStatementArgument(), ctx.coerceStatementArgument(),
+ substatements);
+ }
+
+ @Override
+ protected final AugmentStatement createEmptyDeclared(
+ final StmtContext<SchemaNodeIdentifier, AugmentStatement, ?> ctx) {
+ return new EmptyAugmentStatement(ctx.coerceRawStatementArgument(), ctx.coerceStatementArgument());
+ }
+
+ @Override
+ protected final List<? extends StmtContext<?, ?, ?>> statementsToBuild(
+ final StmtContext<SchemaNodeIdentifier, AugmentStatement, AugmentEffectiveStatement> ctx,
+ final List<? extends StmtContext<?, ?, ?>> substatements) {
+ final StatementContextBase<?, ?, ?> implicitDef = ctx.getFromNamespace(AugmentImplicitHandlingNamespace.class,
+ ctx);
+ return implicitDef == null ? substatements : Lists.transform(substatements, subCtx -> {
+ verify(subCtx instanceof StatementContextBase);
+ return implicitDef.wrapWithImplicit((StatementContextBase<?, ?, ?>) subCtx);
+ });
+ }
+
+ @Override
+ protected final AugmentEffectiveStatement createEffective(
+ final StmtContext<SchemaNodeIdentifier, AugmentStatement, AugmentEffectiveStatement> ctx,
+ final AugmentStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ final int flags = new FlagsBuilder()
+ .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
+ .toFlags();
+
+ return new AugmentEffectiveStatementImpl(declared, ctx.coerceStatementArgument(), flags,
+ StmtContextUtils.getRootModuleQName(ctx), substatements, ctx.getStatementSourceReference(),
+ (AugmentationSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null));
+ }
+
+ @Override
+ protected final AugmentEffectiveStatement createEmptyEffective(
+ final StmtContext<SchemaNodeIdentifier, AugmentStatement, AugmentEffectiveStatement> ctx,
+ final AugmentStatement declared) {
+ return createEffective(ctx, declared, ImmutableList.of());
+ }
+