Centralize SchemaNode.getPath() dispatch
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / case_ / AbstractCaseStatementSupport.java
index f67c317ee0a93bc3d35878bbb838bf532b4df784..1ccc86c3709b8f7a74877969b2715c394067c25f 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -21,8 +22,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseImplicitStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException;
 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.source.SourceException;
 
 abstract class AbstractCaseStatementSupport
         extends BaseImplicitStatementSupport<CaseStatement, CaseEffectiveStatement> {
@@ -60,15 +63,23 @@ abstract class AbstractCaseStatementSupport
     @Override
     protected final CaseEffectiveStatement createDeclaredEffective(final Current<QName, CaseStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, stmt.sourceReference(),
-            computeFlags(stmt, substatements), stmt.getSchemaPath(), findOriginal(stmt));
+        try {
+            return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, computeFlags(stmt, substatements),
+                stmt.wrapSchemaPath(), findOriginal(stmt));
+        } catch (SubstatementIndexingException e) {
+            throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
+        }
     }
 
     @Override
     protected final CaseEffectiveStatement createUndeclaredEffective(final Current<QName, CaseStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new UndeclaredCaseEffectiveStatement(substatements, stmt.sourceReference(),
-            computeFlags(stmt, substatements), stmt.getSchemaPath(), findOriginal(stmt));
+        try {
+            return new UndeclaredCaseEffectiveStatement(substatements, computeFlags(stmt, substatements),
+                stmt.wrapSchemaPath(), findOriginal(stmt));
+        } catch (SubstatementIndexingException e) {
+            throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
+        }
     }
 
     private static @Nullable CaseSchemaNode findOriginal(final Current<?, ?> stmt) {
@@ -80,8 +91,8 @@ abstract class AbstractCaseStatementSupport
         return new FlagsBuilder()
                 .setHistory(stmt.history())
                 .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
-                .setConfiguration(stmt.effectiveConfig()
-                    && stmt.caerbannog().allSubstatementsStream().anyMatch(StmtContext::isConfiguration))
+                .setConfiguration(stmt.effectiveConfig() && substatements.stream().anyMatch(
+                    sub -> sub instanceof DataSchemaNode && ((DataSchemaNode) sub).isConfiguration()))
                 .toFlags();
     }
 }
\ No newline at end of file