*/
package org.opendaylight.yangtools.yang.model.api.meta;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNullByDefault;
/**
- * Model specific namespace which allows access to specific
- *
- * {@link IdentifierNamespace} serves as common superclass for YANG model namespaces, which are type-captured
- * subclasses. This type capture of namespace allows for handy type-safe reading methods such as
- * {@link EffectiveStatement#get(Class, Object)} and still allows introduction of new namespaces without need to change
- * model APIs.
+ * Common base class for various YANG statement namespaces.
*
* @param <K> Identifier type
* @param <V> Value type
*/
-public interface IdentifierNamespace<K, V> {
- /**
- * Returns value associated with supplied identifier.
- *
- * @param identifier Identifier of value
- * @return value or null, if identifier is not present in namespace.
- */
- @Nullable V get(@NonNull K identifier);
+@NonNullByDefault
+public abstract class IdentifierNamespace<K, V> {
+ protected IdentifierNamespace() {
+ throw new UnsupportedOperationException(getClass() + " should never be instantiated");
+ }
}
*/
@Beta
public abstract class EffectiveStatementNamespace<E extends NamespacedEffectiveStatement<?>>
- implements IdentifierNamespace<QName, E> {
-
+ extends IdentifierNamespace<QName, E> {
protected EffectiveStatementNamespace() {
- // Subclasses should guard against instantiation
+ // Hidden on purpose
}
}
* in which it is instantiated.
*/
abstract class PrefixToEffectiveModuleNamespace
- implements IdentifierNamespace<String, @NonNull ModuleEffectiveStatement> {
+ extends IdentifierNamespace<String, @NonNull ModuleEffectiveStatement> {
private PrefixToEffectiveModuleNamespace() {
// This class should never be subclassed
}
* Namespace mapping all known {@link QNameModule}s to their encoding prefixes. This includes the declaration
* from prefix/namespace/revision and all imports as they were resolved.
*/
- abstract class QNameModuleToPrefixNamespace implements IdentifierNamespace<QNameModule, @NonNull String> {
+ abstract class QNameModuleToPrefixNamespace extends IdentifierNamespace<QNameModule, @NonNull String> {
private QNameModuleToPrefixNamespace() {
// This class should never be subclassed
}
* Namespace mapping all included submodules. The namespaces is keyed by submodule name.
*/
abstract class NameToEffectiveSubmoduleNamespace
- implements IdentifierNamespace<String, @NonNull SubmoduleEffectiveStatement> {
+ extends IdentifierNamespace<String, @NonNull SubmoduleEffectiveStatement> {
private NameToEffectiveSubmoduleNamespace() {
// This class should never be subclassed
}