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;
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> {
@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) {
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