Add a proper grouping statement policy
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / AbstractEffectiveModule.java
index ab8532d9e0e65a86fa1917ff9a08ad94256d0bc4..f86ac375d1f8f8b3f96bbc903ee8e78b7b157ed7 100644 (file)
@@ -47,15 +47,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
+import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx;
 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.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
@@ -189,8 +188,8 @@ public abstract class AbstractEffectiveModule<D extends DeclaredStatement<Unqual
 
     @Override
     @SuppressWarnings("checkstyle:hiddenField")
-    public final Optional<DataSchemaNode> findDataChildByName(final QName name) {
-        return findDataSchemaNode(name);
+    public final DataSchemaNode dataChildByName(final QName name) {
+        return dataSchemaNode(name);
     }
 
     @Override
@@ -214,11 +213,13 @@ public abstract class AbstractEffectiveModule<D extends DeclaredStatement<Unqual
                 .toString();
     }
 
-    protected static final @NonNull String findPrefix(final StmtContext<?, ?, ?> stmt, final String type,
-            final String name) {
-        return SourceException.throwIfNull(
-            StmtContextUtils.firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class),
-            stmt.sourceReference(), "Unable to resolve prefix for %s %s.", type, name);
+    protected static final @NonNull String findPrefix(final CommonStmtCtx stmt,
+            final Collection<? extends EffectiveStatement<?, ?>> substatements, final String type, final String name) {
+        return substatements.stream()
+            .filter(PrefixEffectiveStatement.class::isInstance)
+            .map(prefix -> ((PrefixEffectiveStatement) prefix).argument())
+            .findAny()
+            .orElseThrow(() -> new SourceException(stmt, "Unable to resolve prefix for %s %s.", type, name));
     }
 
     // Alright. this is quite ugly