@Beta
// FIXME: We should not be needing this namespace, as yang-data's argument is not documented anywhere to be compatible
// with 'identifier', hence we cannot safely form a QName.
-public interface YangDataArgumentNamespace extends ParserNamespace<Empty, QName> {
- NamespaceBehaviour<Empty, QName, @NonNull YangDataArgumentNamespace> BEHAVIOUR =
+public final class YangDataArgumentNamespace extends ParserNamespace<Empty, QName> {
+ public static final @NonNull NamespaceBehaviour<?, ? ,?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(YangDataArgumentNamespace.class);
+ private YangDataArgumentNamespace() {
+ // Hidden on purpose
+ }
}
* some quality parsing time.
*/
@Beta
-public interface ModuleQNameToPrefix extends ParserNamespace<QNameModule, String> {
- NamespaceBehaviour<QNameModule, String, @NonNull ModuleQNameToPrefix> BEHAVIOUR =
- NamespaceBehaviour.rootStatementLocal(ModuleQNameToPrefix.class);
+public final class ModuleQNameToPrefix extends ParserNamespace<QNameModule, String> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.rootStatementLocal(ModuleQNameToPrefix.class);
+
+ private ModuleQNameToPrefix() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.RootStmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
@Beta
-public interface YangNamespaceContextNamespace extends ParserNamespace<StmtContext<?, ?, ?>, YangNamespaceContext> {
- NamespaceBehaviour<StmtContext<?, ?, ?>, YangNamespaceContext, @NonNull YangNamespaceContextNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(YangNamespaceContextNamespace.class);
+public final class YangNamespaceContextNamespace extends ParserNamespace<StmtContext<?, ?, ?>, YangNamespaceContext> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(YangNamespaceContextNamespace.class);
- static @NonNull YangNamespaceContext computeIfAbsent(final StmtContext<?, ?, ?> ctx) {
- final StmtContext<?, ?, ?> root = ctx.getRoot();
+ private YangNamespaceContextNamespace() {
+ // Hidden on purpose
+ }
+
+ public static @NonNull YangNamespaceContext computeIfAbsent(final StmtContext<?, ?, ?> ctx) {
+ final RootStmtContext<?, ?, ?> root = ctx.getRoot();
YangNamespaceContext ret = ctx.getFromNamespace(YangNamespaceContextNamespace.class, root);
if (ret == null) {
verify(ctx instanceof Mutable, "Cannot populate namespace context to %s", ctx);
* the effective augment has correct implicit statements created.
*/
@Beta
-public interface AugmentImplicitHandlingNamespace extends ParserNamespace<Empty, Mutable<?, ?, ?>> {
- NamespaceBehaviour<Empty, Mutable<?, ?, ?>, @NonNull AugmentImplicitHandlingNamespace>
- BEHAVIOUR = NamespaceBehaviour.statementLocal(AugmentImplicitHandlingNamespace.class);
+public final class AugmentImplicitHandlingNamespace extends ParserNamespace<Empty, Mutable<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.statementLocal(AugmentImplicitHandlingNamespace.class);
+
+ private AugmentImplicitHandlingNamespace() {
+ // Hidden on purpose
+ }
}
* Statement-local namespace carrying the versioning information about how the import was satisfied.
*/
@Beta
-public interface ImportedVersionNamespace extends ParserNamespace<Empty, SourceIdentifier> {
- NamespaceBehaviour<Empty, SourceIdentifier, @NonNull ImportedVersionNamespace> BEHAVIOUR =
+public final class ImportedVersionNamespace extends ParserNamespace<Empty, SourceIdentifier> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(ImportedVersionNamespace.class);
+ private ImportedVersionNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
@Beta
-public interface ConfigListWarningNamespace extends ParserNamespace<StatementSourceReference, Boolean> {
- NamespaceBehaviour<StatementSourceReference, Boolean, @NonNull ConfigListWarningNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(ConfigListWarningNamespace.class);
+public final class ConfigListWarningNamespace extends ParserNamespace<StatementSourceReference, Boolean> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ConfigListWarningNamespace.class);
+
+ private ConfigListWarningNamespace() {
+ // Hidden on purpose
+ }
}
* Module-local namespace holding the module's QName.
*/
@Beta
-public interface QNameModuleNamespace extends ParserNamespace<Empty, QNameModule> {
- NamespaceBehaviour<Empty, QNameModule, @NonNull QNameModuleNamespace> BEHAVIOUR =
+public final class QNameModuleNamespace extends ParserNamespace<Empty, QNameModule> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(QNameModuleNamespace.class);
+ private QNameModuleNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@Beta
-public interface RefineTargetNamespace extends ParserNamespace<Empty, StmtContext<?, ?, ?>> {
- NamespaceBehaviour<Empty, StmtContext<?, ?, ?>, @NonNull RefineTargetNamespace>
- BEHAVIOUR = NamespaceBehaviour.statementLocal(RefineTargetNamespace.class);
+public final class RefineTargetNamespace extends ParserNamespace<Empty, StmtContext<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.statementLocal(RefineTargetNamespace.class);
+ private RefineTargetNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
@Beta
-public interface BaseTypeNamespace extends ParserNamespace<Empty, Object> {
- NamespaceBehaviour<Empty, Object, @NonNull BaseTypeNamespace> BEHAVIOUR =
+public final class BaseTypeNamespace extends ParserNamespace<Empty, Object> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(BaseTypeNamespace.class);
+
+ private BaseTypeNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@Beta
-public interface SourceGroupingNamespace extends ParserNamespace<Empty, StmtContext<?, ?, ?>> {
- NamespaceBehaviour<Empty, StmtContext<?, ?, ?>, @NonNull SourceGroupingNamespace> BEHAVIOUR =
+public final class SourceGroupingNamespace extends ParserNamespace<Empty, StmtContext<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(SourceGroupingNamespace.class);
+
+ private SourceGroupingNamespace() {
+ // Hidden on purpose
+ }
}
final BuildAction reactor = RFC7950Reactors.defaultReactorBuilder()
.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
new ThirdPartyExtensionSupport(YangParserConfiguration.DEFAULT))
- .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyNamespace.BEHAVIOR)
+ .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyNamespace.BEHAVIOUR)
.build()
.newBuild();
reactor.addSource(StmtTestUtils.sourceForResource("/plugin-test/foo.yang"));
/**
* ThirdPartyNamespace.
*/
-public interface ThirdPartyNamespace extends ParserNamespace<Empty, String> {
- @NonNull NamespaceBehaviour<Empty, String, @NonNull ThirdPartyNamespace> BEHAVIOR =
+public final class ThirdPartyNamespace extends ParserNamespace<Empty, String> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
NamespaceBehaviour.statementLocal(ThirdPartyNamespace.class);
+ private ThirdPartyNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
- * Extension namespace. All extension names defined in a module and its submodules share the same
- * extension identifier namespace, where each extension is identified by a QName formed from the
- * defining module's QNameModule and the identifier specified in extension statement's argument.
+ * Extension namespace. All extension names defined in a module and its submodules share the same extension identifier
+ * namespace, where each extension is identified by a QName formed from the defining module's QNameModule and the
+ * identifier specified in extension statement's argument.
*/
-public interface ExtensionNamespace extends StatementNamespace<QName, ExtensionStatement, ExtensionEffectiveStatement> {
- NamespaceBehaviour<QName, StmtContext<?, ExtensionStatement, ExtensionEffectiveStatement>,
- @NonNull ExtensionNamespace> BEHAVIOUR = NamespaceBehaviour.global(ExtensionNamespace.class);
+public final class ExtensionNamespace
+ extends StatementNamespace<QName, ExtensionStatement, ExtensionEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ExtensionNamespace.class);
+ private ExtensionNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
- * Feature namespace. All feature names defined in a module and its submodules share the
- * same feature identifier namespace. Each feature is identified by a QName formed from
- * the defining module's QNameModule and the feature name.
+ * Feature namespace. All feature names defined in a module and its submodules share the same feature identifier
+ * namespace. Each feature is identified by a QName formed from the defining module's QNameModule and the feature name.
*/
-public interface FeatureNamespace extends StatementNamespace<QName, FeatureStatement, FeatureEffectiveStatement> {
- NamespaceBehaviour<QName, StmtContext<?, FeatureStatement, FeatureEffectiveStatement>,
- @NonNull FeatureNamespace> BEHAVIOUR = NamespaceBehaviour.global(FeatureNamespace.class);
+public final class FeatureNamespace extends StatementNamespace<QName, FeatureStatement, FeatureEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(FeatureNamespace.class);
+ private FeatureNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace.TreeScoped;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Grouping namespace. * All grouping names defined within a parent node or at the top level of the module
* <p>
* This means that any descendant node may use that grouping, and it MUST NOT define a grouping with the same name.
*/
-public interface GroupingNamespace extends TreeScoped<QName, GroupingStatement, GroupingEffectiveStatement> {
- NamespaceBehaviour<QName, StmtContext<?, GroupingStatement, GroupingEffectiveStatement>,
- @NonNull GroupingNamespace> BEHAVIOUR = NamespaceBehaviour.treeScoped(GroupingNamespace.class);
+public final class GroupingNamespace extends TreeScoped<QName, GroupingStatement, GroupingEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.treeScoped(GroupingNamespace.class);
+ private GroupingNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Identity namespace. All identity names defined in a module and its submodules share the same identity identifier
* namespace.
*/
-public interface IdentityNamespace extends
- StatementNamespace<QName, IdentityStatement, IdentityEffectiveStatement> {
- NamespaceBehaviour<QName, StmtContext<?, IdentityStatement, IdentityEffectiveStatement>,
- @NonNull IdentityNamespace> BEHAVIOUR = NamespaceBehaviour.global(IdentityNamespace.class);
+public final class IdentityNamespace extends StatementNamespace<QName, IdentityStatement, IdentityEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(IdentityNamespace.class);
+ private IdentityNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Module namespace. All modules known to the reactor are populated to this namespace. Each module is identified
* by a {@link SourceIdentifier}.
*/
-public interface ModuleNamespace
+public final class ModuleNamespace
extends StatementNamespace<SourceIdentifier, ModuleStatement, ModuleEffectiveStatement> {
- NamespaceBehaviour<SourceIdentifier, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
- @NonNull ModuleNamespace> BEHAVIOUR = NamespaceBehaviour.global(ModuleNamespace.class);
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleNamespace.class);
+
+ private ModuleNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* A derived namespace allowing lookup of modules based on their {@link QNameModule}.
*/
-public interface NamespaceToModule extends StatementNamespace<QNameModule, ModuleStatement, ModuleEffectiveStatement> {
- NamespaceBehaviour<QNameModule, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
- @NonNull NamespaceToModule> BEHAVIOUR = NamespaceBehaviour.global(NamespaceToModule.class);
+public final class NamespaceToModule
+ extends StatementNamespace<QNameModule, ModuleStatement, ModuleEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(NamespaceToModule.class);
+
+ private NamespaceToModule() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Intermediate-stage namespace equivalent to ModuleNamespace except it is keyed by module names. This namespace is
* used to resolve inter-module references before actual linkage occurs.
*/
-public interface PreLinkageModuleNamespace
+public final class PreLinkageModuleNamespace
extends StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement> {
- NamespaceBehaviour<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
- @NonNull PreLinkageModuleNamespace> BEHAVIOUR = NamespaceBehaviour.global(PreLinkageModuleNamespace.class);
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(PreLinkageModuleNamespace.class);
+ private PreLinkageModuleNamespace() {
+ // Hidden on purpose
+ }
}
// into yang-(parser-)reactor-api.
@Beta
public final class SchemaTreeNamespace<D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
- implements StatementNamespace<QName, D, E> {
+ extends StatementNamespace<QName, D, E> {
public static final class Behaviour<D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
extends NamespaceBehaviour<QName, StmtContext<?, D, E>, SchemaTreeNamespace<D, E>> {
-
@SuppressWarnings({ "rawtypes", "unchecked" })
- private Behaviour() {
+ Behaviour() {
super((Class) SchemaTreeNamespace.class);
}
}
}
+ private static <D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
+ StmtContext<?, D, E> requestFrom(final NamespaceStorageNode storageNode, final QName key) {
+ return storageNode instanceof OnDemandSchemaTreeStorageNode ondemand ? ondemand.requestSchemaTreeChild(key)
+ : null;
+ }
+
private static NamespaceStorageNode globalOrStatementSpecific(final NamespaceStorageNode storage) {
NamespaceStorageNode current = requireNonNull(storage);
while (!isLocalOrGlobal(current.getStorageNodeType())) {
private static boolean isLocalOrGlobal(final StorageNodeType type) {
return type == StorageNodeType.STATEMENT_LOCAL || type == StorageNodeType.GLOBAL;
}
-
- private static <D extends DeclaredStatement<QName>, E extends SchemaTreeEffectiveStatement<D>>
- StmtContext<?, D, E> requestFrom(final NamespaceStorageNode storageNode, final QName key) {
- return storageNode instanceof OnDemandSchemaTreeStorageNode ondemand ? ondemand.requestSchemaTreeChild(key)
- : null;
- }
}
public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = new Behaviour<>();
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Submodule equivalent of ModuleNamespace.
*/
// FIXME: describe scoping of this namespace
-public interface SubmoduleNamespace
- extends StatementNamespace<SourceIdentifier, SubmoduleStatement, SubmoduleEffectiveStatement> {
- NamespaceBehaviour<SourceIdentifier, StmtContext<?, SubmoduleStatement, SubmoduleEffectiveStatement>,
- @NonNull SubmoduleNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(SubmoduleNamespace.class);
+public final class SubmoduleNamespace
+ extends StatementNamespace<SourceIdentifier, SubmoduleStatement, SubmoduleEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(SubmoduleNamespace.class);
+
+ private SubmoduleNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace.TreeScoped;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Derived types namespace. All derived type names defined within a parent node or at the top level of the module
* This namespace includes all type definitions implied by the language in which the current statement resides
* (e.g. RFC6020/RFC7950 for YANG 1.0/1.1).
*/
-public interface TypeNamespace extends TreeScoped<QName, TypedefStatement, TypedefEffectiveStatement> {
- NamespaceBehaviour<QName, StmtContext<?, TypedefStatement, TypedefEffectiveStatement>, @NonNull TypeNamespace>
- BEHAVIOUR = NamespaceBehaviour.treeScoped(TypeNamespace.class);
+public final class TypeNamespace extends TreeScoped<QName, TypedefStatement, TypedefEffectiveStatement> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.treeScoped(TypeNamespace.class);
+ private TypeNamespace() {
+ // Hidden on purpose
+ }
}
* Special namespace which allows import of namespaces from other sources.
*
* <p>
- * This namespace and its subclasses are used by model processor to
- * link / import namespaces to context node from supplied {@link StmtContext}.
+ * This namespace and its subclasses are used by model processor to link / import namespaces to context node from
+ * supplied {@link StmtContext}.
*
* <p>
- * This abstraction allows for imports and includes be implement as derived
- * namespaces of this, but is not tied only for import and include statements.
+ * This abstraction allows for imports and includes be implement as derived namespaces of this, but is not tied only for
+ * import and include statements.
*
* @param <K> Imported context identifier
*/
-public interface ImportedNamespaceContext<K> extends ParserNamespace<K, StmtContext<?, ?, ?>> {
+public abstract class ImportedNamespaceContext<K> extends ParserNamespace<K, StmtContext<?, ?, ?>> {
}
*/
package org.opendaylight.yangtools.yang.parser.spi.meta;
-import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
/**
* {@link ParserNamespace} serves as common superclass for namespaces used during parser operation. Each such namespace,
* @param <K> Identifier type
* @param <V> Value type
*/
-@Beta
-public interface ParserNamespace<K, V> {
+@NonNullByDefault
+public abstract class ParserNamespace<K, V> {
+ @Override
+ public final int hashCode() {
+ return super.hashCode();
+ }
+ @Override
+ public final boolean equals(final @Nullable Object obj) {
+ return super.equals(obj);
+ }
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(this).toString();
+ }
}
// At the end of the day this feels like an under-utilized namespace: provided the contents of ExtensionNamespace and
// StatementSupportBundles, SourceSpecificSpecificContext should be able to work its magic even without this namespace.
@Beta
-public interface StatementDefinitionNamespace extends ParserNamespace<QName, StatementSupport<?, ?, ?>> {
- NamespaceBehaviour<QName, StatementSupport<?, ?, ?>, @NonNull StatementDefinitionNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(StatementDefinitionNamespace.class);
+public final class StatementDefinitionNamespace extends ParserNamespace<QName, StatementSupport<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(StatementDefinitionNamespace.class);
+ private StatementDefinitionNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-public interface StatementNamespace<K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>>
+public abstract class StatementNamespace<K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>>
extends ParserNamespace<K, StmtContext<?, D, E>> {
-
- interface TreeScoped<K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>>
+ public abstract static class TreeScoped<K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>>
extends StatementNamespace<K, D, E> {
}
return null;
}
- public <K, V, N extends ParserNamespace<K, V>> boolean hasNamespaceBehaviour(final Class<N> namespace) {
+ public boolean hasNamespaceBehaviour(final Class<? extends ParserNamespace<?, ?>> namespace) {
if (namespaceDefinitions.containsKey(namespace)) {
return true;
}
return this;
}
- public <K, V, N extends ParserNamespace<K, V>> @NonNull Builder addSupport(
- final NamespaceBehaviour<K, V, N> namespaceSupport) {
- final Class<N> identifier = namespaceSupport.getIdentifier();
+ public @NonNull Builder addSupport(final NamespaceBehaviour<?, ? ,?> namespaceSupport) {
+ final var identifier = namespaceSupport.getIdentifier();
checkState(!namespaces.containsKey(identifier));
checkState(!parent.hasNamespaceBehaviour(identifier));
namespaces.put(identifier, namespaceSupport);
* as {@link StatementDefinitionNamespace} and {@link StmtContext#yangVersion()} of the source root statement.
*/
@Beta
-public interface StatementSupportNamespace extends ParserNamespace<QName, StatementSupport<?, ?, ?>> {
-
+public final class StatementSupportNamespace extends ParserNamespace<QName, StatementSupport<?, ?, ?>> {
+ StatementSupportNamespace() {
+ // FIXME: is this really used?!
+ }
}
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.parser.spi.meta.ImportedNamespaceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
* Source-specific mapping of belongsTo prefixes to module identifiers. This mapping allows source-specific context
* to correctly populate prefixes map for actual parsing phase and eventually, resolve QName for any valid declared
* statement.
*/
-public interface BelongsToPrefixToModuleCtx extends ImportedNamespaceContext<String> {
- NamespaceBehaviour<String, StmtContext<?, ?, ?>, @NonNull BelongsToPrefixToModuleCtx> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleCtx.class);
+public final class BelongsToPrefixToModuleCtx extends ImportedNamespaceContext<String> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleCtx.class);
+
+ private BelongsToPrefixToModuleCtx() {
+ // Hidden on purpose
+ }
}
/**
* Source-specific mapping of prefixes to namespaces.
*/
-public interface BelongsToPrefixToModuleName extends ParserNamespace<String, Unqualified> {
- NamespaceBehaviour<String, Unqualified, @NonNull BelongsToPrefixToModuleName> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleName.class);
+public final class BelongsToPrefixToModuleName extends ParserNamespace<String, Unqualified> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleName.class);
+
+ private BelongsToPrefixToModuleName() {
+ // Hidden on purpose
+ }
}
/**
* Pre-linkage source-specific mapping of prefixes to module namespaces.
*/
-public interface ImpPrefixToNamespace extends ParserNamespace<String, XMLNamespace> {
- NamespaceBehaviour<String, XMLNamespace, @NonNull ImpPrefixToNamespace> BEHAVIOUR =
- NamespaceBehaviour.rootStatementLocal(ImpPrefixToNamespace.class);
+public final class ImpPrefixToNamespace extends ParserNamespace<String, XMLNamespace> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.rootStatementLocal(ImpPrefixToNamespace.class);
+
+ private ImpPrefixToNamespace() {
+ // Hidden on purpose
+ }
}
/**
* Source-specific mapping of prefix strings to module context.
*/
-public interface ImportPrefixToModuleCtx extends ParserNamespace<String, StmtContext<?, ?, ?>> {
- NamespaceBehaviour<String, StmtContext<?, ?, ?>, @NonNull ImportPrefixToModuleCtx> BEHAVIOUR =
- NamespaceBehaviour.rootStatementLocal(ImportPrefixToModuleCtx.class);
+public final class ImportPrefixToModuleCtx extends ParserNamespace<String, StmtContext<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.rootStatementLocal(ImportPrefixToModuleCtx.class);
+
+ private ImportPrefixToModuleCtx() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.meta.ImportedNamespaceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-public interface ImportedModuleContext extends ImportedNamespaceContext<SourceIdentifier> {
- NamespaceBehaviour<SourceIdentifier, StmtContext<?, ?, ?>, @NonNull ImportedModuleContext> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(ImportedModuleContext.class);
+public final class ImportedModuleContext extends ImportedNamespaceContext<SourceIdentifier> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(ImportedModuleContext.class);
+
+ private ImportedModuleContext() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.meta.ImportedNamespaceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-public interface IncludedModuleContext extends ImportedNamespaceContext<SourceIdentifier> {
- NamespaceBehaviour<SourceIdentifier, StmtContext<?, ?, ?>, @NonNull IncludedModuleContext> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(IncludedModuleContext.class);
+public final class IncludedModuleContext extends ImportedNamespaceContext<SourceIdentifier> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(IncludedModuleContext.class);
+
+ private IncludedModuleContext() {
+ // Hidden on purpose
+ }
}
/**
* Source-specific mapping of prefixes to namespaces.
*/
-public interface IncludedSubmoduleNameToModuleCtx extends ParserNamespace<Unqualified, StmtContext<?, ?, ?>> {
- NamespaceBehaviour<Unqualified, StmtContext<?, ?, ?>, @NonNull IncludedSubmoduleNameToModuleCtx> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(IncludedSubmoduleNameToModuleCtx.class);
+public final class IncludedSubmoduleNameToModuleCtx extends ParserNamespace<Unqualified, StmtContext<?, ?, ?>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(IncludedSubmoduleNameToModuleCtx.class);
+
+ private IncludedSubmoduleNameToModuleCtx() {
+ // Hidden on purpose
+ }
}
/**
* Global mapping of modules to QNameModules.
*/
-public interface ModuleCtxToModuleQName extends ParserNamespace<StmtContext<?,?,?>, QNameModule> {
- NamespaceBehaviour<StmtContext<?, ?, ?>, QNameModule, @NonNull ModuleCtxToModuleQName> BEHAVIOUR =
- NamespaceBehaviour.global(ModuleCtxToModuleQName.class);
+public final class ModuleCtxToModuleQName extends ParserNamespace<StmtContext<?,?,?>, QNameModule> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleCtxToModuleQName.class);
+ private ModuleCtxToModuleQName() {
+ // Hidden on purpose
+ }
}
/**
* Global mapping of modules to source identifier.
*/
-public interface ModuleCtxToSourceIdentifier extends ParserNamespace<StmtContext<?, ?, ?>, SourceIdentifier> {
- NamespaceBehaviour<StmtContext<?, ?, ?>, SourceIdentifier, @NonNull ModuleCtxToSourceIdentifier> BEHAVIOUR =
- NamespaceBehaviour.global(ModuleCtxToSourceIdentifier.class);
+public final class ModuleCtxToSourceIdentifier extends ParserNamespace<StmtContext<?, ?, ?>, SourceIdentifier> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleCtxToSourceIdentifier.class);
+
+ private ModuleCtxToSourceIdentifier() {
+ // Hidden on purpose
+ }
}
/**
* Source-specific mapping of prefixes to namespaces.
*/
-public interface ModuleNameToModuleQName extends ParserNamespace<Unqualified, QNameModule> {
- NamespaceBehaviour<Unqualified, QNameModule, @NonNull ModuleNameToModuleQName> BEHAVIOUR =
- NamespaceBehaviour.sourceLocal(ModuleNameToModuleQName.class);
+public final class ModuleNameToModuleQName extends ParserNamespace<Unqualified, QNameModule> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.sourceLocal(ModuleNameToModuleQName.class);
+
+ private ModuleNameToModuleQName() {
+ // Hidden on purpose
+ }
}
/**
* Pre-linkage global mapping of module names to namespaces.
*/
-public interface ModuleNameToNamespace extends ParserNamespace<Unqualified, XMLNamespace> {
- NamespaceBehaviour<Unqualified, XMLNamespace, @NonNull ModuleNameToNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(ModuleNameToNamespace.class);
+public final class ModuleNameToNamespace extends ParserNamespace<Unqualified, XMLNamespace> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleNameToNamespace.class);
+
+ private ModuleNameToNamespace() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
/**
- * namespace class similar to {@link org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace} for storing modules
+ * Namespace class similar to {@link org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace} for storing modules
* into Yang model storage but keyed by plain name.
*/
-public interface ModuleNamespaceForBelongsTo
+public final class ModuleNamespaceForBelongsTo
extends StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement> {
- NamespaceBehaviour<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
- @NonNull ModuleNamespaceForBelongsTo> BEHAVIOUR = NamespaceBehaviour.global(ModuleNamespaceForBelongsTo.class);
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleNamespaceForBelongsTo.class);
+
+ private ModuleNamespaceForBelongsTo() {
+ // Hidden on purpose
+ }
}
/**
* Source-specific mapping of prefixes to namespaces.
*/
-public interface ModuleQNameToModuleName extends ParserNamespace<QNameModule, Unqualified> {
- NamespaceBehaviour<QNameModule, Unqualified, @NonNull ModuleQNameToModuleName> BEHAVIOUR =
- NamespaceBehaviour.global(ModuleQNameToModuleName.class);
+public final class ModuleQNameToModuleName extends ParserNamespace<QNameModule, Unqualified> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModuleQNameToModuleName.class);
+
+ private ModuleQNameToModuleName() {
+ // Hidden on purpose
+ }
}
* Map key (QNameModule) denotes a module which can be deviated by the modules specified in the Map value.
*/
@Beta
-public interface ModulesDeviatedByModules extends ParserNamespace<Empty, SetMultimap<QNameModule, QNameModule>> {
- NamespaceBehaviour<Empty, SetMultimap<QNameModule, QNameModule>, @NonNull ModulesDeviatedByModules>
- BEHAVIOUR = NamespaceBehaviour.global(ModulesDeviatedByModules.class);
+public final class ModulesDeviatedByModules extends ParserNamespace<Empty, SetMultimap<QNameModule, QNameModule>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ModulesDeviatedByModules.class);
+
+ private ModulesDeviatedByModules() {
+ // Hidden on purpose
+ }
}
*
* @see PrefixResolver
*/
-public interface PrefixToModule extends ParserNamespace<String, QNameModule> {
- NamespaceBehaviour<String, QNameModule, @NonNull PrefixToModule> BEHAVIOUR =
- NamespaceBehaviour.global(PrefixToModule.class);
+public final class PrefixToModule extends ParserNamespace<String, QNameModule> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(PrefixToModule.class);
+
+ private PrefixToModule() {
+ // Hidden on purpose
+ }
}
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-public interface SupportedFeaturesNamespace extends ParserNamespace<Empty, Set<QName>> {
- NamespaceBehaviour<Empty, Set<QName>, @NonNull SupportedFeaturesNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(SupportedFeaturesNamespace.class);
+public final class SupportedFeaturesNamespace extends ParserNamespace<Empty, Set<QName>> {
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(SupportedFeaturesNamespace.class);
+
+ private SupportedFeaturesNamespace() {
+ // Hidden on purpose
+ }
}
* Namespace used for validating whether a node is of some type, e.g. usable target for some operation or has other
* significant properties.
*/
-public interface ValidationBundlesNamespace
+public final class ValidationBundlesNamespace
extends ParserNamespace<ValidationBundlesNamespace.ValidationBundleType, Collection<?>> {
- NamespaceBehaviour<ValidationBundleType, Collection<?>, @NonNull ValidationBundlesNamespace> BEHAVIOUR =
- NamespaceBehaviour.global(ValidationBundlesNamespace.class);
+ public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
+ NamespaceBehaviour.global(ValidationBundlesNamespace.class);
- enum ValidationBundleType {
+ private ValidationBundlesNamespace() {
+ // Hidden on purpose
+ }
+
+ public enum ValidationBundleType {
/**
* Whether a node is suitable refine substatement.
*/
+++ /dev/null
-/*
- * Copyright (c) 2017 Pantheon Technologies 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.spi.validation;
-
-import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.BEHAVIOUR;
-import static org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType.SUPPORTED_DATA_NODES;
-
-import java.util.Collection;
-import org.junit.Test;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
-
-public class ValidationBundlesNamespaceTest {
- @Test
- public void testBehaviour() {
- final NamespaceStorageNode node = mock(NamespaceStorageNode.class);
- doReturn(StorageNodeType.GLOBAL).when(node).getStorageNodeType();
-
- final Collection<?> result = mock(Collection.class);
- doReturn(result).when(node).getFromLocalStorage(ValidationBundlesNamespace.class, SUPPORTED_DATA_NODES);
- assertSame(result, BEHAVIOUR.getFrom(node, SUPPORTED_DATA_NODES));
- }
-}