import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
extends ReactorStmtCtx<A, D, E> {
private final StatementContextBase<?, ?, ?> parent;
private final ReactorStmtCtx<A, D, E> source;
+ // We need to drop source's reference count when we are being swept.
+ private final boolean haveSourceRef;
ReplicaStatementContext(final StatementContextBase<?, ?, ?> parent, final ReactorStmtCtx<A, D, E> source) {
super(source, null);
this.source = requireNonNull(source);
if (source.isSupportedToBuildEffective()) {
source.incRef();
+ haveSourceRef = true;
+ } else {
+ haveSourceRef = false;
}
}
@Override
E createInferredEffective(final StatementFactory<A, D, E> factory, final InferredStatementContext<A, D, E> ctx,
- final Stream<? extends StmtContext<?, ?, ?>> declared,
- final Stream<? extends StmtContext<?, ?, ?>> effective) {
+ final Stream<? extends ReactorStmtCtx<?, ?, ?>> declared,
+ final Stream<? extends ReactorStmtCtx<?, ?, ?>> effective) {
return source.createInferredEffective(factory, ctx, declared, effective);
}
}
@Override
- public Optional<? extends Mutable<?, ?, ?>> copyAsChildOf(final Mutable<?, ?, ?> newParent, final CopyType type,
+ public Optional<Mutable<A, D, E>> copyAsChildOf(final Mutable<?, ?, ?> newParent, final CopyType type,
final QNameModule targetModule) {
return source.copyAsChildOf(newParent, type, targetModule);
}
@Override
int sweepSubstatements() {
- if (haveSourceReference()) {
+ if (haveSourceRef) {
source.decRef();
}
return 0;
@Override
@Deprecated
- public <K, V, T extends K, U extends V, N extends ParserNamespace<K, V>> void addToNs(final Class<@NonNull N> type,
- final T key, final U value) {
+ public <K, V, T extends K, U extends V> void addToNs(final ParserNamespace<K, V> type, final T key, final U value) {
throw new UnsupportedOperationException();
}
@Override
@Deprecated
- public <K, KT extends K, N extends StatementNamespace<K, ?, ?>> void addContext(final Class<@NonNull N> namespace,
- final KT key, final StmtContext<?, ?, ?> stmt) {
+ public <K, KT extends K, C extends StmtContext<?, ?, ?>> void addContext(
+ final ParserNamespace<K, ? super C> namespace, final KT key, final C stmt) {
throw new UnsupportedOperationException();
}