import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
protected BaseBooleanStatementSupport(final StatementDefinition publicDefinition,
final E emptyEffectiveFalse, final E emptyEffectiveTrue) {
- super(publicDefinition);
+ super(publicDefinition, CopyPolicy.CONTEXT_INDEPENDENT);
this.emptyEffectiveFalse = requireNonNull(emptyEffectiveFalse);
this.emptyEffectiveTrue = requireNonNull(emptyEffectiveTrue);
emptyDeclaredFalse = requireNonNull(emptyEffectiveFalse.getDeclared());
@Override
protected final D createEmptyDeclared(final StmtContext<Boolean, D, ?> ctx) {
- return ctx.coerceStatementArgument() ? emptyDeclaredTrue : emptyDeclaredFalse;
+ return ctx.getArgument() ? emptyDeclaredTrue : emptyDeclaredFalse;
}
@Override
- protected final E createEmptyEffective(final StmtContext<Boolean, D, E> ctx, final D declared) {
+ protected final E createEffective(final Current<Boolean, D> stmt,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return substatements.isEmpty() ? createEmptyEffective(stmt) : createEffective(stmt.declared(), substatements);
+ }
+
+ protected abstract @NonNull E createEffective(@NonNull D declared,
+ ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
+
+ protected abstract @NonNull E createEmptyEffective(@NonNull D declared);
+
+ private @NonNull E createEmptyEffective(final Current<Boolean, D> stmt) {
+ final D declared = stmt.declared();
if (emptyDeclaredTrue.equals(declared)) {
return emptyEffectiveTrue;
} else if (emptyDeclaredFalse.equals(declared)) {
return createEmptyEffective(declared);
}
}
-
- protected abstract @NonNull E createEmptyEffective(@NonNull D declared);
}