Remove ParserNamespace type captures 49/102149/6
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Aug 2022 11:49:50 +0000 (13:49 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Aug 2022 21:29:34 +0000 (23:29 +0200)
We are overly-generifying the situation around namespaces. Just pass
objects down and stop worrying.

JIRA: YANGTOOLS-1453
Change-Id: Ieb937fcc68ee65d396f5faaa6b0f1f1a200499e6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
36 files changed:
parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataArgumentNamespace.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ForwardingUndeclaredCurrent.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceBehaviourWithListeners.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SimpleNamespaceContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/VirtualNamespaceContext.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/ModuleQNameToPrefix.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/YangNamespaceContextNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/CustomCrossSourceStatementReactorBuilder.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentImplicitHandlingNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportedVersionNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ConfigListWarningNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/QNameModuleNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineTargetNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BaseTypeNamespace.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/SourceGroupingNamespace.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyNamespace.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/NamespaceBehaviours.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespaceBehaviour.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/DerivedNamespaceBehaviour.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ModelActionBuilder.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceBehaviour.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceStmtCtx.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementDefinitions.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupportBundle.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/SourceNamespaceBehaviours.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/validation/ValidationBundles.java

index 2fe2c7aa99d633555bf388fa2c0fe623dbffdf89..b399a8ef0e0538b2545a06a9731a04e79579752b 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 //        with 'identifier', hence we cannot safely form a QName.
 public final class YangDataArgumentNamespace {
     public static final @NonNull ParserNamespace<Empty, QName> INSTANCE = new ParserNamespace<>("yangDataArgument");
-    public static final @NonNull NamespaceBehaviour<?, ? ,?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<? ,?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private YangDataArgumentNamespace() {
         // Hidden on purpose
index c2bd655542abddb9f5111b9591d64788830bec1c..6f490567abdb6d2f1c1f89c375c38218f6dd7244 100644 (file)
@@ -77,7 +77,7 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
 
     private final Table<YangVersion, QName, StatementDefinitionContext<?, ?, ?>> definitions = HashBasedTable.create();
     private final Map<QName, StatementDefinitionContext<?, ?, ?>> modelDefinedStmtDefs = new HashMap<>();
-    private final Map<ParserNamespace<?, ?>, NamespaceBehaviourWithListeners<?, ?, ?>> supportedNamespaces =
+    private final Map<ParserNamespace<?, ?>, NamespaceBehaviourWithListeners<?, ?>> supportedNamespaces =
         new HashMap<>();
     private final List<MutableStatement> mutableStatementsToSeal = new ArrayList<>();
     private final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supports;
@@ -138,9 +138,8 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviourWithListeners<K, V, N> getNamespaceBehaviour(
-            final N type) {
-        NamespaceBehaviourWithListeners<?, ?, ?> potential = supportedNamespaces.get(type);
+    public <K, V> NamespaceBehaviourWithListeners<K, V> getNamespaceBehaviour(final ParserNamespace<K, V> type) {
+        NamespaceBehaviourWithListeners<?, ?> potential = supportedNamespaces.get(type);
         if (potential == null) {
             final var potentialRaw = verifyNotNull(supports.get(currentPhase)).getNamespaceBehaviour(type);
             if (potentialRaw != null) {
@@ -157,12 +156,12 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
          * Safe cast, previous checkState checks equivalence of key from which
          * type argument are derived
          */
-        return (NamespaceBehaviourWithListeners<K, V, N>) potential;
+        return (NamespaceBehaviourWithListeners<K, V>) potential;
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    private <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviourWithListeners<K, V, N> createNamespaceContext(
-            final NamespaceBehaviour<K, V, N> potentialRaw) {
+    private <K, V> NamespaceBehaviourWithListeners<K, V> createNamespaceContext(
+            final NamespaceBehaviour<K, V> potentialRaw) {
         if (potentialRaw instanceof DerivedNamespaceBehaviour derived) {
             final VirtualNamespaceContext derivedContext = new VirtualNamespaceContext(derived);
             getNamespaceBehaviour(derived.getDerivedFrom()).addDerivedNamespace(derivedContext);
index 5746c7a1feaecbb2288a9c689f01bf3dde1808ca..54b6cfbda72b838c62fe113c04e79b36322e9c62 100644 (file)
@@ -80,17 +80,17 @@ final class ForwardingUndeclaredCurrent<A, D extends DeclaredStatement<A>> exten
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> Map<K, V> namespace(final @NonNull N nsType) {
+    public <K, V> Map<K, V> namespace(final ParserNamespace<K, V> nsType) {
         return delegate.namespace(nsType);
     }
 
     @Override
-    public <K, V, T extends K, N extends ParserNamespace<K, V>> V namespaceItem(final @NonNull N nsType, final T key) {
+    public <K, V, T extends K> V namespaceItem(final ParserNamespace<K, V> nsType, final T key) {
         return delegate.namespaceItem(nsType, key);
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> Map<K, V> localNamespacePortion(final @NonNull N nsType) {
+    public <K, V> Map<K, V> localNamespacePortion(final ParserNamespace<K, V> nsType) {
         return delegate.localNamespacePortion(nsType);
     }
 
index a254d391d2f009d9de5a706540e3d0b8b30062cf..9c0eccfd96166e8b9f3949f627baadb9df2a9795 100644 (file)
@@ -88,9 +88,9 @@ final class ModifierImpl implements ModelActionBuilder {
         action = null;
     }
 
-    private <K, C extends StmtContext<?, ?, ?>, N extends StatementNamespace<K, ?, ?>> @NonNull AbstractPrerequisite<C>
-            requiresCtxImpl(final StmtContext<?, ?, ?> context, final N namespace, final K key,
-                    final ModelProcessingPhase phase)  {
+    private <K, C extends StmtContext<?, ?, ?>> @NonNull AbstractPrerequisite<C> requiresCtxImpl(
+            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ?> namespace, final K key,
+            final ModelProcessingPhase phase)  {
         checkNotRegistered();
 
         AddedToNamespace<C> addedToNs = new AddedToNamespace<>(phase);
@@ -99,9 +99,9 @@ final class ModifierImpl implements ModelActionBuilder {
         return addedToNs;
     }
 
-    private <K, C extends StmtContext<?, ?, ?>, N extends StatementNamespace<K, ?, ?>> @NonNull AbstractPrerequisite<C>
-            requiresCtxImpl(final StmtContext<?, ?, ?> context, final N namespace,
-                    final NamespaceKeyCriterion<K> criterion, final ModelProcessingPhase phase)  {
+    private <K, C extends StmtContext<?, ?, ?>> @NonNull AbstractPrerequisite<C> requiresCtxImpl(
+            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ?> namespace,
+            final NamespaceKeyCriterion<K> criterion, final ModelProcessingPhase phase)  {
         checkNotRegistered();
 
         AddedToNamespace<C> addedToNs = new AddedToNamespace<>(phase);
@@ -161,30 +161,30 @@ final class ModifierImpl implements ModelActionBuilder {
     @Override
     public <A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
             AbstractPrerequisite<StmtContext<A, D, E>> requiresCtx(final StmtContext<A, D, E> context,
-                    final ModelProcessingPhase phase) {
+                final ModelProcessingPhase phase) {
         return requiresCtxImpl(context, phase);
     }
 
     @Override
-    public <K, N extends StatementNamespace<K, ?, ?>> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(
-            final StmtContext<?, ?, ?> context, final N namespace, final K key, final ModelProcessingPhase phase) {
+    public <K> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(final StmtContext<?, ?, ?> context,
+            final StatementNamespace<K, ?, ?> namespace, final K key, final ModelProcessingPhase phase) {
         return requiresCtxImpl(context, namespace, key, phase);
     }
 
     @Override
-    public <K, N extends StatementNamespace<K, ?, ?>> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(
-            final StmtContext<?, ?, ?> context, final N namespace, final NamespaceKeyCriterion<K> criterion,
+    public <K> Prerequisite<StmtContext<?, ?, ?>> requiresCtx(final StmtContext<?, ?, ?> context,
+            final StatementNamespace<K, ?, ?> namespace, final NamespaceKeyCriterion<K> criterion,
             final ModelProcessingPhase phase) {
         return requiresCtxImpl(context, namespace, criterion, phase);
     }
 
     @Override
-    public <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-            Prerequisite<StmtContext<?, ?, E>> requiresCtxPath(final StmtContext<?, ?, ?> context,
-                final N namespace, final Iterable<K> keys, final ModelProcessingPhase phase) {
+    public <K, E extends EffectiveStatement<?, ?>> Prerequisite<StmtContext<?, ?, E>> requiresCtxPath(
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace,
+            final Iterable<K> keys, final ModelProcessingPhase phase) {
         checkNotRegistered();
 
-        final var ret = new PhaseRequirementInNamespacePath<StmtContext<?, ?, E>, K, N>(EFFECTIVE_MODEL, keys);
+        final var ret = new PhaseRequirementInNamespacePath<StmtContext<?, ?, E>, K>(EFFECTIVE_MODEL, keys);
         addReq(ret);
         addBootstrap(() -> ret.hookOnto(context, namespace));
         return ret;
@@ -198,8 +198,8 @@ final class ModifierImpl implements ModelActionBuilder {
 
     @Override
     @Deprecated
-    public <K, D extends DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>> Prerequisite<D>
-            requiresDeclared(final StmtContext<?, ?, ?> context, final N namespace, final K key) {
+    public <K, D extends DeclaredStatement<?>> Prerequisite<D> requiresDeclared(final StmtContext<?, ?, ?> context,
+            final StatementNamespace<K, ? extends D, ?> namespace, final K key) {
         final AbstractPrerequisite<StmtContext<?, D, ?>> rawContext = requiresCtxImpl(context, namespace, key,
             FULL_DECLARATION);
         return rawContext.transform(StmtContext::declared);
@@ -207,9 +207,8 @@ final class ModifierImpl implements ModelActionBuilder {
 
     @Override
     @Deprecated
-    public <K, D extends DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>>
-            AbstractPrerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(final StmtContext<?, ?, ?> context,
-                    final N namespace, final K key) {
+    public <K, D extends DeclaredStatement<?>> AbstractPrerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(
+            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ? extends D, ?> namespace, final K key) {
         return requiresCtxImpl(context, namespace, key, FULL_DECLARATION);
     }
 
@@ -222,8 +221,8 @@ final class ModifierImpl implements ModelActionBuilder {
 
     @Override
     @Deprecated
-    public <K, E extends EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>> Prerequisite<E>
-            requiresEffective(final StmtContext<?, ?, ?> context, final N namespace, final K key) {
+    public <K, E extends EffectiveStatement<?, ?>> Prerequisite<E> requiresEffective(final StmtContext<?, ?, ?> context,
+            final StatementNamespace<K, ?, ? extends E> namespace, final K key) {
         final AbstractPrerequisite<StmtContext<?, ?, E>> rawContext = requiresCtxImpl(context, namespace, key,
             EFFECTIVE_MODEL);
         return rawContext.transform(StmtContext::buildEffective);
@@ -231,33 +230,32 @@ final class ModifierImpl implements ModelActionBuilder {
 
     @Override
     @Deprecated
-    public <K, E extends EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>>
-            AbstractPrerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(final StmtContext<?, ?, ?> context,
-                    final N namespace, final K key) {
+    public <K, E extends EffectiveStatement<?, ?>> AbstractPrerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(
+            final StmtContext<?, ?, ?> context, final StatementNamespace<K, ?, ? extends E> namespace, final K key) {
         return requiresCtxImpl(contextImpl(context), namespace, key, EFFECTIVE_MODEL);
     }
 
     @Override
     @Deprecated
-    public <N extends ParserNamespace<?, ?>> Prerequisite<Mutable<?, ?, ?>> mutatesNs(final Mutable<?, ?, ?> context,
-            final N namespace) {
-        return addMutation(new NamespaceMutation<>(contextImpl(context), namespace));
+    public Prerequisite<Mutable<?, ?, ?>> mutatesNs(final Mutable<?, ?, ?> context,
+            final ParserNamespace<?, ?> namespace) {
+        return addMutation(new NamespaceMutation(contextImpl(context), namespace));
     }
 
     @Override
-    public <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-            AbstractPrerequisite<Mutable<?, ?, E>> mutatesEffectiveCtx(final StmtContext<?, ?, ?> context,
-                    final N namespace, final K key) {
+    public <K, E extends EffectiveStatement<?, ?>> AbstractPrerequisite<Mutable<?, ?, E>> mutatesEffectiveCtx(
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace,
+            final K key) {
         return mutatesCtxImpl(context, namespace, key, EFFECTIVE_MODEL);
     }
 
     @Override
-    public <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-            AbstractPrerequisite<Mutable<?, ?, E>> mutatesEffectiveCtxPath(final StmtContext<?, ?, ?> context,
-                    final N namespace, final Iterable<K> keys) {
+    public <K, E extends EffectiveStatement<?, ?>> AbstractPrerequisite<Mutable<?, ?, E>> mutatesEffectiveCtxPath(
+            final StmtContext<?, ?, ?> context, final ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace,
+            final Iterable<K> keys) {
         checkNotRegistered();
 
-        final var ret = new PhaseModificationInNamespacePath<Mutable<?, ?, E>, K, N>(EFFECTIVE_MODEL, keys);
+        final var ret = new PhaseModificationInNamespacePath<Mutable<?, ?, E>, K>(EFFECTIVE_MODEL, keys);
         addReq(ret);
         addMutation(ret);
         addBootstrap(() -> ret.hookOnto(context, namespace));
@@ -319,8 +317,7 @@ final class ModifierImpl implements ModelActionBuilder {
         }
     }
 
-    private abstract class AbstractPathPrerequisite<C extends StmtContext<?, ?, ?>, K,
-            N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> extends AbstractPrerequisite<C>
+    private abstract class AbstractPathPrerequisite<C extends StmtContext<?, ?, ?>, K> extends AbstractPrerequisite<C>
             implements OnNamespaceItemAdded {
         private final ModelProcessingPhase modPhase;
         private final Iterable<K> keys;
@@ -402,9 +399,8 @@ final class ModifierImpl implements ModelActionBuilder {
         }
     }
 
-    private final class NamespaceMutation<N extends ParserNamespace<?, ?>>
-            extends AbstractPrerequisite<Mutable<?, ?, ?>>  {
-        NamespaceMutation(final StatementContextBase<?, ?, ?> ctx, final N namespace) {
+    private final class NamespaceMutation extends AbstractPrerequisite<Mutable<?, ?, ?>> {
+        NamespaceMutation(final StatementContextBase<?, ?, ?> ctx, final ParserNamespace<?, ?> namespace) {
             resolvePrereq(ctx);
         }
     }
@@ -436,8 +432,8 @@ final class ModifierImpl implements ModelActionBuilder {
         }
     }
 
-    private final class PhaseRequirementInNamespacePath<C extends StmtContext<?, ?, ?>, K,
-            N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> extends AbstractPathPrerequisite<C, K, N> {
+    private final class PhaseRequirementInNamespacePath<C extends StmtContext<?, ?, ?>, K>
+            extends AbstractPathPrerequisite<C, K> {
         PhaseRequirementInNamespacePath(final ModelProcessingPhase phase, final Iterable<K> keys) {
             super(phase, keys);
         }
@@ -478,9 +474,8 @@ final class ModifierImpl implements ModelActionBuilder {
      * target. The mechanics is driven as a sequence of prerequisites along a path: first we hook onto namespace to
      * give us the first step. When it does, we hook onto the first item to provide us the second step and so on.
      */
-    private final class PhaseModificationInNamespacePath<C extends Mutable<?, ?, ?>, K,
-            N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>> extends AbstractPathPrerequisite<C, K, N>
-            implements ContextMutation {
+    private final class PhaseModificationInNamespacePath<C extends Mutable<?, ?, ?>, K>
+            extends AbstractPathPrerequisite<C, K> implements ContextMutation {
         PhaseModificationInNamespacePath(final ModelProcessingPhase phase, final Iterable<K> keys) {
             super(phase, keys);
         }
index a268e8ae52c94b6f584fdbb4a524181f8d7e7057..bd67db1e08a5992552064c110924ff8ab4bd4123 100644 (file)
@@ -16,11 +16,8 @@ import java.util.List;
 import java.util.Map;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-
-abstract class NamespaceBehaviourWithListeners<K, V, N extends ParserNamespace<K, V>>
-        extends NamespaceBehaviour<K, V, N> {
 
+abstract class NamespaceBehaviourWithListeners<K, V> extends NamespaceBehaviour<K, V> {
     abstract static class ValueAddedListener<K> {
         private final NamespaceStorageNode ctxNode;
 
@@ -45,8 +42,8 @@ abstract class NamespaceBehaviourWithListeners<K, V, N extends ParserNamespace<K
             return key;
         }
 
-        final <V> boolean isRequestedValue(final NamespaceBehaviour<K, ? , ?> behavior,
-                final NamespaceStorageNode storage, final V value) {
+        final <V> boolean isRequestedValue(final NamespaceBehaviour<K, ?> behavior, final NamespaceStorageNode storage,
+                final V value) {
             return value == behavior.getFrom(getCtxNode(), key);
         }
 
@@ -61,11 +58,11 @@ abstract class NamespaceBehaviourWithListeners<K, V, N extends ParserNamespace<K
         abstract boolean onValueAdded(@NonNull K key, @NonNull V value);
     }
 
-    protected final NamespaceBehaviour<K, V, N> delegate;
+    protected final NamespaceBehaviour<K, V> delegate;
 
-    private List<VirtualNamespaceContext<?, V, ?, K>> derivedNamespaces;
+    private List<VirtualNamespaceContext<?, V, K>> derivedNamespaces;
 
-    protected NamespaceBehaviourWithListeners(final NamespaceBehaviour<K, V, N> delegate) {
+    protected NamespaceBehaviourWithListeners(final NamespaceBehaviour<K, V> delegate) {
         super(delegate.getIdentifier());
         this.delegate = delegate;
     }
@@ -94,13 +91,13 @@ abstract class NamespaceBehaviourWithListeners<K, V, N extends ParserNamespace<K
 
     protected void notifyDerivedNamespaces(final NamespaceStorageNode storage, final K key, final V value) {
         if (derivedNamespaces != null) {
-            for (VirtualNamespaceContext<?, V, ?, K> derived : derivedNamespaces) {
+            for (VirtualNamespaceContext<?, V, K> derived : derivedNamespaces) {
                 derived.addedToSourceNamespace(storage, key, value);
             }
         }
     }
 
-    final void addDerivedNamespace(final VirtualNamespaceContext<?, V, ?, K> namespace) {
+    final void addDerivedNamespace(final VirtualNamespaceContext<?, V, K> namespace) {
         if (derivedNamespaces == null) {
             derivedNamespaces = new ArrayList<>();
         }
index 7a815608f8c6db505f1c59603ad7b1edc5fd1680..9793a648144afe7e40da56dbafcf3a0188947ff3 100644 (file)
@@ -15,6 +15,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
+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;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
@@ -61,22 +63,21 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
      *
      * @throws SourceException instance of SourceException
      */
-    protected <K, V, N extends ParserNamespace<K, V>> void onNamespaceElementAdded(final N type, final K key,
-            final V value) {
+    protected <K, V> void onNamespaceElementAdded(final ParserNamespace<K, V> type, final K key, final V value) {
         // NOOP
     }
 
-    public final <K, V, N extends ParserNamespace<K, V>> Optional<Entry<K, V>> getFromNamespace(final N type,
+    public final <K, V> Optional<Entry<K, V>> getFromNamespace(final ParserNamespace<K, V> type,
             final NamespaceKeyCriterion<K> criterion) {
         return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, criterion);
     }
 
-    public final <K, V, N extends ParserNamespace<K, V>> Map<K, V> getNamespace(final N type) {
+    public final <K, V> Map<K, V> getNamespace(final ParserNamespace<K, V> type) {
         return getBehaviourRegistry().getNamespaceBehaviour(type).getAllFrom(this);
     }
 
     @SuppressWarnings("unchecked")
-    final <K, V, N extends ParserNamespace<K, V>> Map<K, V> getLocalNamespace(final N type) {
+    final <K, V> Map<K, V> getLocalNamespace(final ParserNamespace<K, V> type) {
         return (Map<K, V>) accessNamespaces().get(type);
     }
 
@@ -85,9 +86,8 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
         getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this, key, value);
     }
 
-    final <K, V, T extends K, U extends V, N extends ParserNamespace<K, V>> void addToNamespace(final N type,
-            final Map<T, U> map) {
-        final NamespaceBehaviour<K, V, N> behavior = getBehaviourRegistry().getNamespaceBehaviour(type);
+    final <K, V, T extends K, U extends V> void addToNamespace(final ParserNamespace<K, V> type, final Map<T, U> map) {
+        final NamespaceBehaviour<K, V> behavior = getBehaviourRegistry().getNamespaceBehaviour(type);
         for (final Entry<T, U> validationBundle : map.entrySet()) {
             behavior.addTo(this, validationBundle.getKey(), validationBundle.getValue());
         }
@@ -100,39 +100,38 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
      * @param key Key
      * @param value Context value
      * @param <K> namespace key type
-     * @param <N> namespace type
+     * @param <D> declared statement type
+     * @param <E> effective statement type
      * @throws NamespaceNotAvailableException when the namespace is not available.
      */
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public final <K, N extends StatementNamespace<K, ?,?>> void addContextToNamespace(final N type, final K key,
-            final StmtContext<?, ?, ?> value) {
+    public final <K, D extends DeclaredStatement<?>, E extends EffectiveStatement<?, D>> void addContextToNamespace(
+            final StatementNamespace<K, D, E> type, final K key, final StmtContext<?, D, E> value) {
         getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this, key, value);
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V getFromLocalStorage(final N type, final K key) {
+    public <K, V> V getFromLocalStorage(final ParserNamespace<K, V> type, final K key) {
         final Map<K, V> localNamespace = (Map<K, V>) accessNamespaces().get(type);
         return localNamespace == null ? null : localNamespace.get(key);
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> Map<K, V> getAllFromLocalStorage(final N type) {
+    public <K, V> Map<K, V> getAllFromLocalStorage(final ParserNamespace<K, V> type) {
         @SuppressWarnings("unchecked")
         final Map<K, V> localNamespace = (Map<K, V>) accessNamespaces().get(type);
         return localNamespace;
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V putToLocalStorage(final N type, final K key, final V value) {
+    public <K, V> V putToLocalStorage(final ParserNamespace<K, V> type, final K key, final V value) {
         final V ret = ensureLocalNamespace(type).put(key, value);
         onNamespaceElementAdded(type, key, value);
         return ret;
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V putToLocalStorageIfAbsent(final N type, final K key,
-            final V value) {
+    public <K, V> V putToLocalStorageIfAbsent(final ParserNamespace<K, V> type, final K key, final V value) {
         final V ret = ensureLocalNamespace(type).putIfAbsent(key, value);
         if (ret == null) {
             onNamespaceElementAdded(type, key, value);
@@ -165,7 +164,7 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
         return verifyNotNull(namespaces, "Attempted to access swept namespaces of %s", this);
     }
 
-    private <K, V, N extends ParserNamespace<K, V>> Map<K, V> ensureLocalNamespace(final N type) {
+    private <K, V> Map<K, V> ensureLocalNamespace(final ParserNamespace<K, V> type) {
         @SuppressWarnings("unchecked")
         Map<K, V> ret = (Map<K,V>) accessNamespaces().get(type);
         if (ret == null) {
index 724bbf486fc7c71b1fd36fa2a6d4fd72f5c74276..a2bd8dbc69b062d9bb711018754e639a4064c047 100644 (file)
@@ -321,24 +321,22 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
     //
 
     @Override
-    public final <K, V, T extends K, N extends ParserNamespace<K, V>> V namespaceItem(final @NonNull N type,
-            final T key) {
+    public final <K, V, T extends K> V namespaceItem(final ParserNamespace<K, V> type, final T key) {
         return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key);
     }
 
     @Override
-    public final <K, V, N extends ParserNamespace<K, V>> Map<K, V> namespace(final @NonNull N type) {
+    public final <K, V> Map<K, V> namespace(final ParserNamespace<K, V> type) {
         return getNamespace(type);
     }
 
     @Override
-    public final <K, V, N extends ParserNamespace<K, V>> Map<K, V> localNamespacePortion(final @NonNull N type) {
+    public final <K, V> Map<K, V> localNamespacePortion(final ParserNamespace<K, V> type) {
         return getLocalNamespace(type);
     }
 
     @Override
-    protected <K, V, N extends ParserNamespace<K, V>> void onNamespaceElementAdded(final N type, final K key,
-            final V value) {
+    protected <K, V> void onNamespaceElementAdded(final ParserNamespace<K, V> type, final K key, final V value) {
         // definition().onNamespaceElementAdded(this, type, key, value);
     }
 
index 5fa5c65f5dc2eeced96049c901e4a2bbc958f446..4d639a520023994d4b3d05f656b3f0454af6d5b8 100644 (file)
@@ -13,7 +13,6 @@ import java.util.Collection;
 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;
@@ -156,8 +155,7 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
 
     @Override
     @Deprecated
-    public <K, V, T extends K, U extends V, N extends ParserNamespace<K, V>> void addToNs(final @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();
     }
 
@@ -169,8 +167,8 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
 
     @Override
     @Deprecated
-    public <K, KT extends K, N extends StatementNamespace<K, ?, ?>> void addContext(final @NonNull N namespace,
-            final KT key, final StmtContext<?, ?, ?> stmt) {
+    public <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
+            final StatementNamespace<K, Y, Z> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
         throw new UnsupportedOperationException();
     }
 
index d1ca478b9f7b95b5556052aa83f894b4e5ea73bb..e4f2ff1798178d916d51307b381c2a842d389920 100644 (file)
@@ -121,7 +121,7 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V putToLocalStorage(final N type, final K key, final V value) {
+    public <K, V> V putToLocalStorage(final ParserNamespace<K, V> type, final K key, final V value) {
         if (SourceParserNamespaces.INCLUDED_MODULE.equals(type)) {
             if (includedContexts.isEmpty()) {
                 includedContexts = new ArrayList<>(1);
@@ -133,7 +133,7 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V getFromLocalStorage(final N type, final K key) {
+    public <K, V> V getFromLocalStorage(final ParserNamespace<K, V> type, final K key) {
         return getFromLocalStorage(type, key, new HashSet<>());
     }
 
@@ -141,8 +141,8 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
      * We need to track already checked RootStatementContexts due to possible
      * circular chains of includes between submodules
      */
-    private <K, V, N extends ParserNamespace<K, V>> @Nullable V getFromLocalStorage(final N type,
-            final K key, final HashSet<RootStatementContext<?, ?, ?>> alreadyChecked) {
+    private <K, V> @Nullable V getFromLocalStorage(final ParserNamespace<K, V> type, final K key,
+            final HashSet<RootStatementContext<?, ?, ?>> alreadyChecked) {
         final V potentialLocal = super.getFromLocalStorage(type, key);
         if (potentialLocal != null) {
             return potentialLocal;
@@ -162,7 +162,7 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> Map<K, V> getAllFromLocalStorage(final N type) {
+    public <K, V> Map<K, V> getAllFromLocalStorage(final ParserNamespace<K, V> type) {
         return getAllFromLocalStorage(type, new HashSet<>());
     }
 
@@ -170,7 +170,7 @@ public final class RootStatementContext<A, D extends DeclaredStatement<A>, E ext
      * We need to track already checked RootStatementContexts due to possible
      * circular chains of includes between submodules
      */
-    private <K, V, N extends ParserNamespace<K, V>> @Nullable Map<K, V> getAllFromLocalStorage(final N type,
+    private <K, V> @Nullable Map<K, V> getAllFromLocalStorage(final ParserNamespace<K, V> type,
             final HashSet<RootStatementContext<?, ?, ?>> alreadyChecked) {
         final Map<K, V> potentialLocal = super.getAllFromLocalStorage(type);
         if (potentialLocal != null) {
index 69d4e374e32dc2a6934f81048fefcbc12fa4ba40..58989e4af1ad86933c844a12b8f9f337a393a474 100644 (file)
@@ -12,16 +12,14 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 
-final class SimpleNamespaceContext<K, V, N extends ParserNamespace<K, V>>
-        extends NamespaceBehaviourWithListeners<K, V, N> {
+final class SimpleNamespaceContext<K, V> extends NamespaceBehaviourWithListeners<K, V> {
     // FIXME: Change this to Multimap, once issue with modules is resolved.
     private List<KeyedValueAddedListener<K>> listeners;
 
     private Collection<PredicateValueAddedListener<K, V>> predicateListeners;
 
-    SimpleNamespaceContext(final NamespaceBehaviour<K, V, N> delegate) {
+    SimpleNamespaceContext(final NamespaceBehaviour<K, V> delegate) {
         super(delegate);
     }
 
index 9c7db1f58fb879acfab231e62382a22c441425c0..b302b67cd7bf395473b489962d98a617edd8ba01 100644 (file)
@@ -56,8 +56,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
         FINISHED
     }
 
-    private static final class SupportedStatements extends NamespaceBehaviour<QName, StatementSupport<?, ?, ?>,
-                ParserNamespace<QName, StatementSupport<?, ?, ?>>> {
+    private static final class SupportedStatements extends NamespaceBehaviour<QName, StatementSupport<?, ?, ?>> {
         private final QNameToStatementDefinitionMap statementDefinitions;
 
         SupportedStatements(final QNameToStatementDefinitionMap statementDefinitions) {
@@ -221,7 +220,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V putToLocalStorage(final N type, final K key, final V value) {
+    public <K, V> V putToLocalStorage(final ParserNamespace<K, V> type, final K key, final V value) {
         // RootStatementContext takes care of IncludedModuleContext and the rest...
         final V ret = getRoot().putToLocalStorage(type, key, value);
         // FIXME: what about duplicates?
@@ -230,8 +229,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V putToLocalStorageIfAbsent(final N type, final K key,
-           final V value) {
+    public <K, V> V putToLocalStorageIfAbsent(final ParserNamespace<K, V> type, final K key, final V value) {
         // RootStatementContext takes care of IncludedModuleContext and the rest...
         final V ret = getRoot().putToLocalStorageIfAbsent(type, key, value);
         if (ret == null) {
@@ -246,7 +244,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> V getFromLocalStorage(final N type, final K key) {
+    public <K, V> V getFromLocalStorage(final ParserNamespace<K, V> type, final K key) {
         final V potentialLocal = getRoot().getFromLocalStorage(type, key);
         if (potentialLocal != null) {
             return potentialLocal;
@@ -262,7 +260,7 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
     }
 
     @Override
-    public <K, V, N extends ParserNamespace<K, V>> Map<K, V> getAllFromLocalStorage(final N type) {
+    public <K, V> Map<K, V> getAllFromLocalStorage(final ParserNamespace<K, V> type) {
         final Map<K, V> potentialLocal = getRoot().getAllFromLocalStorage(type);
         if (potentialLocal != null) {
             return potentialLocal;
@@ -280,9 +278,9 @@ final class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeha
 
     @Override
     @SuppressWarnings("unchecked")
-    public <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviour<K, V, N> getNamespaceBehaviour(final N type) {
+    public <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(final ParserNamespace<K, V> type) {
         if (StatementSupport.NAMESPACE.equals(type)) {
-            return (NamespaceBehaviour<K, V, N>) statementSupports;
+            return (NamespaceBehaviour<K, V>) statementSupports;
         }
         return globalContext.getNamespaceBehaviour(type);
     }
index 0713af839db35df72e22e03da7333a22cfb01dc6..fd91fe632d7400e798395edd5b67c9eb774fbb1b 100644 (file)
@@ -264,8 +264,8 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
     }
 
     @Override
-    public final <K, V, T extends K, U extends V, N extends ParserNamespace<K, V>> void addToNs(final @NonNull N type,
-            final T key, final U value) {
+    public final <K, V, T extends K, U extends V> void addToNs(final ParserNamespace<K, V> type, final T key,
+            final U value) {
         addToNamespace(type, key, value);
     }
 
@@ -611,7 +611,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
         });
     }
 
-    final <K, V, N extends ParserNamespace<K, V>> void onNamespaceItemAddedAction(final N type,
+    final <K, V> void onNamespaceItemAddedAction(final ParserNamespace<K, V> type,
             final ModelProcessingPhase phase, final NamespaceKeyCriterion<K> criterion,
             final OnNamespaceItemAdded listener) {
         final Optional<Entry<K, V>> existing = getFromNamespace(type, criterion);
@@ -622,7 +622,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
             return;
         }
 
-        final NamespaceBehaviourWithListeners<K, V, N> behaviour = getBehaviour(type);
+        final NamespaceBehaviourWithListeners<K, V> behaviour = getBehaviour(type);
         behaviour.addListener(new PredicateValueAddedListener<K, V>(this) {
             @Override
             boolean onValueAdded(final K key, final V value) {
@@ -637,8 +637,8 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
         });
     }
 
-    final <K, V, N extends ParserNamespace<K, V>> void selectMatch(final N type,
-            final NamespaceKeyCriterion<K> criterion, final OnNamespaceItemAdded listener) {
+    final <K, V> void selectMatch(final ParserNamespace<K, V> type, final NamespaceKeyCriterion<K> criterion,
+            final OnNamespaceItemAdded listener) {
         final Optional<Entry<K, V>> optMatch = getFromNamespace(type, criterion);
         checkState(optMatch.isPresent(), "Failed to find a match for criterion %s in namespace %s node %s", criterion,
             type, this);
@@ -646,7 +646,7 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
         listener.namespaceItemAdded(StatementContextBase.this, type, match.getKey(), match.getValue());
     }
 
-    final <K, V, N extends ParserNamespace<K, V>> void waitForPhase(final Object value, final N type,
+    final <K, V> void waitForPhase(final Object value, final ParserNamespace<K, V> type,
             final ModelProcessingPhase phase, final NamespaceKeyCriterion<K> criterion,
             final OnNamespaceItemAdded listener) {
         ((StatementContextBase<?, ? ,?>) value).addPhaseCompletedListener(phase,
@@ -656,13 +656,12 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
             });
     }
 
-    private <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviourWithListeners<K, V, N> getBehaviour(
-            final N type) {
-        final NamespaceBehaviour<K, V, N> behaviour = getBehaviourRegistry().getNamespaceBehaviour(type);
+    private <K, V> NamespaceBehaviourWithListeners<K, V> getBehaviour(final ParserNamespace<K, V> type) {
+        final NamespaceBehaviour<K, V> behaviour = getBehaviourRegistry().getNamespaceBehaviour(type);
         checkArgument(behaviour instanceof NamespaceBehaviourWithListeners, "Namespace %s does not support listeners",
             type);
 
-        return (NamespaceBehaviourWithListeners<K, V, N>) behaviour;
+        return (NamespaceBehaviourWithListeners<K, V>) behaviour;
     }
 
     private static <T> Multimap<ModelProcessingPhase, T> newMultimap() {
@@ -719,8 +718,8 @@ abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends
     }
 
     @Override
-    public final <K, KT extends K, N extends StatementNamespace<K, ?, ?>> void addContext(final @NonNull N namespace,
-            final KT key, final StmtContext<?, ?, ?> stmt) {
+    public final <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
+            final StatementNamespace<K, Y, Z> namespace, final KT key, final StmtContext<?, Y, Z> stmt) {
         addContextToNamespace(namespace, key, stmt);
     }
 
index f3badc71558c0d0fa394cfc1a9378221c4acc034..e5f15bfe57bcc5c6b9918e48237ea3396c04bf1e 100644 (file)
@@ -10,15 +10,12 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
 import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedNamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
-
-final class VirtualNamespaceContext<K, V, N extends ParserNamespace<K, V>, D>
-        extends NamespaceBehaviourWithListeners<K, V, N> {
 
+final class VirtualNamespaceContext<K, V, D> extends NamespaceBehaviourWithListeners<K, V> {
     private final Multimap<D, KeyedValueAddedListener<K>> listeners = HashMultimap.create();
-    private final DerivedNamespaceBehaviour<K, V, D, N, ?> derivedDelegate;
+    private final DerivedNamespaceBehaviour<K, V, D, ?> derivedDelegate;
 
-    VirtualNamespaceContext(final DerivedNamespaceBehaviour<K, V, D, N, ?> delegate) {
+    VirtualNamespaceContext(final DerivedNamespaceBehaviour<K, V, D, ?> delegate) {
         super(delegate);
         this.derivedDelegate = delegate;
     }
index 269d47eb3d1e00dc503998a2846f36bec8b3799e..9f48a3ebf99689db34d699737d4f0f58a9b88218 100644 (file)
@@ -21,8 +21,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 public final class ModuleQNameToPrefix {
     public static final @NonNull ParserNamespace<QNameModule, String> INSTANCE =
         new ParserNamespace<>("module-qname-to-prefix");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR =
-        NamespaceBehaviour.rootStatementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.rootStatementLocal(INSTANCE);
 
     private ModuleQNameToPrefix() {
         // Hidden on purpose
index ca0c27d8a24e068f946b2938f01da3a8344fc2d7..1884ce3577fe46a3c3c3d7ca0ff74d6e805bc7ca 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 public final class YangNamespaceContextNamespace {
     public static final @NonNull ParserNamespace<StmtContext<?, ?, ?>, YangNamespaceContext> INSTANCE =
         new ParserNamespace<>("yangNamespaceContext");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.global(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.global(INSTANCE);
 
     private YangNamespaceContextNamespace() {
         // Hidden on purpose
index beb1f176d4a1aa124005ebf62228eb8bbc924d78..7edbb5f7234357f2f4ceeaaf19465f59e4699245 100644 (file)
@@ -65,7 +65,7 @@ public class CustomCrossSourceStatementReactorBuilder implements Mutable {
     }
 
     public @NonNull CustomCrossSourceStatementReactorBuilder addNamespaceSupport(final ModelProcessingPhase phase,
-            final NamespaceBehaviour<?, ?, ?> namespaceSupport) {
+            final NamespaceBehaviour<?, ?> namespaceSupport) {
         getBuilder(phase).addSupport(namespaceSupport);
         return this;
     }
@@ -85,9 +85,9 @@ public class CustomCrossSourceStatementReactorBuilder implements Mutable {
     }
 
     public @NonNull CustomCrossSourceStatementReactorBuilder addAllNamespaceSupports(final ModelProcessingPhase phase,
-            final Collection<NamespaceBehaviour<?, ?, ?>> namespaceSupports) {
+            final Collection<NamespaceBehaviour<?, ?>> namespaceSupports) {
         final StatementSupportBundle.Builder stmtBundleBuilder = reactorSupportBundles.get(phase);
-        for (final NamespaceBehaviour<?, ?, ?> namespaceSupport : namespaceSupports) {
+        for (final NamespaceBehaviour<?, ?> namespaceSupport : namespaceSupports) {
             stmtBundleBuilder.addSupport(namespaceSupport);
         }
         return this;
index 165d49497a1f7982a4d03237b9226454f5c04910..960379122293d8b467a86cd8aa741669831d81b9 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 public final class AugmentImplicitHandlingNamespace {
     public static final @NonNull ParserNamespace<Empty, Mutable<?, ?, ?>> INSTANCE =
         new ParserNamespace<>("augment-implicit-handling");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private AugmentImplicitHandlingNamespace() {
         // Hidden on purpose
index 4c9061cc2f5f9995050341ee5e479340a48aebcf..a63c291f966c2266b57cc8d590a281a99886ee5a 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 public final class ImportedVersionNamespace {
     public static final @NonNull ParserNamespace<Empty, SourceIdentifier> INSTANCE =
         new ParserNamespace<>("imported-version");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private ImportedVersionNamespace() {
         // Hidden on purpose
index 1845521b81ffe078f331790ead4a2dde11fe747b..224cdfd9420bd52067e8d78a1340a42ffaa7cd6c 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReferenc
 public final class ConfigListWarningNamespace {
     public static final @NonNull ParserNamespace<StatementSourceReference, Boolean> INSTANCE =
         new ParserNamespace<>("configListWarning");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.global(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.global(INSTANCE);
 
     private ConfigListWarningNamespace() {
         // Hidden on purpose
index 01832062bc70f428c6325cefaf52b6b5f4bdd4eb..47cc630f35b5cf33173c79440104167af075cd4f 100644 (file)
@@ -153,6 +153,7 @@ public final class UniqueStatementSupport
                     // ... require that each schema node identifier resolves against the schema tree
                     Maps.uniqueIndex(unique.getArgument(),
                         desc -> action.requiresCtxPath(list,
+                            // FIXME: why do we need this cast?
                             (SchemaTreeNamespace) SchemaTreeNamespace.instance(), desc.getNodeIdentifiers(),
                             ModelProcessingPhase.EFFECTIVE_MODEL))));
             }
index cd77b0b93ea32cce9fe8c7e49aee40122bfa5003..113480a4e5a88a4f02b8b0ee70796b8efb205b2a 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 @Beta
 public final class QNameModuleNamespace {
     public static final @NonNull ParserNamespace<Empty, QNameModule> INSTANCE = new ParserNamespace<>("QNameModule");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private QNameModuleNamespace() {
         // Hidden on purpose
index 9b1ebf677df6c907066b24f675bcbf2df10c8262..43719f2a71e682f1ff7836f9a0ca8544501b6145 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 public final class RefineTargetNamespace {
     public static final @NonNull ParserNamespace<Empty, StmtContext<?, ?, ?>> INSTANCE =
         new ParserNamespace<>("refineTarget");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private RefineTargetNamespace() {
         // Hidden on purpose
index 6fdf016dc6b4e1b914280bcbe1b5628475123d7a..845f6fbb8a7b198df74420efb0f364401be665b4 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 @Beta
 public final class BaseTypeNamespace {
     public static final @NonNull ParserNamespace<Empty, Object> INSTANCE = new ParserNamespace<>("baseType");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private BaseTypeNamespace() {
         // Hidden on purpose
index 20f5b165a407d51e6faf2c3dab1de9bf819f85ec..3bf14d1e1c4f429517b9cfbc0103b7aed9ef2468 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 public final class SourceGroupingNamespace {
     public static final @NonNull ParserNamespace<Empty, StmtContext<?, ?, ?>> INSTANCE =
         new ParserNamespace<>("sourceGrouping");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private SourceGroupingNamespace() {
         // Hidden on purpose
index ab130edd8d932017f470e42b525ccc8fdf3ec490..221fda9c0260a9110959eeee7c71936c80b8afe4 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
  */
 public final class ThirdPartyNamespace {
     public static final @NonNull ParserNamespace<Empty, String> INSTANCE = new ParserNamespace<>("third-party");
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.statementLocal(INSTANCE);
 
     private ThirdPartyNamespace() {
         // Hidden on purpose
index b3f451b2d5b580c94f324e8a73d7462b88d2276a..520a145365c83f282d01b5a87ecc28a001fd74bd 100644 (file)
@@ -14,31 +14,28 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
  * {@link NamespaceBehaviour}s corresponding to {@link ParserNamespaces}.
  */
 public final class NamespaceBehaviours {
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> EXTENSION =
+    public static final @NonNull NamespaceBehaviour<?, ?> EXTENSION =
         NamespaceBehaviour.global(ParserNamespaces.EXTENSION);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> FEATURE =
-        NamespaceBehaviour.global(ParserNamespaces.FEATURE);
+    public static final @NonNull NamespaceBehaviour<?, ?> FEATURE = NamespaceBehaviour.global(ParserNamespaces.FEATURE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> GROUPING =
+    public static final @NonNull NamespaceBehaviour<?, ?> GROUPING =
         NamespaceBehaviour.treeScoped(ParserNamespaces.GROUPING);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> IDENTITY =
+    public static final @NonNull NamespaceBehaviour<?, ?> IDENTITY =
         NamespaceBehaviour.global(ParserNamespaces.IDENTITY);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULE =
-        NamespaceBehaviour.global(ParserNamespaces.MODULE);
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULE = NamespaceBehaviour.global(ParserNamespaces.MODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> SUBMODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> SUBMODULE =
         NamespaceBehaviour.global(ParserNamespaces.SUBMODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> TYPE =
-        NamespaceBehaviour.treeScoped(ParserNamespaces.TYPE);
+    public static final @NonNull NamespaceBehaviour<?, ?> TYPE = NamespaceBehaviour.treeScoped(ParserNamespaces.TYPE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> NAMESPACE_TO_MODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> NAMESPACE_TO_MODULE =
         NamespaceBehaviour.global(ParserNamespaces.NAMESPACE_TO_MODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> PRELINKAGE_MODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> PRELINKAGE_MODULE =
         NamespaceBehaviour.global(ParserNamespaces.PRELINKAGE_MODULE);
 
     private NamespaceBehaviours() {
index 0839c0eebeb4d274034944761dec20ab51a2fecb..d769fefdfab237a4ce261b69735f2fb3c15eea6d 100644 (file)
@@ -24,8 +24,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
  * {@link NamespaceBehaviour} handling {@link SchemaTreeNamespace}.
  */
 public final class SchemaTreeNamespaceBehaviour<D extends DeclaredStatement<QName>,
-            E extends SchemaTreeEffectiveStatement<D>>
-        extends NamespaceBehaviour<QName, StmtContext<?, D, E>, SchemaTreeNamespace<D, E>> {
+            E extends SchemaTreeEffectiveStatement<D>> extends NamespaceBehaviour<QName, StmtContext<?, D, E>> {
     public static final @NonNull SchemaTreeNamespaceBehaviour<?, ?> INSTANCE = new SchemaTreeNamespaceBehaviour<>();
 
     private SchemaTreeNamespaceBehaviour() {
index a793f01da407c3f82ba1b861b60d37035f097793..edffd30a0dbcbde41de2a3173f9007e9f94b1699 100644 (file)
@@ -18,16 +18,15 @@ import org.eclipse.jdt.annotation.NonNull;
  *
  * @param <K> Key type
  * @param <V> Value type
- * @param <N> Namespace type
  * @param <L> Original key type
  * @param <O> Original namespace type
  */
-public abstract class DerivedNamespaceBehaviour<K, V, L, N extends ParserNamespace<K, V>,
-       O extends ParserNamespace<L, ?>> extends NamespaceBehaviour<K, V, N> {
+public abstract class DerivedNamespaceBehaviour<K, V, L, O extends ParserNamespace<L, ?>>
+        extends NamespaceBehaviour<K, V> {
 
     private final @NonNull O derivedFrom;
 
-    protected DerivedNamespaceBehaviour(final N identifier, final O derivedFrom) {
+    protected DerivedNamespaceBehaviour(final ParserNamespace<K, V> identifier, final O derivedFrom) {
         super(identifier);
         this.derivedFrom = requireNonNull(derivedFrom);
     }
index 206f5e018ca99c865198bcc4e3812bfda455f2eb..a9a440e824b9aa6f7a667686875ec89a8717b4cb 100644 (file)
@@ -155,8 +155,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, D extends DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>>
-        @NonNull Prerequisite<D> requiresDeclared(StmtContext<?, ?, ?> context, N namespace, K key);
+    <K, D extends DeclaredStatement<?>> @NonNull Prerequisite<D> requiresDeclared(StmtContext<?, ?, ?> context,
+        StatementNamespace<K, ? extends D, ?> namespace, K key);
 
     /**
      * Action requires that the specified context completes specified phase before {@link #apply(InferenceAction)}
@@ -169,16 +169,15 @@ public interface ModelActionBuilder {
     <A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> @NonNull Prerequisite<StmtContext<A, D, E>>
         requiresCtx(StmtContext<A, D, E> context, ModelProcessingPhase phase);
 
-    <K, N extends StatementNamespace<K, ?, ?>> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(
-        StmtContext<?, ?, ?> context, @NonNull N namespace, K key, ModelProcessingPhase phase);
+    <K> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(StmtContext<?, ?, ?> context,
+        @NonNull StatementNamespace<K, ?, ?> namespace, K key, ModelProcessingPhase phase);
 
-    <K, N extends StatementNamespace<K, ?, ?>> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(
-            StmtContext<?, ?, ?> context, @NonNull N namespace, NamespaceKeyCriterion<K> criterion,
-            ModelProcessingPhase phase);
+    <K> @NonNull Prerequisite<StmtContext<?, ?, ?>> requiresCtx(StmtContext<?, ?, ?> context,
+        @NonNull StatementNamespace<K, ?, ?> namespace, NamespaceKeyCriterion<K> criterion, ModelProcessingPhase phase);
 
-    <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-        @NonNull Prerequisite<StmtContext<?, ?, E>> requiresCtxPath(StmtContext<?, ?, ?> context, N namespace,
-            Iterable<K> keys, ModelProcessingPhase phase);
+    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<StmtContext<?, ?, E>> requiresCtxPath(
+        StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, Iterable<K> keys,
+            ModelProcessingPhase phase);
 
     /**
      * Action mutates the effective model of specified statement. This is a shorthand for
@@ -191,12 +190,11 @@ public interface ModelActionBuilder {
         return mutatesCtx(context, EFFECTIVE_MODEL);
     }
 
-    <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-        @NonNull Prerequisite<Mutable<?, ?, E>> mutatesEffectiveCtx(StmtContext<?, ?, ?> context, N namespace, K key);
+    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<Mutable<?, ?, E>> mutatesEffectiveCtx(
+        StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, K key);
 
-    <K, E extends EffectiveStatement<?, ?>, N extends ParserNamespace<K, ? extends StmtContext<?, ?, ?>>>
-        @NonNull Prerequisite<Mutable<?, ?, E>> mutatesEffectiveCtxPath(StmtContext<?, ?, ?> context,
-                N namespace, Iterable<K> keys);
+    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<Mutable<?, ?, E>> mutatesEffectiveCtxPath(
+        StmtContext<?, ?, ?> context, ParserNamespace<K, ? extends StmtContext<?, ?, ?>> namespace, Iterable<K> keys);
 
     /**
      * Action mutates the specified statement in the specified phase. Target statement cannot complete specified
@@ -224,9 +222,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, D extends DeclaredStatement<?>, N extends StatementNamespace<K, ? extends D, ?>>
-        @NonNull Prerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(StmtContext<?, ?, ?> context,
-                N namespace, K key);
+    <K, D extends DeclaredStatement<?>> @NonNull Prerequisite<StmtContext<?, D, ?>> requiresDeclaredCtx(
+        StmtContext<?, ?, ?> context, StatementNamespace<K, ? extends D, ?> namespace, K key);
 
     /**
      * Create a requirement on specified statement to become effective.
@@ -243,8 +240,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, E extends EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>>
-        @NonNull Prerequisite<E> requiresEffective(StmtContext<?, ?, ?> context, N namespace, K key);
+    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<E> requiresEffective(StmtContext<?, ?, ?> context,
+        StatementNamespace<K, ?, ? extends E> namespace, K key);
 
     /**
      * Create a requirement on specified statement context to become effective.
@@ -252,9 +249,8 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <K, E extends EffectiveStatement<?, ?>, N extends StatementNamespace<K, ?, ? extends E>>
-        @NonNull Prerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(StmtContext<?, ?, ?> context, N namespace,
-            K key);
+    <K, E extends EffectiveStatement<?, ?>> @NonNull Prerequisite<StmtContext<?, ?, E>> requiresEffectiveCtx(
+        StmtContext<?, ?, ?> context, StatementNamespace<K, ?, ? extends E> namespace, K key);
 
     /**
      * Mark the fact that this action is mutating a namespace.
@@ -262,5 +258,5 @@ public interface ModelActionBuilder {
      * @deprecated Undocumented method. Use at your own risk.
      */
     @Deprecated
-    <N extends ParserNamespace<?, ?>> @NonNull Prerequisite<Mutable<?,?,?>> mutatesNs(Mutable<?,?, ?> ctx, N namespace);
+    @NonNull Prerequisite<Mutable<?, ?, ?>> mutatesNs(Mutable<?, ?, ?> ctx, ParserNamespace<?, ?> namespace);
 }
index aef36d9250fe9eb2f1742d1ef74e406ec3042a49..f8f4fbbdb7eecfe5a40b0b5c65cac9c9041d6f96 100644 (file)
@@ -35,10 +35,8 @@ import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespaceBehaviour;
  *
  * @param <K> Key type
  * @param <V> Value type
- * @param <N> Namespace Type
  */
-// FIXME: remove the 'N' parameter?
-public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>> extends AbstractSimpleIdentifiable<N> {
+public abstract class NamespaceBehaviour<K, V> extends AbstractSimpleIdentifiable<ParserNamespace<K, V>> {
 
     public enum StorageNodeType {
         /**
@@ -64,14 +62,13 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
         /**
          * Get a namespace behavior.
          *
-         * @param type Namespace type class
+         * @param type Namespace type
          * @param <K> key type
          * @param <V> value type
-         * @param <N> namespace type
          * @return Namespace behaviour
          * @throws NamespaceNotAvailableException when the namespace is not available
          */
-        <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviour<K, V, N> getNamespaceBehaviour(N type);
+        <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(ParserNamespace<K, V> type);
     }
 
     public interface NamespaceStorageNode {
@@ -84,9 +81,9 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
 
         @Nullable NamespaceStorageNode getParentNamespaceStorage();
 
-        <K, V, N extends ParserNamespace<K, V>> @Nullable V getFromLocalStorage(N type, K key);
+        <K, V> @Nullable V getFromLocalStorage(ParserNamespace<K, V> type, K key);
 
-        <K, V, N extends ParserNamespace<K, V>> @Nullable Map<K, V> getAllFromLocalStorage(N type);
+        <K, V> @Nullable Map<K, V> getAllFromLocalStorage(ParserNamespace<K, V> type);
 
         /**
          * Populate specified namespace with a key/value pair, overwriting previous contents. Similar to
@@ -97,7 +94,7 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
          * @param value Value
          * @return Previously-stored value, or null if the key was not present
          */
-        <K, V, N extends ParserNamespace<K, V>> @Nullable V putToLocalStorage(N type, K key, V value);
+        <K, V> @Nullable V putToLocalStorage(ParserNamespace<K, V> type, K key, V value);
 
         /**
          * Populate specified namespace with a key/value pair unless the key is already associated with a value. Similar
@@ -108,7 +105,7 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
          * @param value Value
          * @return Preexisting value or null if there was no previous mapping
          */
-        <K, V, N extends ParserNamespace<K, V>> @Nullable V putToLocalStorageIfAbsent(N type, K key, V value);
+        <K, V> @Nullable V putToLocalStorageIfAbsent(ParserNamespace<K, V> type, K key, V value);
     }
 
     /**
@@ -141,7 +138,7 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
             @Nullable StmtContext<QName, D, E> requestSchemaTreeChild(QName qname);
     }
 
-    protected NamespaceBehaviour(final N identifier) {
+    protected NamespaceBehaviour(final ParserNamespace<K, V> identifier) {
         super(identifier);
     }
 
@@ -152,11 +149,9 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
      * @param identifier Namespace identifier.
      * @param <K> type parameter
      * @param <V> type parameter
-     * @param <N> type parameter
      * @return global namespace behaviour for supplied namespace type.
      */
-    public static <K, V, N extends ParserNamespace<K, V>> @NonNull NamespaceBehaviour<K, V, N> global(
-            final N identifier) {
+    public static <K, V> @NonNull NamespaceBehaviour<K, V> global(final ParserNamespace<K, V> identifier) {
         return new StorageSpecific<>(identifier, StorageNodeType.GLOBAL);
     }
 
@@ -168,16 +163,13 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
      * @param identifier Namespace identifier.
      * @param <K> type parameter
      * @param <V> type parameter
-     * @param <N> type parameter
      * @return source-local namespace behaviour for supplied namespace type.
      */
-    public static <K, V, N extends ParserNamespace<K, V>> @NonNull NamespaceBehaviour<K, V, N> sourceLocal(
-            final N identifier) {
+    public static <K, V> @NonNull NamespaceBehaviour<K, V> sourceLocal(final ParserNamespace<K, V> identifier) {
         return new StorageSpecific<>(identifier, StorageNodeType.SOURCE_LOCAL_SPECIAL);
     }
 
-    public static <K, V, N extends ParserNamespace<K, V>> @NonNull NamespaceBehaviour<K, V, N> statementLocal(
-           final N identifier) {
+    public static <K, V> @NonNull NamespaceBehaviour<K, V> statementLocal(final ParserNamespace<K, V> identifier) {
         return new StatementLocal<>(identifier);
     }
 
@@ -189,11 +181,9 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
      * @param identifier Namespace identifier.
      * @param <K> type parameter
      * @param <V> type parameter
-     * @param <N> type parameter
      * @return root-statement-local namespace behaviour for supplied namespace type.
      */
-    public static <K, V, N extends ParserNamespace<K, V>> @NonNull NamespaceBehaviour<K, V, N> rootStatementLocal(
-            final N identifier) {
+    public static <K, V> @NonNull NamespaceBehaviour<K, V> rootStatementLocal(final ParserNamespace<K, V> identifier) {
         return new StorageSpecific<>(identifier, StorageNodeType.ROOT_STATEMENT_LOCAL);
     }
 
@@ -205,11 +195,9 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
      *            Namespace identifier.
      * @param <K> type parameter
      * @param <V> type parameter
-     * @param <N> type parameter
      * @return tree-scoped namespace behaviour for supplied namespace type.
      */
-    public static <K, V, N extends ParserNamespace<K, V>> @NonNull NamespaceBehaviour<K, V, N> treeScoped(
-            final N identifier) {
+    public static <K, V> @NonNull NamespaceBehaviour<K, V> treeScoped(final ParserNamespace<K, V> identifier) {
         return new TreeScoped<>(identifier);
     }
 
@@ -286,8 +274,8 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
         storage.putToLocalStorage(getIdentifier(), key, value);
     }
 
-    abstract static class AbstractSpecific<K, V, N extends ParserNamespace<K, V>> extends NamespaceBehaviour<K, V, N> {
-        AbstractSpecific(final N identifier) {
+    abstract static class AbstractSpecific<K, V> extends NamespaceBehaviour<K, V> {
+        AbstractSpecific(final ParserNamespace<K, V> identifier) {
             super(identifier);
         }
 
@@ -309,8 +297,8 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
         abstract NamespaceStorageNode findStorageNode(NamespaceStorageNode storage);
     }
 
-    static final class StatementLocal<K, V, N extends ParserNamespace<K, V>> extends AbstractSpecific<K, V, N> {
-        StatementLocal(final N identifier) {
+    static final class StatementLocal<K, V> extends AbstractSpecific<K, V> {
+        StatementLocal(final ParserNamespace<K, V> identifier) {
             super(identifier);
         }
 
@@ -320,10 +308,10 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
         }
     }
 
-    static final class StorageSpecific<K, V, N extends ParserNamespace<K, V>> extends AbstractSpecific<K, V, N> {
+    static final class StorageSpecific<K, V> extends AbstractSpecific<K, V> {
         private final StorageNodeType storageType;
 
-        StorageSpecific(final N identifier, final StorageNodeType type) {
+        StorageSpecific(final ParserNamespace<K, V> identifier, final StorageNodeType type) {
             super(identifier);
             storageType = requireNonNull(type);
         }
@@ -339,8 +327,8 @@ public abstract class NamespaceBehaviour<K, V, N extends ParserNamespace<K, V>>
         }
     }
 
-    static final class TreeScoped<K, V, N extends ParserNamespace<K, V>> extends NamespaceBehaviour<K, V, N> {
-        TreeScoped(final N identifier) {
+    static final class TreeScoped<K, V> extends NamespaceBehaviour<K, V> {
+        TreeScoped(final ParserNamespace<K, V> identifier) {
             super(identifier);
         }
 
index ac0806e0a0f58a8c7653fa2bebde2769e6de44b3..7158e1e2daf8c3f35e36c325abb0a21b8a09a62a 100644 (file)
@@ -23,11 +23,10 @@ public interface NamespaceStmtCtx extends CommonStmtCtx {
      *
      * @param <K> namespace key type
      * @param <V> namespace value type
-     * @param <N> namespace type
      * @param nsType namespace type class
      * @return Namespace contents, if available
      */
-    <K, V, N extends ParserNamespace<K, V>> @Nullable Map<K, V> namespace(@NonNull N nsType);
+    <K, V> @Nullable Map<K, V> namespace(@NonNull ParserNamespace<K, V> nsType);
 
     /**
      * Return a value associated with specified key within a namespace.
@@ -36,12 +35,11 @@ public interface NamespaceStmtCtx extends CommonStmtCtx {
      * @param key Key
      * @param <K> namespace key type
      * @param <V> namespace value type
-     * @param <N> namespace type
      * @param <T> key type
      * @return Value, or null if there is no element
      * @throws NamespaceNotAvailableException when the namespace is not available.
      */
-    <K, V, T extends K, N extends ParserNamespace<K, V>> @Nullable V namespaceItem(@NonNull N nsType, T key);
+    <K, V, T extends K> @Nullable V namespaceItem(@NonNull ParserNamespace<K, V> nsType, T key);
 
     /**
      * Return the portion of specified namespace stored in this node. Depending on namespace behaviour this may or may
@@ -53,23 +51,21 @@ public interface NamespaceStmtCtx extends CommonStmtCtx {
      *
      * @param <K> namespace key type
      * @param <V> namespace value type
-     * @param <N> namespace type
      * @param nsType namespace type class
      * @return Namespace portion stored in this node, if available
      */
-    <K, V, N extends ParserNamespace<K, V>> @Nullable Map<K, V> localNamespacePortion(@NonNull N nsType);
+    <K, V> @Nullable Map<K, V> localNamespacePortion(@NonNull ParserNamespace<K, V> nsType);
 
     /**
      * Return the selected namespace.
      *
      * @param <K> namespace key type
      * @param <V> namespace value type
-     * @param <N> namespace type
      * @param nsType namespace type class
      * @return Namespace contents, if available
      */
     // TODO: migrate users away
-    default <K, V, N extends ParserNamespace<K, V>> Map<K, V> getAllFromNamespace(final @NonNull N nsType) {
+    default <K, V> Map<K, V> getAllFromNamespace(final @NonNull ParserNamespace<K, V> nsType) {
         return namespace(nsType);
     }
 
@@ -80,14 +76,12 @@ public interface NamespaceStmtCtx extends CommonStmtCtx {
      * @param key Key
      * @param <K> namespace key type
      * @param <V> namespace value type
-     * @param <N> namespace type
      * @param <T> key type
      * @return Value, or null if there is no element
      * @throws NamespaceNotAvailableException when the namespace is not available.
      */
     // TODO: migrate users away
-    default <K, V, T extends K, N extends ParserNamespace<K, V>> @Nullable V getFromNamespace(
-            final @NonNull N type, final T key) {
+    default <K, V, T extends K> @Nullable V getFromNamespace(final @NonNull ParserNamespace<K, V> type, final T key) {
         return namespaceItem(type, key);
     }
 }
index 71a100033091702155824755c03a292ba7a9eeed..af53671186ba900e644ecad13c472d13d42576b4 100644 (file)
@@ -39,7 +39,7 @@ public final class StatementDefinitions {
     public static final @NonNull ParserNamespace<QName, StatementSupport<?, ?, ?>> NAMESPACE =
         new ParserNamespace<>("statementDefinitions");
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.global(NAMESPACE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.global(NAMESPACE);
 
     private StatementDefinitions() {
         // Hidden on purpose
index 5c340842e80f0fe5352f47ff1fc3523d105f1765..d1abe31f84306c57185b0a63f39c4ebad26f1e41 100644 (file)
@@ -35,13 +35,13 @@ public final class StatementSupportBundle implements Immutable, NamespaceBehavio
     private final StatementSupportBundle parent;
     private final ImmutableMap<QName, StatementSupport<?, ?, ?>> commonDefinitions;
     private final ImmutableTable<YangVersion, QName, StatementSupport<?, ?, ?>> versionSpecificDefinitions;
-    private final ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?, ?>> namespaceDefinitions;
+    private final ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?>> namespaceDefinitions;
     private final ImmutableSet<YangVersion> supportedVersions;
 
     private StatementSupportBundle(final StatementSupportBundle parent,
             final ImmutableSet<YangVersion> supportedVersions,
             final ImmutableMap<QName, StatementSupport<?, ?, ?>> commonStatements,
-            final ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?, ?>> namespaces,
+            final ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?>> namespaces,
             final ImmutableTable<YangVersion, QName, StatementSupport<?, ?, ?>> versionSpecificStatements) {
         this.parent = parent;
         this.supportedVersions = supportedVersions;
@@ -83,7 +83,7 @@ public final class StatementSupportBundle implements Immutable, NamespaceBehavio
         return versionSpecificDefinitions;
     }
 
-    public ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?, ?>> getNamespaceDefinitions() {
+    public ImmutableMap<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?>> getNamespaceDefinitions() {
         return namespaceDefinitions;
     }
 
@@ -101,14 +101,13 @@ public final class StatementSupportBundle implements Immutable, NamespaceBehavio
 
     @Override
     @SuppressWarnings("unchecked")
-    public <K, V, N extends ParserNamespace<K, V>> NamespaceBehaviour<K, V, N> getNamespaceBehaviour(
-            final N namespace) {
-        final NamespaceBehaviour<?, ?, ?> potential = namespaceDefinitions.get(namespace);
+    public <K, V> NamespaceBehaviour<K, V> getNamespaceBehaviour(final ParserNamespace<K, V> namespace) {
+        final NamespaceBehaviour<?, ?> potential = namespaceDefinitions.get(namespace);
         if (potential != null) {
             checkState(namespace.equals(potential.getIdentifier()));
 
             // Safe cast, previous checkState checks equivalence of key from which type argument are derived
-            return (NamespaceBehaviour<K, V, N>) potential;
+            return (NamespaceBehaviour<K, V>) potential;
         }
         if (parent != null) {
             return parent.getNamespaceBehaviour(namespace);
@@ -165,7 +164,7 @@ public final class StatementSupportBundle implements Immutable, NamespaceBehavio
         private final Map<QName, StatementSupport<?, ?, ?>> commonStatements = new HashMap<>();
         private final Table<YangVersion, QName, StatementSupport<?, ?, ?>> versionSpecificStatements =
             HashBasedTable.create();
-        private final Map<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?, ?>> namespaces = new HashMap<>();
+        private final Map<ParserNamespace<?, ?>, NamespaceBehaviour<?, ?>> namespaces = new HashMap<>();
 
         private final ImmutableSet<YangVersion> supportedVersions;
         private StatementSupportBundle parent;
@@ -185,7 +184,7 @@ public final class StatementSupportBundle implements Immutable, NamespaceBehavio
             return this;
         }
 
-        public @NonNull Builder addSupport(final NamespaceBehaviour<?, ? ,?> namespaceSupport) {
+        public @NonNull Builder addSupport(final NamespaceBehaviour<?, ?> namespaceSupport) {
             final var identifier = namespaceSupport.getIdentifier();
             checkState(!namespaces.containsKey(identifier));
             checkState(!parent.hasNamespaceBehaviour(identifier));
index 803e982c83230d51c3c4ee1a273e8d256e09dbe0..ac26bb1f29b618dcf412496ce1f70641e4b9f706 100644 (file)
@@ -189,12 +189,11 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
          * @param value value
          * @param <K> namespace key type
          * @param <V> namespace value type
-         * @param <N> namespace type
          * @param <T> key type
          * @param <U> value type
          * @throws NamespaceNotAvailableException when the namespace is not available.
          */
-        <K, V, T extends K, U extends V, N extends ParserNamespace<K, V>> void addToNs(@NonNull N type, T key, U value);
+        <K, V, T extends K, U extends V> void addToNs(@NonNull ParserNamespace<K, V> type, T key, U value);
 
         @Override
         RootStmtContext.Mutable<?, ?, ?> getRoot();
@@ -265,8 +264,8 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
          * @param stmt
          *            to be added to namespace map
          */
-        <K, KT extends K, N extends StatementNamespace<K, ?, ?>> void addContext(@NonNull N namespace, KT key,
-                StmtContext<?, ?, ?> stmt);
+        <K, KT extends K, Y extends DeclaredStatement<?>, Z extends EffectiveStatement<?, Y>> void addContext(
+            @NonNull StatementNamespace<K, Y, Z> namespace, KT key, StmtContext<?, Y, Z> stmt);
 
         /**
          * Set version of root statement context.
index aaa5ab11c6acac4ebaa45d1db08562e5aa94c85a..095b02ddb333c29854f5673aa94e5f7b0176dfe6 100644 (file)
@@ -14,52 +14,52 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
  * {@link NamespaceBehaviour}s corresponding to {@link SourceParserNamespaces}.
  */
 public final class SourceNamespaceBehaviours {
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BELONGSTO_PREFIX_TO_MODULECTX =
+    public static final @NonNull NamespaceBehaviour<?, ?> BELONGSTO_PREFIX_TO_MODULECTX =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.BELONGSTO_PREFIX_TO_MODULECTX);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BELONGSTO_PREFIX_TO_MODULE_NAME =
+    public static final @NonNull NamespaceBehaviour<?, ?> BELONGSTO_PREFIX_TO_MODULE_NAME =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.BELONGSTO_PREFIX_TO_MODULE_NAME);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULE_NAME_TO_QNAME =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULE_NAME_TO_QNAME =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.MODULE_NAME_TO_QNAME);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> IMPORTED_MODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> IMPORTED_MODULE =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.IMPORTED_MODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> INCLUDED_MODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> INCLUDED_MODULE =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.INCLUDED_MODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULECTX_TO_QNAME =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULECTX_TO_QNAME =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULECTX_TO_QNAME);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> INCLUDED_SUBMODULE_NAME_TO_MODULECTX =
+    public static final @NonNull NamespaceBehaviour<?, ?> INCLUDED_SUBMODULE_NAME_TO_MODULECTX =
         NamespaceBehaviour.sourceLocal(SourceParserNamespaces.INCLUDED_SUBMODULE_NAME_TO_MODULECTX);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> IMP_PREFIX_TO_NAMESPACE =
+    public static final @NonNull NamespaceBehaviour<?, ?> IMP_PREFIX_TO_NAMESPACE =
         NamespaceBehaviour.rootStatementLocal(SourceParserNamespaces.IMP_PREFIX_TO_NAMESPACE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> IMPORT_PREFIX_TO_MODULECTX =
+    public static final @NonNull NamespaceBehaviour<?, ?> IMPORT_PREFIX_TO_MODULECTX =
         NamespaceBehaviour.rootStatementLocal(SourceParserNamespaces.IMPORT_PREFIX_TO_MODULECTX);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULE_FOR_BELONGSTO =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULE_FOR_BELONGSTO =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULE_FOR_BELONGSTO);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> SUPPORTED_FEATURES =
+    public static final @NonNull NamespaceBehaviour<?, ?> SUPPORTED_FEATURES =
         NamespaceBehaviour.global(SourceParserNamespaces.SUPPORTED_FEATURES);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> PREFIX_TO_MODULE =
+    public static final @NonNull NamespaceBehaviour<?, ?> PREFIX_TO_MODULE =
         NamespaceBehaviour.global(SourceParserNamespaces.PREFIX_TO_MODULE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULES_DEVIATED_BY =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULES_DEVIATED_BY =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULES_DEVIATED_BY);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULE_NAMESPACE_TO_NAME =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULE_NAMESPACE_TO_NAME =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULE_NAMESPACE_TO_NAME);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULE_NAME_TO_NAMESPACE =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULE_NAME_TO_NAMESPACE =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULE_NAME_TO_NAMESPACE);
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> MODULECTX_TO_SOURCE =
+    public static final @NonNull NamespaceBehaviour<?, ?> MODULECTX_TO_SOURCE =
         NamespaceBehaviour.global(SourceParserNamespaces.MODULECTX_TO_SOURCE);
 
     private SourceNamespaceBehaviours() {
index b5c2b81682afc1cc25fbb8a9c8e84cd56fcb506a..0a9778ccdce20828cecb077a7699e974e7a522ac 100644 (file)
@@ -50,7 +50,7 @@ public final class ValidationBundles {
     public static final @NonNull ParserNamespace<ValidationBundleType, Collection<?>> NAMESPACE =
         new ParserNamespace<>("validationBundles");
 
-    public static final @NonNull NamespaceBehaviour<?, ?, ?> BEHAVIOUR = NamespaceBehaviour.global(NAMESPACE);
+    public static final @NonNull NamespaceBehaviour<?, ?> BEHAVIOUR = NamespaceBehaviour.global(NAMESPACE);
 
     private ValidationBundles() {
         // Hidden on purpose