package org.opendaylight.yangtools.yang.data.tree.leafref;
import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider;
-public final class LeafRefContext extends AbstractEffectiveModelContextProvider {
+public final class LeafRefContext {
+ private final @NonNull EffectiveModelContext modelContext;
private final QName currentNodeQName;
private final ImmutableList<QName> currentNodePath;
private volatile LeafRefPath leafRefNodePath = null;
LeafRefContext(final LeafRefContextBuilder leafRefContextBuilder) {
- super(leafRefContextBuilder.getSchemaContext());
+ modelContext = requireNonNull(leafRefContextBuilder.modelContext());
currentNodeQName = leafRefContextBuilder.getCurrentNodeQName();
currentNodePath = leafRefContextBuilder.getCurrentNodePath();
leafRefTargetPath = leafRefContextBuilder.getLeafRefTargetPath();
module = leafRefContextBuilder.getLeafRefContextModule();
}
+ /**
+ * Return the {@link EffectiveModelContext} from which this context was derived.
+ *
+ * @return the {@link EffectiveModelContext} from which this context was derived
+ */
+ public @NonNull EffectiveModelContext modelContext() {
+ return modelContext;
+ }
+
public static LeafRefContext create(final EffectiveModelContext ctx) {
return new LeafRefContextTreeBuilder(ctx).buildLeafRefContextTree();
}
private Iterator<QName> descendantIterator(final SchemaNodeIdentifier node) {
final Iterator<QName> nodeSteps = node.getNodeIdentifiers().iterator();
if (node instanceof SchemaNodeIdentifier.Absolute) {
- final Iterator<QName> mySteps = currentNodePath.iterator();
- while (mySteps.hasNext()) {
- final QName myNext = mySteps.next();
+ for (QName myNext : currentNodePath) {
checkArgument(nodeSteps.hasNext(), "Node %s is an ancestor of %s", node, currentNodePath);
final QName nodeNext = nodeSteps.next();
checkArgument(myNext.equals(nodeNext), "Node %s is not a descendant of %s", node, currentNodePath);