Correct AugmentIdentifier argument 40/95540/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 23 Mar 2021 10:06:56 +0000 (11:06 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 23 Mar 2021 10:08:01 +0000 (11:08 +0100)
augment-identifier extension requires argument matching node-identifier,
which is not a generic String, but rather UnqualifiedQName. Fix that.

JIRA: YANGTOOLS-1196
Change-Id: Ifee79fc8f9749d207ad19469493ad42b1a1c167f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java
yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java

index 2c4753904e8626e4c6c15ff8ecc0906bfed139f5..f73dc00f55cc130b88d04a02727f5542d1febf2b 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.odlext.model.api;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownEffectiveStatement;
 
 @Beta
 public interface AugmentIdentifierEffectiveStatement
-        extends UnknownEffectiveStatement<String, AugmentIdentifierStatement> {
+        extends UnknownEffectiveStatement<UnqualifiedQName, AugmentIdentifierStatement> {
     @Override
     default StatementDefinition statementDefinition() {
         return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER;
index a55aa3629b8dc9a37e955f2db4c180a832869368..c850264c6c1063668571aca350623b6d90e6a4d6 100644 (file)
@@ -8,11 +8,12 @@
 package org.opendaylight.yangtools.odlext.model.api;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 
 @Beta
-public interface AugmentIdentifierStatement extends UnknownStatement<String> {
+public interface AugmentIdentifierStatement extends UnknownStatement<UnqualifiedQName> {
     @Override
     default StatementDefinition statementDefinition() {
         return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER;
index 2a25ef3f26dad82c79505f201b833fe59374dd4a..5844cc1765424083621ecfbf010b6348ba7fa3c4 100644 (file)
@@ -10,10 +10,12 @@ package org.opendaylight.yangtools.odlext.parser;
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveStatement;
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 
-final class AugmentIdentifierEffectiveStatementImpl extends WithSubstatements<String, AugmentIdentifierStatement>
+final class AugmentIdentifierEffectiveStatementImpl
+        extends WithSubstatements<UnqualifiedQName, AugmentIdentifierStatement>
         implements AugmentIdentifierEffectiveStatement {
     AugmentIdentifierEffectiveStatementImpl(final AugmentIdentifierStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 3b979875880f878ba239e6a1fa12fe5c8a3e5238..6deef3ea395cf07554cb46d2c5ee21479aeaf815 100644 (file)
@@ -9,12 +9,14 @@ package org.opendaylight.yangtools.odlext.parser;
 
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements;
 
-final class AugmentIdentifierStatementImpl extends WithSubstatements implements AugmentIdentifierStatement {
-    AugmentIdentifierStatementImpl(final String argument,
+final class AugmentIdentifierStatementImpl extends WithSubstatements<UnqualifiedQName>
+        implements AugmentIdentifierStatement {
+    AugmentIdentifierStatementImpl(final UnqualifiedQName argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        super(argument, substatements);
+        super(argument.getLocalName(), argument, substatements);
     }
 }
index ce99068c2f178d4248c4a929bec275f8ff8e5ed0..6d61359003efe6736f97fa17a73729bf3e2d3c65 100644 (file)
@@ -13,16 +13,19 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveStatement;
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 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.AbstractStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 @Beta
 public final class AugmentIdentifierStatementSupport
-        extends AbstractStringStatementSupport<AugmentIdentifierStatement, AugmentIdentifierEffectiveStatement> {
+        extends AbstractStatementSupport<UnqualifiedQName, AugmentIdentifierStatement,
+                                         AugmentIdentifierEffectiveStatement> {
     public static final @NonNull AugmentIdentifierStatementSupport INSTANCE = new AugmentIdentifierStatementSupport();
 
     private static final SubstatementValidator VALIDATOR =
@@ -32,20 +35,30 @@ public final class AugmentIdentifierStatementSupport
         super(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER, StatementPolicy.contextIndependent());
     }
 
+    @Override
+    public UnqualifiedQName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        try {
+            return UnqualifiedQName.of(value).intern();
+        } catch (IllegalArgumentException e) {
+            throw new SourceException(ctx, e, "Invalid identifier \"%s\"", value);
+        }
+    }
+
     @Override
     protected SubstatementValidator getSubstatementValidator() {
         return VALIDATOR;
     }
 
     @Override
-    protected AugmentIdentifierStatement createDeclared(final StmtContext<String, AugmentIdentifierStatement, ?> ctx,
+    protected AugmentIdentifierStatement createDeclared(
+            final StmtContext<UnqualifiedQName, AugmentIdentifierStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         return new AugmentIdentifierStatementImpl(ctx.getArgument(), substatements);
     }
 
     @Override
     protected AugmentIdentifierEffectiveStatement createEffective(
-            final Current<String, AugmentIdentifierStatement> stmt,
+            final Current<UnqualifiedQName, AugmentIdentifierStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return new AugmentIdentifierEffectiveStatementImpl(stmt.declared(), substatements);
     }