Refactor argument adaptation 40/61240/10
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 7 Aug 2017 01:04:18 +0000 (03:04 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 16 Aug 2017 16:11:49 +0000 (16:11 +0000)
Adapting arguments is really a StatementSupport-level operation, and
should not be part of a specific reactor implementation.

This patch creates the appropriate interfaces required to have
StatementSupport classes a say when arguments are adapted.

Change-Id: Ifa3e25b96d9f451a53a99a30be2573abe7ee744c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
29 files changed:
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java

diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java
new file mode 100644 (file)
index 0000000..6d11258
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * 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.meta;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.QName;
+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;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+
+/**
+ * Class providing necessary support for processing a YANG statements which has a {@link QName} argument. In addition
+ * to functions of {@link AbstractStatementSupport}, it takes care of adapting QNames across modules.
+ *
+ * @param <D>
+ *            Declared Statement representation
+ * @param <E>
+ *            Effective Statement representation
+ */
+@Beta
+public abstract class AbstractQNameStatementSupport<D extends DeclaredStatement<QName>,
+        E extends EffectiveStatement<QName, D>> extends AbstractStatementSupport<QName, D, E> {
+
+    protected AbstractQNameStatementSupport(final StatementDefinition publicDefinition) {
+        super(publicDefinition);
+    }
+
+    @Override
+    public QName adaptArgumentValue(final StmtContext<QName, D, E> ctx, final QNameModule targetModule) {
+        return ctx.getFromNamespace(QNameCacheNamespace.class,
+            QName.create(targetModule, ctx.getStatementArgument().getLocalName()));
+    }
+}
index d20181a021b52913d2fa9ee9616c4d2056fae041..6522bb3e1b1164c34a69b22ae1dfa2769b25ffea 100644 (file)
@@ -20,10 +20,9 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext;
 
 /**
+ * Class providing necessary support for processing a YANG statement.
  *
- * Class providing necessary support for processing YANG statement.
- *
- * This class is intended to be subclassed by developers, which want to
+ * This class is intended to be subclassed by developers, who want to
  * introduce support of statement to parser.
  *
  * @param <A>
index 26625b87e85f871d457f7c0d3031f8d1b8e7c9fa..326f9f6e772ce83effc99a7c8d19704d57437323 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.yangtools.yang.parser.spi.meta;
 import com.google.common.annotations.Beta;
 import java.util.Optional;
 import javax.annotation.Nullable;
+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;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@@ -52,7 +53,6 @@ public interface StatementSupport<A, D extends DeclaredStatement<A>, E extends E
     StatementDefinition getPublicView();
 
     /**
-     *
      * Parses textual representation of argument in object representation.
      *
      * @param ctx
@@ -66,6 +66,20 @@ public interface StatementSupport<A, D extends DeclaredStatement<A>, E extends E
      */
     A parseArgumentValue(StmtContext<?, ?, ?> ctx, String value);
 
+    /**
+     * Adapts the argument value to match a new module.
+     *
+     * @param ctx
+     *            Context, which may be used to access source-specific
+     *            namespaces required for parsing.
+     * @param targetModule
+     *            Target module, may not be null.
+     * @return Adapted argument value. The default implementation returns original value stored in context.
+     */
+    default A adaptArgumentValue(final StmtContext<A, D, E> ctx, final QNameModule targetModule) {
+        return ctx.getStatementArgument();
+    }
+
     /**
      * Invoked when a statement supported by this instance is added to build context. This allows implementations
      * of this interface to start tracking the statement and perform any modifications to the build context hierarchy,
index ddbdfcdad01e48ce2a5400b84391f486b3ec2b74..a009f35d65052de11ae2912fde9cfe0f370fc26a 100644 (file)
@@ -11,8 +11,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.collect.Iterables;
 import java.util.Collection;
 import java.util.Date;
@@ -250,29 +248,6 @@ public final class StmtContextUtils {
                 .isAssignableFrom(stmtCtx.getPublicDefinition().getDeclaredRepresentationClass());
     }
 
-    public static Collection<SchemaNodeIdentifier> replaceModuleQNameForKey(
-            final StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, ?> keyStmtCtx,
-            final QNameModule newQNameModule) {
-
-        final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder();
-        boolean replaced = false;
-        for (final SchemaNodeIdentifier arg : keyStmtCtx.getStatementArgument()) {
-            final QName qname = arg.getLastComponent();
-            if (!newQNameModule.equals(qname)) {
-                final QName newQname = keyStmtCtx.getFromNamespace(QNameCacheNamespace.class,
-                        QName.create(newQNameModule, qname.getLocalName()));
-                builder.add(SchemaNodeIdentifier.create(false, newQname));
-                replaced = true;
-            } else {
-                builder.add(arg);
-            }
-        }
-
-        // This makes sure we reuse the collection when a grouping is
-        // instantiated in the same module
-        return replaced ? builder.build() : keyStmtCtx.getStatementArgument();
-    }
-
     public static boolean checkFeatureSupport(final StmtContext<?, ?, ?> stmtContext,
             final Set<QName> supportedFeatures) {
         boolean isSupported = false;
index 524d6ed6cfacb4464d2404afe9b8d837d34daf1c..4f121b9d6c77872bffcb76328343692826cd7c5f 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Map;
 import java.util.Optional;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
+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;
 import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
@@ -41,7 +42,11 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     public A parseArgumentValue(final StmtContext<A, D, E> context, final String value) {
-        return support.parseArgumentValue(context,value);
+        return support.parseArgumentValue(context, value);
+    }
+
+    public A adaptArgumentValue(final StmtContext<A, D, E> context, final QNameModule targetModule) {
+        return support.adaptArgumentValue(context, targetModule);
     }
 
     public void checkNamespaceAllowed(final Class<? extends IdentifierNamespace<?,?>> namespace) {
index fed83cec5ebc76f3c8f0bd9f4b05c77e0bd2acff..002b9bc50cd32cb4e4391646a003b80f6086fe5e 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
@@ -40,7 +39,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
@@ -129,28 +127,13 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
         return argument;
     }
 
-    @SuppressWarnings("unchecked")
     StatementContextBase<A, D, E> createCopy(final QNameModule newQNameModule,
             final StatementContextBase<?, ?, ?> newParent, final CopyType typeOfCopy) {
         Preconditions.checkState(getCompletedPhase() == ModelProcessingPhase.EFFECTIVE_MODEL,
                 "Attempted to copy statement %s which has completed phase %s", this, getCompletedPhase());
 
-        // FIXME: this should live in StatementSupport or similar
-        final A argumentCopy;
-        if (newQNameModule != null) {
-            if (argument instanceof QName) {
-                argumentCopy = (A) getFromNamespace(QNameCacheNamespace.class,
-                        QName.create(newQNameModule, ((QName) argument).getLocalName()));
-            } else if (StmtContextUtils.producesDeclared(this, KeyStatement.class)) {
-                argumentCopy = (A) StmtContextUtils.replaceModuleQNameForKey(
-                        (StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, ?>) this, newQNameModule);
-            } else {
-                argumentCopy = argument;
-            }
-        } else {
-            argumentCopy = argument;
-        }
-
+        final A argumentCopy = newQNameModule == null ? argument
+                : definition().adaptArgumentValue(this, newQNameModule);
         final SubstatementContext<A, D, E> copy = new SubstatementContext<>(this, newParent, argumentCopy, typeOfCopy);
 
         definition().onStatementAdded(copy);
index c2b9fc1df86cf98f1632f2a1f64bf1c0c876206d..dc1f0779c49d466fcb1fb4e6e1467958087b40aa 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -56,7 +56,7 @@ public class AnyxmlStatementImpl extends AbstractDeclaredStatement<QName> implem
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> {
+            AbstractQNameStatementSupport<AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> {
 
         public Definition() {
             super(YangStmtMapping.ANYXML);
index 7325236ad41e7ad584143da31bfd14a5d68821a5..9f2f8254d8d1d3ece31a70b97da9112aa48704ae 100644 (file)
@@ -14,7 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -34,7 +34,7 @@ public class ArgumentStatementImpl extends AbstractDeclaredStatement<QName>
 
     public static class Definition
             extends
-            AbstractStatementSupport<QName, ArgumentStatement, EffectiveStatement<QName, ArgumentStatement>> {
+            AbstractQNameStatementSupport<ArgumentStatement, EffectiveStatement<QName, ArgumentStatement>> {
 
         public Definition() {
             super(YangStmtMapping.ARGUMENT);
index bb8f9e1c4b099d274637329b893cf2f5fbc0e9d6..b810db4ffc8e51d9704ef074511623dbe7278184 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
 import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
@@ -41,7 +41,7 @@ public class BaseStatementImpl extends AbstractDeclaredStatement<QName> implemen
     }
 
     public static class Definition
-            extends AbstractStatementSupport<QName, BaseStatement, EffectiveStatement<QName, BaseStatement>> {
+            extends AbstractQNameStatementSupport<BaseStatement, EffectiveStatement<QName, BaseStatement>> {
 
         public Definition() {
             super(YangStmtMapping.BASE);
index bc0a44681b62033875159ae1cf73d7ce02dca25d..095a884a79b8c605ce114c92bfe66af3e2b95af4 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -39,7 +39,7 @@ public class BitStatementImpl extends AbstractDeclaredStatement<QName> implement
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, BitStatement, EffectiveStatement<QName, BitStatement>> {
+            AbstractQNameStatementSupport<BitStatement, EffectiveStatement<QName, BitStatement>> {
 
         public Definition() {
             super(YangStmtMapping.BIT);
index f9bf3dae1dd96d46dde3c7a2473041e3d6219306..9defc24f36b55e1c7b9d2613ef6d237e435f1364 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -50,7 +50,8 @@ public class CaseStatementImpl extends AbstractDeclaredStatement<QName> implemen
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<QName,CaseStatement,EffectiveStatement<QName,CaseStatement>> {
+    public static class Definition
+            extends AbstractQNameStatementSupport<CaseStatement, EffectiveStatement<QName, CaseStatement>> {
 
         public Definition() {
             super(YangStmtMapping.CASE);
index 3c1ab3a2d97c5fecf3aad5fdc8eca77c8e2620e2..9e3f6041320fb744d8b321a312fe2768cac7200b 100644 (file)
@@ -25,7 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
@@ -62,7 +62,7 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> {
+            AbstractQNameStatementSupport<ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> {
         private static final StatementSupport<?, ?, ?> IMPLICIT_CASE = new CaseStatementImpl.Definition();
 
         public Definition() {
@@ -80,7 +80,7 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement<QName>
                 final StatementDefinitionContext<?, ?, ?> def, final StatementSourceReference ref, final String argument) {
 
             if (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(def.getPublicView())) {
-                return Optional.of(createImplicitCase((StatementContextBase<?, ?, ?>) stmt, offset, ref, argument));
+                return Optional.of(createImplicitCase(stmt, offset, ref, argument));
             }
             return Optional.empty();
         }
index 50be6fd6c60755e4fabab789cc1a8d480b39e6ec..5d2a3fdca8c428d48f2f3426ce7f4708d99880e7 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -60,7 +60,8 @@ public class ContainerStatementImpl extends AbstractDeclaredStatement<QName> imp
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<QName,ContainerStatement,EffectiveStatement<QName,ContainerStatement>> {
+    public static class Definition
+            extends AbstractQNameStatementSupport<ContainerStatement, EffectiveStatement<QName, ContainerStatement>> {
 
         public Definition() {
             super(YangStmtMapping.CONTAINER);
index ee6cf07705a1540fcbc8e367f133b96147d424d6..1e9e9a0ed85bc218ec1ddb1f618aa574e399497a 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
 import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -38,7 +38,8 @@ public class ExtensionStatementImpl extends AbstractDeclaredStatement<QName> imp
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<QName,ExtensionStatement,EffectiveStatement<QName,ExtensionStatement>> {
+    public static class Definition
+            extends AbstractQNameStatementSupport<ExtensionStatement, EffectiveStatement<QName, ExtensionStatement>> {
         public Definition() {
             super(YangStmtMapping.EXTENSION);
         }
index d44d05b86a706bdda77979ba020e53b76699d393..ee8b956fd7eeab92e626d39d78395bca290ed1df 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -40,8 +40,7 @@ public class FeatureStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition
-            extends
-            AbstractStatementSupport<QName, FeatureStatement, EffectiveStatement<QName, FeatureStatement>> {
+            extends AbstractQNameStatementSupport<FeatureStatement, EffectiveStatement<QName, FeatureStatement>> {
 
         public Definition() {
             super(YangStmtMapping.FEATURE);
index fa0000f70856a33a5c7ededf45685b5ea1400f83..e765ad139253cd3fccb0fb0dd24ae6acf4804ab0 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -53,8 +53,7 @@ public class GroupingStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition
-            extends
-            AbstractStatementSupport<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> {
+            extends AbstractQNameStatementSupport<GroupingStatement, EffectiveStatement<QName, GroupingStatement>> {
 
         public Definition() {
             super(YangStmtMapping.GROUPING);
index 60fd98856a8301394c1fb766686da2cfb69ea630..cec917ffe4cc19272e0cb58dfb05c02cb2df6f4c 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -41,7 +41,8 @@ public class IdentityStatementImpl extends AbstractDeclaredStatement<QName>
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<QName, IdentityStatement, EffectiveStatement<QName, IdentityStatement>> {
+    public static class Definition
+            extends AbstractQNameStatementSupport<IdentityStatement, EffectiveStatement<QName, IdentityStatement>> {
 
         public Definition() {
             super(YangStmtMapping.IDENTITY);
index bb8ca59626a3bf2ae1a0197cdc31c9d656b15091..38df7c08e797285e1aaf856a8f641a508a571a98 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -45,8 +45,7 @@ public class InputStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition
-            extends
-            AbstractStatementSupport<QName, InputStatement, EffectiveStatement<QName, InputStatement>> {
+            extends AbstractQNameStatementSupport<InputStatement, EffectiveStatement<QName, InputStatement>> {
 
         public Definition() {
             super(YangStmtMapping.INPUT);
index 5a82078148fbaca7f9eb0bb3b12954aca1ff976f..6f15bc311ce8201675af7f47f6df0b147ef04700 100644 (file)
@@ -10,12 +10,15 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import java.util.Collection;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -57,6 +60,30 @@ public class KeyStatementImpl extends AbstractDeclaredStatement<Collection<Schem
             return ret;
         }
 
+        @Override
+        public Collection<SchemaNodeIdentifier> adaptArgumentValue(
+                final StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement,
+                    EffectiveStatement<Collection<SchemaNodeIdentifier>, KeyStatement>> ctx,
+                final QNameModule targetModule) {
+            final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder();
+            boolean replaced = false;
+            for (final SchemaNodeIdentifier arg : ctx.getStatementArgument()) {
+                final QName qname = arg.getLastComponent();
+                if (!targetModule.equals(qname)) {
+                    final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class,
+                            QName.create(targetModule, qname.getLocalName()));
+                    builder.add(SchemaNodeIdentifier.create(false, newQname));
+                    replaced = true;
+                } else {
+                    builder.add(arg);
+                }
+            }
+
+            // This makes sure we reuse the collection when a grouping is
+            // instantiated in the same module
+            return replaced ? builder.build() : ctx.getStatementArgument();
+        }
+
         @Override
         public KeyStatement createDeclared(final StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, ?> ctx) {
             return new KeyStatementImpl(ctx);
index 2b29e08a17eab8dc69a0ea001b364bb23895f89d..0212b517203af663b16c33a73f627cd41cfe1829 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -59,8 +59,7 @@ public class LeafListStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition
-            extends
-            AbstractStatementSupport<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> {
+            extends AbstractQNameStatementSupport<LeafListStatement, EffectiveStatement<QName, LeafListStatement>> {
 
         public Definition() {
             super(YangStmtMapping.LEAF_LIST);
index 4c46b3af291f25a053d7e701e8d79947fdb55205..955b7f6a91886fb08056717aa21e0d6c96a98eda 100644 (file)
@@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -53,7 +53,8 @@ public class LeafStatementImpl extends AbstractDeclaredStatement<QName> implemen
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<QName,LeafStatement,EffectiveStatement<QName,LeafStatement>> {
+    public static class Definition
+            extends AbstractQNameStatementSupport<LeafStatement, EffectiveStatement<QName, LeafStatement>> {
 
         public Definition() {
             super(YangStmtMapping.LEAF);
index 1ff33d319ead3a93499059f81eb66aae7ee9d15c..c5ff3029505fbb05067ad0f9de023e3f7f2b58a8 100644 (file)
@@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -72,7 +72,7 @@ public class ListStatementImpl extends AbstractDeclaredStatement<QName>
 
     public static class Definition
             extends
-            AbstractStatementSupport<QName, ListStatement, EffectiveStatement<QName, ListStatement>> {
+            AbstractQNameStatementSupport<ListStatement, EffectiveStatement<QName, ListStatement>> {
 
         public Definition() {
             super(YangStmtMapping.LIST);
index 8037456e4b06e077fd5b4440a25057e881bf45eb..d3563282709f51fc2afc12fa716c5293246b2c17 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -55,7 +55,7 @@ public class NotificationStatementImpl extends AbstractDeclaredStatement<QName>
 
     public static class Definition
             extends
-            AbstractStatementSupport<QName, NotificationStatement, EffectiveStatement<QName, NotificationStatement>> {
+            AbstractQNameStatementSupport<NotificationStatement, EffectiveStatement<QName, NotificationStatement>> {
 
         public Definition() {
             super(YangStmtMapping.NOTIFICATION);
index 534062358fd7b33d88063f5ac1ff70e146423c8f..53e2b2878cde11be8365a18f13061d87b59dbb4d 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -44,7 +44,7 @@ public class OutputStatementImpl extends AbstractDeclaredStatement<QName> implem
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, OutputStatement, EffectiveStatement<QName, OutputStatement>> {
+            AbstractQNameStatementSupport<OutputStatement, EffectiveStatement<QName, OutputStatement>> {
 
         public Definition() {
             super(YangStmtMapping.OUTPUT);
index a60a833da62e1be72e90bdeefc38934eed1856ad..2e1085221994c082290d6be3640c8d7a90124589 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
@@ -53,7 +53,7 @@ public class RpcStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition
-            extends AbstractStatementSupport<QName, RpcStatement, EffectiveStatement<QName, RpcStatement>> {
+            extends AbstractQNameStatementSupport<RpcStatement, EffectiveStatement<QName, RpcStatement>> {
         // TODO: share instances
         private static final StatementSupport<?, ?, ?> IMPLICIT_INPUT = new InputStatementImpl.Definition();
         private static final StatementSupport<?, ?, ?> IMPLICIT_OUTPUT = new OutputStatementImpl.Definition();
index 19fe7aea4df0627b1adb21726cefe7d8b66ac2f1..7b62514244384eff1efc9608ecff835cd0e55c0e 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
 import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -44,7 +44,7 @@ public class TypedefStatementImpl extends AbstractDeclaredStatement<QName> imple
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> {
+            AbstractQNameStatementSupport<TypedefStatement, EffectiveStatement<QName, TypedefStatement>> {
 
         public Definition() {
             super(YangStmtMapping.TYPEDEF);
index 0a2b12e0d3ffa4ad0610b355edc89a44aba2d1d2..3db84b8e93022083b036f063dc9abf3b4795f18d 100644 (file)
@@ -29,7 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
@@ -69,7 +69,7 @@ public class UsesStatementImpl extends AbstractDeclaredStatement<QName> implemen
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, UsesStatement, EffectiveStatement<QName, UsesStatement>> {
+            AbstractQNameStatementSupport<UsesStatement, EffectiveStatement<QName, UsesStatement>> {
 
         public Definition() {
             super(YangStmtMapping.USES);
index 4ccef75a1bbdf4b13af3e6f759eb1507a5a30dcb..656b5bef15225b4f59c9234fbb3be7e55138b28e 100644 (file)
@@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -53,7 +53,7 @@ public class ActionStatementImpl extends AbstractDeclaredStatement<QName> implem
     }
 
     public static class Definition
-            extends AbstractStatementSupport<QName, ActionStatement, EffectiveStatement<QName, ActionStatement>> {
+            extends AbstractQNameStatementSupport<ActionStatement, EffectiveStatement<QName, ActionStatement>> {
 
         private static final Set<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION,
                 YangStmtMapping.RPC, YangStmtMapping.ACTION);
index 6ad1678cf44203cdf7ee540512c48ba4a29c411b..0556f7e036292ca0e44a5242a36c56751cb17736 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -52,7 +52,7 @@ public final class AnydataStatementImpl extends AbstractDeclaredStatement<QName>
     }
 
     public static class Definition extends
-            AbstractStatementSupport<QName, AnydataStatement, EffectiveStatement<QName, AnydataStatement>> {
+            AbstractQNameStatementSupport<AnydataStatement, EffectiveStatement<QName, AnydataStatement>> {
 
         public Definition() {
             super(YangStmtMapping.ANYDATA);