From 1245109538322c082cf8675deb3296f737a50997 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 23 Mar 2021 11:06:56 +0100 Subject: [PATCH] Correct AugmentIdentifier argument 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 --- .../AugmentIdentifierEffectiveStatement.java | 3 ++- .../model/api/AugmentIdentifierStatement.java | 3 ++- ...gmentIdentifierEffectiveStatementImpl.java | 4 +++- .../AugmentIdentifierStatementImpl.java | 10 +++++---- .../AugmentIdentifierStatementSupport.java | 21 +++++++++++++++---- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java index 2c4753904e..f73dc00f55 100644 --- a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java +++ b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java @@ -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 { + extends UnknownEffectiveStatement { @Override default StatementDefinition statementDefinition() { return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER; diff --git a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java index a55aa3629b..c850264c6c 100644 --- a/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java +++ b/yang/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java @@ -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 { +public interface AugmentIdentifierStatement extends UnknownStatement { @Override default StatementDefinition statementDefinition() { return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER; diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java index 2a25ef3f26..5844cc1765 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java @@ -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 +final class AugmentIdentifierEffectiveStatementImpl + extends WithSubstatements implements AugmentIdentifierEffectiveStatement { AugmentIdentifierEffectiveStatementImpl(final AugmentIdentifierStatement declared, final ImmutableList> substatements) { diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java index 3b97987588..6deef3ea39 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java @@ -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 + implements AugmentIdentifierStatement { + AugmentIdentifierStatementImpl(final UnqualifiedQName argument, final ImmutableList> substatements) { - super(argument, substatements); + super(argument.getLocalName(), argument, substatements); } } diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java index ce99068c2f..6d61359003 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java @@ -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 { + extends AbstractStatementSupport { 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 ctx, + protected AugmentIdentifierStatement createDeclared( + final StmtContext ctx, final ImmutableList> substatements) { return new AugmentIdentifierStatementImpl(ctx.getArgument(), substatements); } @Override protected AugmentIdentifierEffectiveStatement createEffective( - final Current stmt, + final Current stmt, final ImmutableList> substatements) { return new AugmentIdentifierEffectiveStatementImpl(stmt.declared(), substatements); } -- 2.36.6