Do not use StatementSourceReference in AbstractDeclaredEffectiveStatement 56/93956/4
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 27 Nov 2020 09:49:40 +0000 (10:49 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 27 Nov 2020 10:36:17 +0000 (11:36 +0100)
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 <robert.varga@pantheon.tech>
36 files changed:
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractUndeclaredEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/SubstatementIndexingException.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserNegativeTest.java

index 17d9fc84e24d37a18a301cc431c84d97115ef3b1..4d2d2d0fbb313f29beca025fef72fcf614d60bbb 100644 (file)
@@ -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<A, D extends DeclaredSt
         private final @NonNull ImmutableMap<QName, DataSchemaNode> dataChildren;
         private final @NonNull Object substatements;
 
-        protected DefaultDataNodeContainer(final D declared, final StatementSourceReference ref,
+        protected DefaultDataNodeContainer(final D declared,
                 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             super(declared);
             this.substatements = maskList(substatements);
@@ -153,8 +151,10 @@ public abstract class AbstractDeclaredEffectiveStatement<A, D extends DeclaredSt
                     final DataSchemaNode node = (DataSchemaNode) stmt;
                     final QName id = node.getQName();
                     final DataSchemaNode prev = tmp.put(id, node);
-                    SourceException.throwIf(prev != null, ref,
-                            "Cannot add child with name %s, a conflicting child already exists", id);
+                    if (prev != null) {
+                        throw new SubstatementIndexingException(
+                            "Cannot add child with name " + id + ", a conflicting child already exists");
+                    }
                 }
             }
 
@@ -259,9 +259,8 @@ public abstract class AbstractDeclaredEffectiveStatement<A, D extends DeclaredSt
             private final @NonNull Object substatements;
 
             protected WithSubstatements(final D declared,
-                    final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                    final StatementSourceReference ref) {
-                super(declared, substatements, ref);
+                    final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+                super(declared, substatements);
                 this.substatements = maskList(substatements);
             }
 
@@ -275,10 +274,9 @@ public abstract class AbstractDeclaredEffectiveStatement<A, D extends DeclaredSt
         private final @NonNull D declared;
 
         protected DefaultWithSchemaTree(final D declared,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                final StatementSourceReference ref) {
+                final ImmutableList<? extends EffectiveStatement<?, ?>> 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<A, D extends DeclaredSt
             private final @NonNull Object substatements;
 
             protected WithSubstatements(final D declared,
-                    final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                    final StatementSourceReference ref) {
-                super(declared, substatements, ref);
+                    final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+                super(declared, substatements);
                 this.substatements = maskList(substatements);
             }
 
@@ -324,12 +321,11 @@ public abstract class AbstractDeclaredEffectiveStatement<A, D extends DeclaredSt
         private final @NonNull D declared;
 
         protected DefaultWithDataTree(final D declared,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                final StatementSourceReference ref) {
+                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             this.declared = requireNonNull(declared);
-            final Map<QName, SchemaTreeEffectiveStatement<?>> schema = createSchemaTreeNamespace(ref, substatements);
+            final Map<QName, SchemaTreeEffectiveStatement<?>> schema = createSchemaTreeNamespace(substatements);
             this.schemaTree = ImmutableMap.copyOf(schema);
-            this.dataTree = createDataTreeNamespace(ref, schema.values(), schemaTree);
+            this.dataTree = createDataTreeNamespace(schema.values(), schemaTree);
         }
 
         @Override
index 3d5f539c615cc89fc1ff9a94c661114dcf774d83..6321f6246e2f3097e0e2007dcc8d145c161b4309 100644 (file)
@@ -78,17 +78,17 @@ public abstract class AbstractEffectiveModule<D extends DeclaredStatement<Unqual
 
     protected AbstractEffectiveModule(final Current<UnqualifiedQName, D> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, SchemaTreeEffectiveStatement<?>> schemaTree =
-                createSchemaTreeNamespace(stmt.sourceReference(), effectiveSubstatements());
+        final Map<QName, SchemaTreeEffectiveStatement<?>> 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);
 
index f4f8af2f8d0228c6c7edcf5043ae01ddbd175153..15609997cc19f1a0887f610b2054da2e233b666e 100644 (file)
@@ -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<A, D extends DeclaredStatement<
     // TODO: below methods need to find a better place, this is just a temporary hideout as their public class is on
     //       its way out
     static @NonNull Map<QName, SchemaTreeEffectiveStatement<?>> createSchemaTreeNamespace(
-            final StatementSourceReference ref, final Collection<? extends EffectiveStatement<?, ?>> substatements) {
+            final Collection<? extends EffectiveStatement<?, ?>> substatements) {
         final Map<QName, SchemaTreeEffectiveStatement<?>> 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<QName, DataTreeEffectiveStatement<?>> createDataTreeNamespace(
-            final StatementSourceReference ref,
             final Collection<SchemaTreeEffectiveStatement<?>> schemaTreeStatements,
             // Note: this dance is needed to not retain ImmutableMap$Values
             final ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTreeNamespace) {
@@ -105,10 +102,10 @@ public abstract class AbstractEffectiveStatement<A, D extends DeclaredStatement<
 
         for (SchemaTreeEffectiveStatement<?> 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<A, D extends DeclaredStatement<
         return sameAsSchema ? (ImmutableMap) schemaTreeNamespace : ImmutableMap.copyOf(dataChildren);
     }
 
-    private static <T extends SchemaTreeEffectiveStatement<?>> void putChild(final Map<QName, T> map,
-            final T child, final StatementSourceReference ref, final String tree) {
+    private static <T extends SchemaTreeEffectiveStatement<?>> void putChild(final Map<QName, T> 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<QName, DataTreeEffectiveStatement<?>> 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);
                     }
                 }));
         }
index b016c748b828d43a264fd1fc691810f0ce83706d..49fbacc2cb8bc742a88ddc1aa5d90e0768f012c4 100644 (file)
@@ -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<A, D extends DeclaredStatement<A>>
@@ -111,9 +110,8 @@ public abstract class AbstractUndeclaredEffectiveStatement<A, D extends Declared
                 E extends SchemaTreeAwareEffectiveStatement<A, D>> extends DefaultWithSchemaTree<A, D, E> {
             private final @NonNull Object substatements;
 
-            protected WithSubstatements(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                    final StatementSourceReference ref) {
-                super(substatements, ref);
+            protected WithSubstatements(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+                super(substatements);
                 this.substatements = maskList(substatements);
             }
 
@@ -125,9 +123,8 @@ public abstract class AbstractUndeclaredEffectiveStatement<A, D extends Declared
 
         private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
 
-        protected DefaultWithSchemaTree(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                final StatementSourceReference ref) {
-            this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(ref, substatements));
+        protected DefaultWithSchemaTree(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+            this.schemaTree = ImmutableMap.copyOf(createSchemaTreeNamespace(substatements));
         }
 
         @Override
@@ -150,9 +147,8 @@ public abstract class AbstractUndeclaredEffectiveStatement<A, D extends Declared
                 E extends DataTreeAwareEffectiveStatement<A, D>> extends DefaultWithDataTree<A, D, E> {
             private final @NonNull Object substatements;
 
-            protected WithSubstatements(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                    final StatementSourceReference ref) {
-                super(substatements, ref);
+            protected WithSubstatements(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+                super(substatements);
                 this.substatements = maskList(substatements);
             }
 
@@ -165,11 +161,10 @@ public abstract class AbstractUndeclaredEffectiveStatement<A, D extends Declared
         private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
         private final @NonNull ImmutableMap<QName, DataTreeEffectiveStatement<?>> dataTree;
 
-        protected DefaultWithDataTree(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-                final StatementSourceReference ref) {
-            final Map<QName, SchemaTreeEffectiveStatement<?>> schema = createSchemaTreeNamespace(ref, substatements);
+        protected DefaultWithDataTree(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+            final Map<QName, SchemaTreeEffectiveStatement<?>> schema = createSchemaTreeNamespace(substatements);
             this.schemaTree = ImmutableMap.copyOf(schema);
-            this.dataTree = createDataTreeNamespace(ref, schema.values(), schemaTree);
+            this.dataTree = createDataTreeNamespace(schema.values(), schemaTree);
         }
 
         @Override
index 02ef0c35a311c1bb57b977be393916d285bb1451..b5c58e1322c4fa3aeaf0244f0bd419ef8b09a69d 100644 (file)
@@ -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<D extends DeclaredS
     @Override
     protected final @NonNull E createDeclaredEffective(final Current<QName, D> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, D> 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 (file)
index 0000000..b77d27b
--- /dev/null
@@ -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));
+    }
+}
index d7dc55d3772281c2f4178d110e8c3c837523eb9f..75983b6178368a6d26629f4420f4086ffb25bd58 100644 (file)
@@ -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<QName, ActionStatement, ActionEffectiveStatement>
         implements ActionDefinition, ActionEffectiveStatement, OperationDefinitionMixin<ActionStatement>,
@@ -29,8 +28,8 @@ final class ActionEffectiveStatementImpl extends WithSubstatements<QName, Action
     private final int flags;
 
     ActionEffectiveStatementImpl(final ActionStatement declared, final SchemaPath path, final int flags,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(declared, substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index f4fb7be2201116cfc4a9baed656fd20aa45bb174..05f906c4de59baeae4c029b4c8fa59cf1e8aff7e 100644 (file)
@@ -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);
+        }
     }
 }
index 5dcf3bbc611ba828eb20cf5af3b1c7d81ae0cffb..fc62ae4cc1d95b4c667ac00a14def6382642cfb9 100644 (file)
@@ -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) {
index 159b69e5b501a7a6efb933777964a4bf3aa88779..a1fae849666438908874bbb08a6ea358a35f2bfe 100644 (file)
@@ -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<SchemaNodeIdentifier, AugmentStatement>
         implements AugmentEffectiveStatement, AugmentationSchemaNode, QNameModuleAware,
@@ -40,8 +39,8 @@ final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<Schem
 
     AugmentEffectiveStatementImpl(final AugmentStatement declared, final SchemaNodeIdentifier argument, final int flags,
             final QNameModule rootModuleQName, final ImmutableList<? extends EffectiveStatement<?, ?>> 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;
index f67c317ee0a93bc3d35878bbb838bf532b4df784..e6da0dd7f487328d1866bf3c37f81945d88c2010 100644 (file)
@@ -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<CaseStatement, CaseEffectiveStatement> {
@@ -60,15 +62,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.getSchemaPath(), 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.getSchemaPath(), findOriginal(stmt));
+        } catch (SubstatementIndexingException e) {
+            throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
+        }
     }
 
     private static @Nullable CaseSchemaNode findOriginal(final Current<?, ?> stmt) {
index a804fd25120b99e07dac30d2c0e41f341e41db14..5d3a19f8889728dfef76626f9ae77673b21ee3c4 100644 (file)
@@ -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<QName, CaseStatement, CaseEffectiveStatement>
         implements CaseEffectiveStatementMixin {
@@ -30,9 +29,9 @@ final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, Case
     private final int flags;
 
     DeclaredCaseEffectiveStatement(final CaseStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path, final @Nullable CaseSchemaNode original) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+            final SchemaPath path, final @Nullable CaseSchemaNode original) {
+        super(declared, substatements);
         this.flags = flags;
         this.path = requireNonNull(path);
         this.original = original;
index b88726ac4aef745f9906239e4114d7754c378055..e9c0ba856f434a0a175eb5697ff75f80a4095495 100644 (file)
@@ -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<QName, CaseStatement, CaseEffectiveStatement>
         implements CaseEffectiveStatementMixin {
@@ -30,9 +29,8 @@ final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, Ca
     private final int flags;
 
     UndeclaredCaseEffectiveStatement(final ImmutableList<? extends EffectiveStatement<?, ?>> 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;
index 751fb7a8a0aa3db4d1bd4f23e6fd6559a9c44ff1..9e0c3a60b964b59994e734248f364df1046f0b64 100644 (file)
@@ -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();
index ed3f3d682b8ba7e29aeb569d7a1301c80fa07847..a35a85db6ed2bdc089d0314837f6eef6d1aa8b76 100644 (file)
@@ -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<QName, ChoiceStatement, ChoiceEffectiveStatement>
         implements ChoiceEffectiveStatement, ChoiceSchemaNode, DerivableSchemaNode,
@@ -39,10 +38,10 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
     private final int flags;
 
     ChoiceEffectiveStatementImpl(final ChoiceStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path, final @Nullable CaseSchemaNode defaultCase,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> 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;
index d7fab2f83702b2002fa494cfec60af80636bdcda..28e491fed470432f68c3bea209bc56ed2e4bfed5 100644 (file)
@@ -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<ContainerStatement, ContainerEffectiveStatement> {
@@ -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);
+        }
     }
 }
index 3eeed36a27ea1c878f1badc4e071c541aa7fd57a..ba2591409e9a3785d5f50753a9677f466081e1f7 100644 (file)
@@ -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<QName, ContainerStatement, ContainerEffectiveStatement>
@@ -49,9 +48,9 @@ final class ContainerEffectiveStatementImpl
     private final @Nullable ContainerSchemaNode original;
 
     ContainerEffectiveStatementImpl(final ContainerStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path, final ContainerSchemaNode original) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+            final SchemaPath path, final ContainerSchemaNode original) {
+        super(declared, substatements);
         this.path = requireNonNull(path);
         this.original = original;
         this.flags = flags;
index 7b2317bb4d57be5b04e9f16fffcadb50ea5f72bf..e74b69bc5f355fffeddeabd50a46793c6df523d3 100644 (file)
@@ -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<QName, GroupingStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, ?, ?> ctx) {
index bf71100d04a47eaab9a6aa641af998b823e1dda7..c3d794787c73cd9e93b5baf1088101371235d1bb 100644 (file)
@@ -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<QName, GroupingStatement, GroupingEffectiveStatement>
@@ -38,9 +37,9 @@ final class GroupingEffectiveStatementImpl
     private final int flags;
 
     GroupingEffectiveStatementImpl(final GroupingStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+            final SchemaPath path) {
+        super(declared, substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index ed181e1d9b4c9d31ea6ae585f407ad86c0a6bee9..8cc7608ef5bca0655b9cb5c18a65661cb3dc51d3 100644 (file)
@@ -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<InputStatement, InputEffectiveStatement> {
@@ -57,15 +59,17 @@ abstract class AbstractInputStatementSupport
     protected final InputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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);
+        }
     }
 }
index 56f97c462b26734aca5abf13e99d6732713ff714..ff30218870797c0678fe4d3f8bf211502c3c3e68 100644 (file)
@@ -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<QName, InputStatement, InputEffectiveStatement>
         implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin<InputStatement> {
@@ -29,9 +28,8 @@ final class DeclaredInputEffectiveStatement extends WithSubstatements<QName, Inp
     private final int flags;
 
     DeclaredInputEffectiveStatement(final int flags, final InputStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final SchemaPath path) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+        super(declared, substatements);
         this.flags = flags;
         this.path = requireNonNull(path);
     }
index beaff58baba9a6620ed09d8d2949cfffead075d3..2ca58b908114e4e943708c1ba61e9921230d94d8 100644 (file)
@@ -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<QName, InputStatement, InputEffectiveStatement>
@@ -30,9 +29,8 @@ final class UndeclaredInputEffectiveStatement
     private final int flags;
 
     UndeclaredInputEffectiveStatement(final int flags,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-            final StatementSourceReference ref, final SchemaPath path) {
-        super(substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+        super(substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index 1ac449c5a7c0ecbb7b695caddb5754321bde1718..855542d8e57f3a587e1eea86fa61159a97bf8a5d 100644 (file)
@@ -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<QName, ListStatement, ListEffectiveStatement>
@@ -51,14 +49,10 @@ abstract class AbstractListEffectiveStatement
     private final @NonNull SchemaPath path;
     private final @NonNull Object keyDefinition;
 
-    AbstractListEffectiveStatement(final Current<QName, ListStatement> stmt, final SchemaPath path,
-            final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+    AbstractListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> 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);
index 2a825e90a1f618100f67621eccd085116d504d8d..e686a7664cc0e86f0d37ea4b7beb847e32d9a437 100644 (file)
@@ -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> 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<QName, ListStatement> stmt) {
index 89f4d05c02d4fb5aa47b67daaedd47a6834046c3..03b9c216130a857183a262bdb3014fe7e0c65720 100644 (file)
@@ -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<QName, ListStatement> stmt, final SchemaPath path,
-            final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+    EmptyListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
-        super(stmt, path, flags, substatements, keyDefinition);
+        super(declared, path, flags, substatements, keyDefinition);
     }
 
     @Override
index 4be68d34682842e1dd284c2f9b077b339836398a..582fbff4e66e1179ca2ba0bcc79fd76cf0ab86cb 100644 (file)
@@ -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<QName, ListStatement> stmt, final SchemaPath path,
-            final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+    RegularListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> 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;
     }
index 7a497fa93119a8f9eb31373d845f37a863fbc517..b9bb358caa49b69f210d7d238c97e942e823c308 100644 (file)
@@ -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<StmtContext<?, ?, ?>> submoduleContexts(final Current<?, ?> stmt) {
index a4a597383a32228adc9bd590a96aed5f0fd4edfa..54c321d31856f30f7d682edc10ff4aa0f9ed6246 100644 (file)
@@ -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<NotificationStatement, NotificationEffectiveStatement> {
@@ -40,8 +42,12 @@ abstract class AbstractNotificationStatementSupport
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, NotificationStatement> stmt);
index d09817d0fb56322cb760d3431227bf2f639a950f..9affeac4705ccbc22ca5b6b298423109a9c96077 100644 (file)
@@ -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<QName, NotificationStatement, NotificationEffectiveStatement>
@@ -38,9 +37,9 @@ final class NotificationEffectiveStatementImpl
     private final int flags;
 
     NotificationEffectiveStatementImpl(final NotificationStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+            final SchemaPath path) {
+        super(declared, substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index 8827681dd35784b745340dead94fec73243bf141..e563449934408a2775533fa678265c6ad97fcb87 100644 (file)
@@ -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<OutputStatement, OutputEffectiveStatement> {
@@ -57,15 +59,17 @@ abstract class AbstractOutputStatementSupport
     protected final OutputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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);
+        }
     }
 }
index 3c0ecc2ea75f2904285beaf8d1379286a8310b4f..b3c846edb76e34c1a6e470f6f168db541bdf1def 100644 (file)
@@ -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<QName, OutputStatement, OutputEffectiveStatement>
         implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin<OutputStatement> {
@@ -29,9 +28,8 @@ final class DeclaredOutputEffectiveStatement extends WithSubstatements<QName, Ou
     private final int flags;
 
     DeclaredOutputEffectiveStatement(final int flags, final OutputStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final SchemaPath path) {
-        super(declared, substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+        super(declared, substatements);
         this.flags = flags;
         this.path = requireNonNull(path);
     }
index 89e6ad75b5f4705d0422f50e5ba97a4d7c265ef2..22d57d7a0196d6fafb235659b48aed6bf462e757 100644 (file)
@@ -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<QName, OutputStatement, OutputEffectiveStatement>
@@ -30,9 +29,8 @@ final class UndeclaredOutputEffectiveStatement
     private final int flags;
 
     UndeclaredOutputEffectiveStatement(final int flags,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-            final StatementSourceReference ref, final SchemaPath path) {
-        super(substatements, ref);
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+        super(substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index db99a6a7cb6d1a66827ef0262b9438a7ea17bda4..df490d2c4342dc5cf4b66c1e48928be9e2468817 100644 (file)
@@ -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<RpcStatement, RpcEffectiveStatement> {
@@ -80,8 +82,12 @@ abstract class AbstractRpcStatementSupport extends BaseSchemaTreeStatementSuppor
             final ImmutableList<? extends EffectiveStatement<?, ?>> 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();
index 741d06adde16716cdf17769a8906527d4464f0cc..e39cab28688fffe0109468ec1f5a7a0d4cdf0506 100644 (file)
@@ -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<QName, RpcStatement, RpcEffectiveStatement>
         implements RpcDefinition, RpcEffectiveStatement, OperationDefinitionMixin<RpcStatement> {
@@ -27,9 +26,8 @@ final class RpcEffectiveStatementImpl extends WithSubstatements<QName, RpcStatem
     private final int flags;
 
     RpcEffectiveStatementImpl(final RpcStatement declared,
-        final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
-            final int flags, final SchemaPath path) {
-        super(declared, substatements, ref);
+        final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags, final SchemaPath path) {
+        super(declared, substatements);
         this.path = requireNonNull(path);
         this.flags = flags;
     }
index 2b2cec244461fcbe4ccae55421081a51c9a051de..109bc33d79e03e702f510fc37ceebfcf7cf5ffc9 100644 (file)
@@ -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) {
index c6160eed4f2735ef1e5c5185feb05b320415e495..605a34b111e973a1b9e003871c138b3cd8594bf9 100644 (file)
@@ -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"));