Add SubmoduleEffectiveStatement.belongsTo() 11/103311/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Nov 2022 17:02:00 +0000 (18:02 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Nov 2022 17:27:08 +0000 (18:27 +0100)
A submodule has to have exactly one belongs-to statement, expose it
from SubmoduleEffectiveStatement.

JIRA: YANGTOOLS-1466
Change-Id: Ic95bdca3f57384f14e05524b365825c3ed3dccf6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DefaultMethodHelpers.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java

index f45258cef7275d0dae175e30faf7abb7b499e728..ce16b0f90dd88e0f7c9f210cd55eaf18cbd39eef 100644 (file)
@@ -36,8 +36,8 @@ final class DefaultMethodHelpers {
         return verifySubstatement(stmt, PrefixEffectiveStatement.class);
     }
 
-    private static <T extends EffectiveStatement<?, ?>> @NonNull T verifySubstatement(
-            final EffectiveStatement<?, ?> stmt, final Class<T> type) {
+    static <T extends EffectiveStatement<?, ?>> @NonNull T verifySubstatement(final EffectiveStatement<?, ?> stmt,
+            final Class<T> type) {
         return stmt.findFirstEffectiveSubstatement(type).orElseThrow(
             () -> new VerifyException(stmt + " does not define a " + type.getSimpleName() + " substatement"));
     }
index f0c549f8efda8c4e8d1ade780cdd92497ee193b2..4c5c3e5bb312fa2388208eca4a876093689827de 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
+import com.google.common.base.VerifyException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@@ -22,4 +24,16 @@ public non-sealed interface SubmoduleEffectiveStatement
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.SUBMODULE;
     }
+
+    /**
+     * Return this statement's {@code belongs-to} substatement.
+     *
+     * @implSpec
+     *      Default implementation uses {@link #findFirstEffectiveSubstatement(Class)} and throws a
+     *      {@link VerifyException} if a matching substatement is not found.
+     * @return A {@link BelongsToEffectiveStatement}
+     */
+    default @NonNull BelongsToEffectiveStatement belongsTo() {
+        return DefaultMethodHelpers.verifySubstatement(this, BelongsToEffectiveStatement.class);
+    }
 }