Retain DeclarationReference in DeclaredStatements
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / meta / InputStatementSupport.java
index ec1a364f1741f871170d88b31343fa4aaacfbadb..7508e079c589a4e83cd204afba40b2e935ef1bc6 100644 (file)
@@ -15,16 +15,18 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
+import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements;
 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
 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.SubstatementValidator;
@@ -32,47 +34,45 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 @Beta
 public final class InputStatementSupport
-        extends BaseOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
-    private static final @NonNull InputStatementSupport RFC6020_INSTANCE = new InputStatementSupport(
-        SubstatementValidator.builder(YangStmtMapping.INPUT)
-            .addAny(YangStmtMapping.ANYXML)
-            .addAny(YangStmtMapping.CHOICE)
-            .addAny(YangStmtMapping.CONTAINER)
-            .addAny(YangStmtMapping.GROUPING)
-            .addAny(YangStmtMapping.LEAF)
-            .addAny(YangStmtMapping.LEAF_LIST)
-            .addAny(YangStmtMapping.LIST)
-            .addAny(YangStmtMapping.TYPEDEF)
-            .addAny(YangStmtMapping.USES)
-            .build());
-    private static final @NonNull InputStatementSupport RFC7950_INSTANCE = new InputStatementSupport(
-        SubstatementValidator.builder(YangStmtMapping.INPUT)
-            .addAny(YangStmtMapping.ANYDATA)
-            .addAny(YangStmtMapping.ANYXML)
-            .addAny(YangStmtMapping.CHOICE)
-            .addAny(YangStmtMapping.CONTAINER)
-            .addAny(YangStmtMapping.GROUPING)
-            .addAny(YangStmtMapping.LEAF)
-            .addAny(YangStmtMapping.LEAF_LIST)
-            .addAny(YangStmtMapping.LIST)
-            .addAny(YangStmtMapping.MUST)
-            .addAny(YangStmtMapping.TYPEDEF)
-            .addAny(YangStmtMapping.USES)
-            .build());
+        extends AbstractOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
+    private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT)
+        .addAny(YangStmtMapping.ANYXML)
+        .addAny(YangStmtMapping.CHOICE)
+        .addAny(YangStmtMapping.CONTAINER)
+        .addAny(YangStmtMapping.GROUPING)
+        .addAny(YangStmtMapping.LEAF)
+        .addAny(YangStmtMapping.LEAF_LIST)
+        .addAny(YangStmtMapping.LIST)
+        .addAny(YangStmtMapping.TYPEDEF)
+        .addAny(YangStmtMapping.USES)
+        .build();
+    private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT)
+        .addAny(YangStmtMapping.ANYDATA)
+        .addAny(YangStmtMapping.ANYXML)
+        .addAny(YangStmtMapping.CHOICE)
+        .addAny(YangStmtMapping.CONTAINER)
+        .addAny(YangStmtMapping.GROUPING)
+        .addAny(YangStmtMapping.LEAF)
+        .addAny(YangStmtMapping.LEAF_LIST)
+        .addAny(YangStmtMapping.LIST)
+        .addAny(YangStmtMapping.MUST)
+        .addAny(YangStmtMapping.TYPEDEF)
+        .addAny(YangStmtMapping.USES)
+        .build();
 
     private final SubstatementValidator validator;
 
-    private InputStatementSupport(final SubstatementValidator validator) {
-        super(YangStmtMapping.INPUT, YangConstants::operationInputQName);
+    private InputStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
+        super(YangStmtMapping.INPUT, config, YangConstants::operationInputQName);
         this.validator = requireNonNull(validator);
     }
 
-    public static @NonNull InputStatementSupport rfc6020Instance() {
-        return RFC6020_INSTANCE;
+    public static @NonNull InputStatementSupport rfc6020Instance(final YangParserConfiguration config) {
+        return new InputStatementSupport(config, RFC6020_VALIDATOR);
     }
 
-    public static @NonNull InputStatementSupport rfc7950Instance() {
-        return RFC7950_INSTANCE;
+    public static @NonNull InputStatementSupport rfc7950Instance(final YangParserConfiguration config) {
+        return new InputStatementSupport(config, RFC7950_VALIDATOR);
     }
 
     @Override
@@ -83,33 +83,37 @@ public final class InputStatementSupport
     @Override
     protected InputStatement createDeclared(final StmtContext<QName, InputStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        final StatementSource source = ctx.source();
-        switch (source) {
+        final StatementOrigin origin = ctx.origin();
+        switch (origin) {
             case CONTEXT:
                 return ImplicitStatements.createInput(ctx.getArgument(), substatements);
             case DECLARATION:
                 return DeclaredStatements.createInput(ctx.getArgument(), substatements);
             default:
-                throw new IllegalStateException("Unhandled statement source " + source);
+                throw new IllegalStateException("Unhandled statement origin " + origin);
         }
     }
 
     @Override
-    protected InputEffectiveStatement copyDeclaredEffective(final int flags,
-            final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
-        return EffectiveStatements.copyInput(original, stmt.effectivePath(),
-            flags);
+    protected InputStatement attachDeclarationReference(final InputStatement stmt,
+            final DeclarationReference reference) {
+        return DeclaredStatementDecorators.decorateInput(stmt, reference);
     }
 
     @Override
-    protected InputEffectiveStatement copyUndeclaredEffective(final int flags,
-            final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
+    InputEffectiveStatement copyDeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
+            final InputEffectiveStatement original) {
         return EffectiveStatements.copyInput(original, stmt.effectivePath(), flags);
     }
 
     @Override
-    protected InputEffectiveStatement createDeclaredEffective(final int flags,
-            final Current<QName, InputStatement> stmt,
+    InputEffectiveStatement copyUndeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
+            final InputEffectiveStatement original) {
+        return EffectiveStatements.copyInput(original, stmt.effectivePath(), flags);
+    }
+
+    @Override
+    InputEffectiveStatement createDeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
             return EffectiveStatements.createInput(stmt.declared(), stmt.effectivePath(), flags, substatements);
@@ -119,8 +123,7 @@ public final class InputStatementSupport
     }
 
     @Override
-    protected InputEffectiveStatement createUndeclaredEffective(final int flags,
-            final Current<QName, InputStatement> stmt,
+    InputEffectiveStatement createUndeclaredEffective(final int flags, final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
             return EffectiveStatements.createInput(stmt.effectivePath(), flags, substatements);