Centralize SchemaNode.getPath() dispatch
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / input / AbstractInputStatementSupport.java
index ad7d6a4faa32be2d7044444d509f7ddec228c5de..1465d662c006c15aec3c3b7197f697dea793ba17 100644 (file)
@@ -17,7 +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> {
@@ -28,12 +31,12 @@ abstract class AbstractInputStatementSupport
     @Override
     protected final InputStatement createDeclared(final StmtContext<QName, InputStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        final StatementSource source = ctx.getStatementSource();
-        switch (ctx.getStatementSource()) {
+        final StatementSource source = ctx.source();
+        switch (source) {
             case CONTEXT:
-                return new RegularUndeclaredInputStatement(ctx.coerceStatementArgument(), substatements);
+                return new RegularUndeclaredInputStatement(ctx.getArgument(), substatements);
             case DECLARATION:
-                return new RegularInputStatement(ctx.coerceStatementArgument(), substatements);
+                return new RegularInputStatement(ctx.getArgument(), substatements);
             default:
                 throw new IllegalStateException("Unhandled statement source " + source);
         }
@@ -41,12 +44,12 @@ abstract class AbstractInputStatementSupport
 
     @Override
     protected final InputStatement createEmptyDeclared(final StmtContext<QName, InputStatement, ?> ctx) {
-        final StatementSource source = ctx.getStatementSource();
-        switch (ctx.getStatementSource()) {
+        final StatementSource source = ctx.source();
+        switch (source) {
             case CONTEXT:
-                return new EmptyUndeclaredInputStatement(ctx.coerceStatementArgument());
+                return new EmptyUndeclaredInputStatement(ctx.getArgument());
             case DECLARATION:
-                return new EmptyInputStatement(ctx.coerceStatementArgument());
+                return new EmptyInputStatement(ctx.getArgument());
             default:
                 throw new IllegalStateException("Unhandled statement source " + source);
         }
@@ -54,16 +57,19 @@ abstract class AbstractInputStatementSupport
 
     @Override
     protected final InputEffectiveStatement createDeclaredEffective(final int flags,
-            final StmtContext<QName, InputStatement, InputEffectiveStatement> ctx,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-            final InputStatement declared) {
-        return new DeclaredInputEffectiveStatement(declared, flags, ctx, substatements);
+            final Current<QName, InputStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.wrapSchemaPath());
     }
 
     @Override
     protected final InputEffectiveStatement createUndeclaredEffective(final int flags,
-            final StmtContext<QName, InputStatement, InputEffectiveStatement> ctx,
+            final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new UndeclaredInputEffectiveStatement(flags, ctx, substatements);
+        try {
+            return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.wrapSchemaPath());
+        } catch (SubstatementIndexingException e) {
+            throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
+        }
     }
 }