--- /dev/null
+/*
+ * Copyright (c) 2022 Verizon 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.stmt;
+
+import org.junit.Test;
+
+public class YT1436Test extends AbstractYangTest {
+ @Test
+ public void testUniqueLeafFromOtherSubmodule() {
+ assertEffectiveModelDir("/bugs/YT1436/unique");
+ }
+
+ @Test
+ public void testAugmentGroupingFromOtherSubmodule() {
+ assertEffectiveModelDir("/bugs/YT1436/augment");
+ }
+}
*/
package org.opendaylight.yangtools.yang.parser.spi.meta;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
import com.google.common.base.Strings;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
return null;
}
- final StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
- final QNameModule qnameModule;
-
+ final var rootCtx = ctx.getRoot();
if (rootCtx.producesDeclared(ModuleStatement.class)) {
- qnameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
+ return lookupModuleQName(rootCtx, rootCtx);
} else if (rootCtx.producesDeclared(SubmoduleStatement.class)) {
- final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
- BelongsToStatement.class);
- qnameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
+ final var belongsTo = rootCtx.getAllFromNamespace(BelongsToPrefixToModuleCtx.class);
+ if (belongsTo == null || belongsTo.isEmpty()) {
+ throw new IllegalArgumentException(rootCtx + " does not have belongs-to linkage resolved");
+ }
+ return lookupModuleQName(rootCtx, belongsTo.values().iterator().next());
} else {
- qnameModule = null;
+ throw new IllegalArgumentException("Unsupported root " + rootCtx);
}
+ }
- checkArgument(qnameModule != null, "Failed to look up root QNameModule for %s", ctx);
- return qnameModule;
+ private static QNameModule lookupModuleQName(final NamespaceStmtCtx storage, final StmtContext<?, ?, ?> module) {
+ final var ret = storage.getFromNamespace(ModuleCtxToModuleQName.class, module);
+ if (ret == null) {
+ throw new IllegalArgumentException("Failed to look up QNameModule for " + module + " in " + storage);
+ }
+ return ret;
}
public static QNameModule getModuleQNameByPrefix(final StmtContext<?, ?, ?> ctx, final String prefix) {