X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FKeyStatementImpl.java;h=6f15bc311ce8201675af7f47f6df0b147ef04700;hb=45517deeef64ae497c58adba3fda4bd39155a076;hp=5a82078148fbaca7f9eb0bb3b12954aca1ff976f;hpb=69e109a3c7964c5a292ef628e2b79f89e13db1cf;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java index 5a82078148..6f15bc311c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java @@ -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 adaptArgumentValue( + final StmtContext, KeyStatement, + EffectiveStatement, KeyStatement>> ctx, + final QNameModule targetModule) { + final Builder 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, KeyStatement, ?> ctx) { return new KeyStatementImpl(ctx);