package org.opendaylight.yangtools.yang.parser.stmt.reactor;
import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Verify.verify;
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
-import com.google.common.base.Verify;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-final class BuildGlobalContext extends NamespaceStorageSupport implements Registry {
+final class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBehaviourRegistry {
private static final Logger LOG = LoggerFactory.getLogger(BuildGlobalContext.class);
private static final ModelProcessingPhase[] PHASE_EXECUTION_ORDER = {
}
@Override
- Registry getBehaviourRegistry() {
+ NamespaceBehaviourRegistry getBehaviourRegistry() {
return this;
}
}
}
- Verify.verify(type.equals(potential.getIdentifier()));
+ verify(type.equals(potential.getIdentifier()));
/*
* Safe cast, previous checkState checks equivalence of key from which
* type argument are derived
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.reactor;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
+
+/**
+ * An entity able to look up a {@link NamespaceBehaviour} corresponding to a {@link ParserNamespace}.
+ */
+sealed interface NamespaceBehaviourRegistry permits BuildGlobalContext, SourceSpecificContext {
+ /**
+ * Get a namespace behavior.
+ *
+ * @param <K> key type
+ * @param <V> value type
+ * @param namespace Namespace type
+ * @return Namespace behaviour
+ * @throws NamespaceNotAvailableException when the namespace is not available
+ * @throws NullPointerException if {@code namespace} is {@code null}
+ */
+ <K, V> @NonNull NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> namespace);
+}
import java.util.Map.Entry;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.slf4j.Logger;
*
* @return registry of source context
*/
- abstract @NonNull Registry getBehaviourRegistry();
+ abstract @NonNull NamespaceBehaviourRegistry getBehaviourRegistry();
// FIXME: 8.0.0: do we really need this method?
final void checkLocalNamespaceAllowed(final ParserNamespace<?, ?> type) {
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.ExecutionOrder;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
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;
public abstract Collection<? extends @NonNull StatementContextBase<?, ?, ?>> mutableDeclaredSubstatements();
@Override
- final Registry getBehaviourRegistry() {
+ final NamespaceBehaviourRegistry getBehaviourRegistry() {
return getRoot().getBehaviourRegistryImpl();
}
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
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.RootStmtContext;
final StatementSourceReference ref, final String rawArgument) {
super(def, ref, rawArgument);
this.sourceContext = requireNonNull(sourceContext);
- this.argument = def.parseArgumentValue(this, rawArgument());
+ argument = def.parseArgumentValue(this, rawArgument());
}
RootStatementContext(final SourceSpecificContext sourceContext, final StatementDefinitionContext<A, D, E> def,
}
void setRootIdentifierImpl(final SourceIdentifier identifier) {
- this.rootIdentifier = requireNonNull(identifier);
+ rootIdentifier = requireNonNull(identifier);
}
- @NonNull Registry getBehaviourRegistryImpl() {
+ @NonNull NamespaceBehaviourRegistry getBehaviourRegistryImpl() {
return sourceContext;
}
void setRootVersionImpl(final YangVersion version) {
checkArgument(sourceContext.globalContext().getSupportedVersions().contains(version),
"Unsupported yang version %s in %s", version, sourceReference());
- checkState(this.rootVersion == null, "Version of root %s has been already set to %s", argument,
- this.rootVersion);
- this.rootVersion = requireNonNull(version);
+ checkState(rootVersion == null, "Version of root %s has been already set to %s", argument,
+ rootVersion);
+ rootVersion = requireNonNull(version);
}
/**
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBehaviour.Registry, Mutable {
+final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBehaviourRegistry, Mutable {
enum PhaseCompletionProgress {
NO_PROGRESS,
PROGRESS,
// TODO: consider keying by Byte equivalent of ExecutionOrder
private final Multimap<ModelProcessingPhase, ModifierImpl> modifiers = HashMultimap.create();
private final QNameToStatementDefinitionMap qnameToStmtDefMap = new QNameToStatementDefinitionMap();
- private final SupportedStatements statementSupports = new SupportedStatements(qnameToStmtDefMap);
+ private final @NonNull SupportedStatements statementSupports = new SupportedStatements(qnameToStmtDefMap);
private final HashMapPrefixResolver prefixToModuleMap = new HashMapPrefixResolver();
private final @NonNull BuildGlobalContext globalContext;
}
@Override
- @SuppressWarnings("unchecked")
public <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(final ParserNamespace<K, V> type) {
if (StatementSupport.NAMESPACE.equals(type)) {
- return (NamespaceBehaviour<K, V>) statementSupports;
+ @SuppressWarnings("unchecked")
+ final var ret = (NamespaceBehaviour<K, V>) statementSupports;
+ return ret;
}
return globalContext.getNamespaceBehaviour(type);
}
ROOT_STATEMENT_LOCAL
}
- public interface Registry {
- /**
- * Get a namespace behavior.
- *
- * @param type Namespace type
- * @param <K> key type
- * @param <V> value type
- * @return Namespace behaviour
- * @throws NamespaceNotAvailableException when the namespace is not available
- */
- <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> type);
- }
-
public interface NamespaceStorageNode {
/**
* Return local namespace behaviour type.