From: Robert Varga Date: Fri, 27 Nov 2020 09:49:40 +0000 (+0100) Subject: Do not use StatementSourceReference in AbstractDeclaredEffectiveStatement X-Git-Tag: v7.0.0~414 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=4ac2df88927f8a8482a95678d23780f65f5279a7;p=yangtools.git Do not use StatementSourceReference in AbstractDeclaredEffectiveStatement We are depending on yang-parser-spi mechanics in what is supposed to be (relatively) dumb DTOs. Replace this use with a dedicated SubstatementIndexingException and wrap it in statement supports as appropriate. JIRA: YANGTOOLS-1187 Change-Id: I4306bbdfb167b7431bc810a242fa3773f3ec6124 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredEffectiveStatement.java index 17d9fc84e2..4d2d2d0fbb 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredEffectiveStatement.java @@ -29,8 +29,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataNodeContainerMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; /** * Base stateless superclass for statements which (logically) always have an associated {@link DeclaredStatement}. This @@ -140,7 +138,7 @@ public abstract class AbstractDeclaredEffectiveStatement dataChildren; private final @NonNull Object substatements; - protected DefaultDataNodeContainer(final D declared, final StatementSourceReference ref, + protected DefaultDataNodeContainer(final D declared, final ImmutableList> substatements) { super(declared); this.substatements = maskList(substatements); @@ -153,8 +151,10 @@ public abstract class AbstractDeclaredEffectiveStatement> substatements, - final StatementSourceReference ref) { - super(declared, substatements, ref); + final ImmutableList> substatements) { + super(declared, substatements); this.substatements = maskList(substatements); } @@ -275,10 +274,9 @@ public abstract class AbstractDeclaredEffectiveStatement> substatements, - final StatementSourceReference ref) { + final ImmutableList> substatements) { this.declared = requireNonNull(declared); - this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(ref, substatements)); + this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(substatements)); } @Override @@ -307,9 +305,8 @@ public abstract class AbstractDeclaredEffectiveStatement> substatements, - final StatementSourceReference ref) { - super(declared, substatements, ref); + final ImmutableList> substatements) { + super(declared, substatements); this.substatements = maskList(substatements); } @@ -324,12 +321,11 @@ public abstract class AbstractDeclaredEffectiveStatement> substatements, - final StatementSourceReference ref) { + final ImmutableList> substatements) { this.declared = requireNonNull(declared); - final Map> schema = createSchemaTreeNamespace(ref, substatements); + final Map> schema = createSchemaTreeNamespace(substatements); this.schemaTree = ImmutableMap.copyOf(schema); - this.dataTree = createDataTreeNamespace(ref, schema.values(), schemaTree); + this.dataTree = createDataTreeNamespace(schema.values(), schemaTree); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index 3d5f539c61..6321f6246e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -78,17 +78,17 @@ public abstract class AbstractEffectiveModule stmt, final ImmutableList> substatements, final String prefix) { - super(stmt.declared(), substatements, stmt.sourceReference()); + super(stmt.declared(), substatements); + // FIXME: this seems to duplicate superclass logic // This check is rather weird, but comes from our desire to lower memory footprint while providing both // EffectiveStatements and SchemaNode interfaces -- which do not overlap completely where child lookups are // concerned. This ensures that we have SchemaTree index available for use with child lookups. - final Map> schemaTree = - createSchemaTreeNamespace(stmt.sourceReference(), effectiveSubstatements()); + final Map> schemaTree = createSchemaTreeNamespace(substatements); schemaTreeNamespace = ImmutableMap.copyOf(schemaTree); // Data tree check, not currently used - createDataTreeNamespace(stmt.sourceReference(), schemaTree.values(), schemaTreeNamespace); + createDataTreeNamespace(schemaTree.values(), schemaTreeNamespace); this.prefix = requireNonNull(prefix); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveStatement.java index f4f8af2f8d..15609997cc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveStatement.java @@ -25,8 +25,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; /** * Baseline stateless implementation of an EffectiveStatement. This class adds a few default implementations and @@ -88,15 +86,14 @@ public abstract class AbstractEffectiveStatement> createSchemaTreeNamespace( - final StatementSourceReference ref, final Collection> substatements) { + final Collection> substatements) { final Map> schemaChildren = new LinkedHashMap<>(); substatements.stream().filter(SchemaTreeEffectiveStatement.class::isInstance) - .forEach(child -> putChild(schemaChildren, (SchemaTreeEffectiveStatement) child, ref, "schema")); + .forEach(child -> putChild(schemaChildren, (SchemaTreeEffectiveStatement) child, "schema")); return schemaChildren; } static @NonNull ImmutableMap> createDataTreeNamespace( - final StatementSourceReference ref, final Collection> schemaTreeStatements, // Note: this dance is needed to not retain ImmutableMap$Values final ImmutableMap> schemaTreeNamespace) { @@ -105,10 +102,10 @@ public abstract class AbstractEffectiveStatement child : schemaTreeStatements) { if (child instanceof DataTreeEffectiveStatement) { - putChild(dataChildren, (DataTreeEffectiveStatement) child, ref, "data"); + putChild(dataChildren, (DataTreeEffectiveStatement) child, "data"); } else { sameAsSchema = false; - putChoiceDataChildren(dataChildren, ref, child); + putChoiceDataChildren(dataChildren, child); } } @@ -117,24 +114,26 @@ public abstract class AbstractEffectiveStatement> void putChild(final Map map, - final T child, final StatementSourceReference ref, final String tree) { + private static > void putChild(final Map map, final T child, + final String tree) { final QName id = child.getIdentifier(); final T prev = map.putIfAbsent(id, child); - SourceException.throwIf(prev != null, ref, - "Cannot add %s tree child with name %s, a conflicting child already exists", tree, id); + if (prev != null) { + throw new SubstatementIndexingException( + "Cannot add " + tree + " tree child with name " + id + ", a conflicting child already exists"); + } } private static void putChoiceDataChildren(final Map> map, - final StatementSourceReference ref, final SchemaTreeEffectiveStatement child) { + final SchemaTreeEffectiveStatement child) { // For choice statements go through all their cases and fetch their data children if (child instanceof ChoiceEffectiveStatement) { child.streamEffectiveSubstatements(CaseEffectiveStatement.class).forEach( caseStmt -> caseStmt.streamEffectiveSubstatements(SchemaTreeEffectiveStatement.class).forEach(stmt -> { if (stmt instanceof DataTreeEffectiveStatement) { - putChild(map, (DataTreeEffectiveStatement) stmt, ref, "data"); + putChild(map, (DataTreeEffectiveStatement) stmt, "data"); } else { - putChoiceDataChildren(map, ref, stmt); + putChoiceDataChildren(map, stmt); } })); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractUndeclaredEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractUndeclaredEffectiveStatement.java index b016c748b8..49fbacc2cb 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractUndeclaredEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractUndeclaredEffectiveStatement.java @@ -27,7 +27,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStat import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; @Beta public abstract class AbstractUndeclaredEffectiveStatement> @@ -111,9 +110,8 @@ public abstract class AbstractUndeclaredEffectiveStatement> extends DefaultWithSchemaTree { private final @NonNull Object substatements; - protected WithSubstatements(final ImmutableList> substatements, - final StatementSourceReference ref) { - super(substatements, ref); + protected WithSubstatements(final ImmutableList> substatements) { + super(substatements); this.substatements = maskList(substatements); } @@ -125,9 +123,8 @@ public abstract class AbstractUndeclaredEffectiveStatement> schemaTree; - protected DefaultWithSchemaTree(final ImmutableList> substatements, - final StatementSourceReference ref) { - this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(ref, substatements)); + protected DefaultWithSchemaTree(final ImmutableList> substatements) { + this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(substatements)); } @Override @@ -150,9 +147,8 @@ public abstract class AbstractUndeclaredEffectiveStatement> extends DefaultWithDataTree { private final @NonNull Object substatements; - protected WithSubstatements(final ImmutableList> substatements, - final StatementSourceReference ref) { - super(substatements, ref); + protected WithSubstatements(final ImmutableList> substatements) { + super(substatements); this.substatements = maskList(substatements); } @@ -165,11 +161,10 @@ public abstract class AbstractUndeclaredEffectiveStatement> schemaTree; private final @NonNull ImmutableMap> dataTree; - protected DefaultWithDataTree(final ImmutableList> substatements, - final StatementSourceReference ref) { - final Map> schema = createSchemaTreeNamespace(ref, substatements); + protected DefaultWithDataTree(final ImmutableList> substatements) { + final Map> schema = createSchemaTreeNamespace(substatements); this.schemaTree = ImmutableMap.copyOf(schema); - this.dataTree = createDataTreeNamespace(ref, schema.values(), schemaTree); + this.dataTree = createDataTreeNamespace(schema.values(), schemaTree); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java index 02ef0c35a3..b5c58e1322 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStateme 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.SourceException; /** * Specialization of {@link BaseQNameStatementSupport} for {@code input} and {@code output} statements. @@ -48,7 +49,11 @@ public abstract class BaseOperationContainerStatementSupport stmt, final ImmutableList> substatements) { - return createDeclaredEffective(historyAndStatusFlags(stmt.history(), substatements), stmt, substatements); + try { + return createDeclaredEffective(historyAndStatusFlags(stmt.history(), substatements), stmt, substatements); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } protected abstract @NonNull E createDeclaredEffective(int flags, @NonNull Current stmt, diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/SubstatementIndexingException.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/SubstatementIndexingException.java new file mode 100644 index 0000000000..b77d27b142 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/SubstatementIndexingException.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.parser.rfc7950.stmt; + +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; + +/** + * Exception thrown when indexing of substatements of a {@link AbstractDeclaredEffectiveStatement} fails. + */ +@Beta +public final class SubstatementIndexingException extends IllegalArgumentException { + private static final long serialVersionUID = 1L; + + public SubstatementIndexingException(final String message) { + super(requireNonNull(message)); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java index d7dc55d377..75983b6178 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java @@ -20,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.CopyableMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationDefinitionMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class ActionEffectiveStatementImpl extends WithSubstatements implements ActionDefinition, ActionEffectiveStatement, OperationDefinitionMixin, @@ -29,8 +28,8 @@ final class ActionEffectiveStatementImpl extends WithSubstatements> substatements, final StatementSourceReference ref) { - super(declared, substatements, ref); + final ImmutableList> substatements) { + super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index f4fb7be220..05f906c4de 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -105,7 +106,11 @@ public final class ActionStatementSupport extends SourceException.throwIf(StmtContextUtils.hasParentOfType(stmt, YangStmtMapping.MODULE), ref, "Action %s is defined at the top level of a module", argument); - return new ActionEffectiveStatementImpl(stmt.declared(), stmt.getSchemaPath(), - historyAndStatusFlags(stmt.history(), substatements), substatements, stmt.sourceReference()); + try { + return new ActionEffectiveStatementImpl(stmt.declared(), stmt.getSchemaPath(), + historyAndStatusFlags(stmt.history(), substatements), substatements); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java index 5dcf3bbc61..fc62ae4cc1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -35,6 +35,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; 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.SchemaTreeNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -179,9 +180,13 @@ abstract class AbstractAugmentStatementSupport .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT)) .toFlags(); - return new AugmentEffectiveStatementImpl(stmt.declared(), stmt.getArgument(), flags, - StmtContextUtils.getRootModuleQName(stmt.caerbannog()), substatements, stmt.sourceReference(), - (AugmentationSchemaNode) stmt.original()); + try { + return new AugmentEffectiveStatementImpl(stmt.declared(), stmt.getArgument(), flags, + StmtContextUtils.getRootModuleQName(stmt.caerbannog()), substatements, + (AugmentationSchemaNode) stmt.original()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static StmtContext getSearchRoot(final StmtContext augmentContext) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java index 159b69e5b5..a1fae84966 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java @@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.WhenConditionMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer implements AugmentEffectiveStatement, AugmentationSchemaNode, QNameModuleAware, @@ -40,8 +39,8 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer> substatements, - final StatementSourceReference ref, final @Nullable AugmentationSchemaNode original) { - super(declared, ref, substatements); + final @Nullable AugmentationSchemaNode original) { + super(declared, substatements); this.argument = requireNonNull(argument); this.rootModuleQName = requireNonNull(rootModuleQName); this.flags = flags; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java index f67c317ee0..e6da0dd7f4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java @@ -21,8 +21,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 { @@ -60,15 +62,23 @@ abstract class AbstractCaseStatementSupport @Override protected final CaseEffectiveStatement createDeclaredEffective(final Current stmt, final ImmutableList> 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.getSchemaPath(), findOriginal(stmt)); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } @Override protected final CaseEffectiveStatement createUndeclaredEffective(final Current stmt, final ImmutableList> substatements) { - return new UndeclaredCaseEffectiveStatement(substatements, stmt.sourceReference(), - computeFlags(stmt, substatements), stmt.getSchemaPath(), findOriginal(stmt)); + try { + return new UndeclaredCaseEffectiveStatement(substatements, computeFlags(stmt, substatements), + stmt.getSchemaPath(), findOriginal(stmt)); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static @Nullable CaseSchemaNode findOriginal(final Current stmt) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java index a804fd2512..5d3a19f888 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithSchemaTree.WithSubstatements; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class DeclaredCaseEffectiveStatement extends WithSubstatements implements CaseEffectiveStatementMixin { @@ -30,9 +29,9 @@ final class DeclaredCaseEffectiveStatement extends WithSubstatements> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path, final @Nullable CaseSchemaNode original) { - super(declared, substatements, ref); + final ImmutableList> substatements, final int flags, + final SchemaPath path, final @Nullable CaseSchemaNode original) { + super(declared, substatements); this.flags = flags; this.path = requireNonNull(path); this.original = original; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java index b88726ac4a..e9c0ba856f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEffectiveStatement.DefaultWithSchemaTree.WithSubstatements; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class UndeclaredCaseEffectiveStatement extends WithSubstatements implements CaseEffectiveStatementMixin { @@ -30,9 +29,8 @@ final class UndeclaredCaseEffectiveStatement extends WithSubstatements> substatements, - final StatementSourceReference ref, final int flags, final SchemaPath path, - final @Nullable CaseSchemaNode original) { - super(substatements, ref); + final int flags, final SchemaPath path, final @Nullable CaseSchemaNode original) { + super(substatements); this.path = requireNonNull(path); this.flags = flags; this.original = original; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java index 751fb7a8a0..9e0c3a60b9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java @@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; 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.ImplicitParentAwareStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; @@ -84,9 +85,12 @@ abstract class AbstractChoiceStatementSupport .setConfiguration(stmt.effectiveConfig()) .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE)) .toFlags(); - - return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, stmt.sourceReference(), flags, - stmt.getSchemaPath(), defaultCase, (ChoiceSchemaNode) stmt.original()); + try { + return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, flags, stmt.getSchemaPath(), + defaultCase, (ChoiceSchemaNode) stmt.original()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } abstract StatementSupport implictCase(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java index ed3f3d682b..a35a85db6e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java @@ -27,7 +27,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffec import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.AugmentationTargetMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataSchemaNodeMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MandatoryMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class ChoiceEffectiveStatementImpl extends WithSubstatements implements ChoiceEffectiveStatement, ChoiceSchemaNode, DerivableSchemaNode, @@ -39,10 +38,10 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path, final @Nullable CaseSchemaNode defaultCase, + final ImmutableList> substatements, final int flags, + final SchemaPath path, final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) { - super(declared, substatements, ref); + super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; this.defaultCase = defaultCase; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java index d7fab2f837..28e491fed4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java @@ -22,8 +22,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; +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 AbstractContainerStatementSupport extends BaseSchemaTreeStatementSupport { @@ -58,7 +60,10 @@ abstract class AbstractContainerStatementSupport EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements); EffectiveStmtUtils.checkUniqueUses(stmt, substatements); - return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, stmt.sourceReference(), flags, path, - original); + try { + return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, flags, path, original); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java index 3eeed36a27..ba2591409e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java @@ -31,7 +31,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MustConstraintMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.PresenceMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class ContainerEffectiveStatementImpl extends WithSubstatements @@ -49,9 +48,9 @@ final class ContainerEffectiveStatementImpl private final @Nullable ContainerSchemaNode original; ContainerEffectiveStatementImpl(final ContainerStatement declared, - final ImmutableList> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path, final ContainerSchemaNode original) { - super(declared, substatements, ref); + final ImmutableList> substatements, final int flags, + final SchemaPath path, final ContainerSchemaNode original) { + super(declared, substatements); this.path = requireNonNull(path); this.original = original; this.flags = flags; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java index 7b2317bb4d..e74b69bc5f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -65,8 +66,12 @@ abstract class AbstractGroupingStatementSupport @Override protected GroupingEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - return new GroupingEffectiveStatementImpl(stmt.declared(), substatements, stmt.sourceReference(), - historyAndStatusFlags(stmt.history(), substatements), stmt.getSchemaPath()); + try { + return new GroupingEffectiveStatementImpl(stmt.declared(), substatements, + historyAndStatusFlags(stmt.history(), substatements), stmt.getSchemaPath()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static void checkDeclaredConflict(final StmtContext ctx) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java index bf71100d04..c3d794787c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java @@ -26,7 +26,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.SchemaNodeMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class GroupingEffectiveStatementImpl extends WithSubstatements @@ -38,9 +37,9 @@ final class GroupingEffectiveStatementImpl private final int flags; GroupingEffectiveStatementImpl(final GroupingStatement declared, - final ImmutableList> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path) { - super(declared, substatements, ref); + final ImmutableList> substatements, final int flags, + final SchemaPath path) { + super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java index ed181e1d9b..8cc7608ef5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java @@ -17,8 +17,10 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport; +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 AbstractInputStatementSupport extends BaseOperationContainerStatementSupport { @@ -57,15 +59,17 @@ abstract class AbstractInputStatementSupport protected final InputEffectiveStatement createDeclaredEffective(final int flags, final Current stmt, final ImmutableList> substatements) { - return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.sourceReference(), - stmt.getSchemaPath()); + return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.getSchemaPath()); } @Override protected final InputEffectiveStatement createUndeclaredEffective(final int flags, final Current stmt, final ImmutableList> substatements) { - return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.sourceReference(), - stmt.getSchemaPath()); + try { + return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.getSchemaPath()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java index 56f97c462b..ff30218870 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationContainerMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class DeclaredInputEffectiveStatement extends WithSubstatements implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin { @@ -29,9 +28,8 @@ final class DeclaredInputEffectiveStatement extends WithSubstatements> substatements, final StatementSourceReference ref, - final SchemaPath path) { - super(declared, substatements, ref); + final ImmutableList> substatements, final SchemaPath path) { + super(declared, substatements); this.flags = flags; this.path = requireNonNull(path); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java index beaff58bab..2ca58b9081 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationContainerMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class UndeclaredInputEffectiveStatement extends WithSubstatements @@ -30,9 +29,8 @@ final class UndeclaredInputEffectiveStatement private final int flags; UndeclaredInputEffectiveStatement(final int flags, - final ImmutableList> substatements, - final StatementSourceReference ref, final SchemaPath path) { - super(substatements, ref); + final ImmutableList> substatements, final SchemaPath path) { + super(substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java index 1ac449c5a7..855542d8e5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java @@ -34,8 +34,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.UserOrderedMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.WhenConditionMixin; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; abstract class AbstractListEffectiveStatement extends DefaultWithDataTree @@ -51,14 +49,10 @@ abstract class AbstractListEffectiveStatement private final @NonNull SchemaPath path; private final @NonNull Object keyDefinition; - AbstractListEffectiveStatement(final Current stmt, final SchemaPath path, - final int flags, final ImmutableList> substatements, + AbstractListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags, + final ImmutableList> substatements, final ImmutableList keyDefinition) { - super(stmt.declared(), substatements, stmt.sourceReference()); - - EffectiveStmtUtils.checkUniqueGroupings(stmt, substatements); - EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements); - EffectiveStmtUtils.checkUniqueUses(stmt, substatements); + super(declared, substatements); this.substatements = maskList(substatements); this.path = requireNonNull(path); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java index 2a825e90a1..e686a7664c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java @@ -36,12 +36,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -111,10 +113,19 @@ abstract class AbstractListStatementSupport extends final Optional elementCountConstraint = EffectiveStmtUtils.createElementCountConstraint(substatements); - return original == null && !elementCountConstraint.isPresent() - ? new EmptyListEffectiveStatement(stmt, path, flags, substatements, keyDefinition) - : new RegularListEffectiveStatement(stmt, path, flags, substatements, keyDefinition, - elementCountConstraint.orElse(null), original); + + EffectiveStmtUtils.checkUniqueGroupings(stmt, substatements); + EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements); + EffectiveStmtUtils.checkUniqueUses(stmt, substatements); + + try { + return original == null && !elementCountConstraint.isPresent() + ? new EmptyListEffectiveStatement(stmt.declared(), path, flags, substatements, keyDefinition) + : new RegularListEffectiveStatement(stmt.declared(), path, flags, substatements, keyDefinition, + elementCountConstraint.orElse(null), original); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static void warnConfigList(final @NonNull Current stmt) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java index 89f4d05c02..03b9c21613 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java @@ -15,13 +15,12 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement { - EmptyListEffectiveStatement(final Current stmt, final SchemaPath path, - final int flags, final ImmutableList> substatements, + EmptyListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags, + final ImmutableList> substatements, final ImmutableList keyDefinition) { - super(stmt, path, flags, substatements, keyDefinition); + super(declared, path, flags, substatements, keyDefinition); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java index 4be68d3468..582fbff4e6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java @@ -15,17 +15,16 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; final class RegularListEffectiveStatement extends AbstractListEffectiveStatement { private final ElementCountConstraint elementCountConstraint; private final ListSchemaNode original; - RegularListEffectiveStatement(final Current stmt, final SchemaPath path, - final int flags, final ImmutableList> substatements, + RegularListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags, + final ImmutableList> substatements, final ImmutableList keyDefinition, final ElementCountConstraint elementCountConstraint, final ListSchemaNode original) { - super(stmt, path, flags, substatements, keyDefinition); + super(declared, path, flags, substatements, keyDefinition); this.elementCountConstraint = elementCountConstraint; this.original = original; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java index 7a497fa931..b9bb358caa 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java @@ -35,6 +35,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule; import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; @@ -189,7 +190,11 @@ abstract class AbstractModuleStatementSupport submodules.add((Submodule) submodule); } - return new ModuleEffectiveStatementImpl(stmt, substatements, submodules); + try { + return new ModuleEffectiveStatementImpl(stmt, substatements, submodules); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static Collection> submoduleContexts(final Current stmt) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java index a4a597383a..54c321d318 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -15,8 +15,10 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; +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 AbstractNotificationStatementSupport extends BaseSchemaTreeStatementSupport { @@ -40,8 +42,12 @@ abstract class AbstractNotificationStatementSupport final ImmutableList> substatements) { checkEffective(stmt); - return new NotificationEffectiveStatementImpl(stmt.declared(), substatements, stmt.sourceReference(), + try { + return new NotificationEffectiveStatementImpl(stmt.declared(), substatements, historyAndStatusFlags(stmt.history(), substatements), stmt.getSchemaPath()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } abstract void checkEffective(Current stmt); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java index d09817d0fb..9affeac470 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java @@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataNodeContainerMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MustConstraintMixin; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.SchemaNodeMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class NotificationEffectiveStatementImpl extends WithSubstatements @@ -38,9 +37,9 @@ final class NotificationEffectiveStatementImpl private final int flags; NotificationEffectiveStatementImpl(final NotificationStatement declared, - final ImmutableList> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path) { - super(declared, substatements, ref); + final ImmutableList> substatements, final int flags, + final SchemaPath path) { + super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java index 8827681dd3..e563449934 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java @@ -17,8 +17,10 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport; +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 AbstractOutputStatementSupport extends BaseOperationContainerStatementSupport { @@ -57,15 +59,17 @@ abstract class AbstractOutputStatementSupport protected final OutputEffectiveStatement createDeclaredEffective(final int flags, final Current stmt, final ImmutableList> substatements) { - return new DeclaredOutputEffectiveStatement(flags, stmt.declared(), substatements, stmt.sourceReference(), - stmt.getSchemaPath()); + return new DeclaredOutputEffectiveStatement(flags, stmt.declared(), substatements, stmt.getSchemaPath()); } @Override protected final OutputEffectiveStatement createUndeclaredEffective(final int flags, final Current stmt, final ImmutableList> substatements) { - return new UndeclaredOutputEffectiveStatement(flags, substatements, stmt.sourceReference(), - stmt.getSchemaPath()); + try { + return new UndeclaredOutputEffectiveStatement(flags, substatements, stmt.getSchemaPath()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java index 3c0ecc2ea7..b3c846edb7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationContainerMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class DeclaredOutputEffectiveStatement extends WithSubstatements implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin { @@ -29,9 +28,8 @@ final class DeclaredOutputEffectiveStatement extends WithSubstatements> substatements, final StatementSourceReference ref, - final SchemaPath path) { - super(declared, substatements, ref); + final ImmutableList> substatements, final SchemaPath path) { + super(declared, substatements); this.flags = flags; this.path = requireNonNull(path); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java index 89e6ad75b5..22d57d7a01 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java @@ -21,7 +21,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationContainerMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class UndeclaredOutputEffectiveStatement extends WithSubstatements @@ -30,9 +29,8 @@ final class UndeclaredOutputEffectiveStatement private final int flags; UndeclaredOutputEffectiveStatement(final int flags, - final ImmutableList> substatements, - final StatementSourceReference ref, final SchemaPath path) { - super(substatements, ref); + final ImmutableList> substatements, final SchemaPath path) { + super(substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java index db99a6a7cb..df490d2c43 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java @@ -22,12 +22,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseSchemaTreeStatementSupport; 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.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; abstract class AbstractRpcStatementSupport extends BaseSchemaTreeStatementSupport { @@ -80,8 +82,12 @@ abstract class AbstractRpcStatementSupport extends BaseSchemaTreeStatementSuppor final ImmutableList> substatements) { checkState(!substatements.isEmpty(), "Missing implicit input/output statements at %s", stmt.sourceReference()); - return new RpcEffectiveStatementImpl(stmt.declared(), substatements, stmt.sourceReference(), - computeFlags(substatements), stmt.getSchemaPath()); + try { + return new RpcEffectiveStatementImpl(stmt.declared(), substatements, computeFlags(substatements), + stmt.getSchemaPath()); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } abstract StatementSupport implictInput(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java index 741d06adde..e39cab2868 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java @@ -19,7 +19,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OperationDefinitionMixin; -import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; final class RpcEffectiveStatementImpl extends WithSubstatements implements RpcDefinition, RpcEffectiveStatement, OperationDefinitionMixin { @@ -27,9 +26,8 @@ final class RpcEffectiveStatementImpl extends WithSubstatements> substatements, final StatementSourceReference ref, - final int flags, final SchemaPath path) { - super(declared, substatements, ref); + final ImmutableList> substatements, final int flags, final SchemaPath path) { + super(declared, substatements); this.path = requireNonNull(path); this.flags = flags; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java index 2b2cec2444..109bc33d79 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -96,7 +97,11 @@ abstract class AbstractSubmoduleStatementSupport if (substatements.isEmpty()) { throw noBelongsTo(stmt); } - return new SubmoduleEffectiveStatementImpl(stmt, substatements); + try { + return new SubmoduleEffectiveStatementImpl(stmt, substatements); + } catch (SubstatementIndexingException e) { + throw new SourceException(e.getMessage(), stmt.sourceReference(), e); + } } private static SourceException noBelongsTo(final CommonStmtCtx stmt) { diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java index c6160eed4f..605a34b111 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java @@ -23,10 +23,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public class YangParserNegativeTest { @@ -184,7 +184,7 @@ public class YangParserNegativeTest { fail("Duplicate leaf not detected"); } catch (SomeModifiersUnresolvedException e) { final Throwable rootCause = Throwables.getRootCause(e); - assertThat(rootCause, isA(SourceException.class)); + assertThat(rootCause, isA(SubstatementIndexingException.class)); assertThat(rootCause.getMessage(), containsString("Cannot add schema tree child with name " + "(urn:simple.augment2.demo?revision=2014-06-02)delta, a conflicting child already exists"));