Retain DeclarationReference in DeclaredStatements
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / meta / ChoiceStatementSupport.java
index 77ae7057b2da47577f10be0d360c58d78ad096c7..f4f9996578cb427b2959e8d0ca99b6fd2e4cbbae 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Status;
 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.StatementDefinition;
@@ -27,6 +28,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
+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.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
@@ -45,8 +48,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 public final class ChoiceStatementSupport
         extends AbstractSchemaTreeStatementSupport<ChoiceStatement, ChoiceEffectiveStatement>
         implements ImplicitParentAwareStatementSupport {
-    private static final @NonNull ChoiceStatementSupport RFC6020_INSTANCE = new ChoiceStatementSupport(
-        SubstatementValidator.builder(YangStmtMapping.CHOICE)
+    private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE)
             .addAny(YangStmtMapping.ANYXML)
             .addAny(YangStmtMapping.CASE)
             .addOptional(YangStmtMapping.CONFIG)
@@ -61,11 +63,9 @@ public final class ChoiceStatementSupport
             .addOptional(YangStmtMapping.REFERENCE)
             .addOptional(YangStmtMapping.STATUS)
             .addOptional(YangStmtMapping.WHEN)
-            .build(),
-        CaseStatementSupport.rfc6020Instance());
+            .build();
 
-    private static final @NonNull ChoiceStatementSupport RFC7950_INSTANCE = new ChoiceStatementSupport(
-        SubstatementValidator.builder(YangStmtMapping.CHOICE)
+    private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE)
             .addAny(YangStmtMapping.ANYDATA)
             .addAny(YangStmtMapping.ANYXML)
             .addAny(YangStmtMapping.CASE)
@@ -81,24 +81,26 @@ public final class ChoiceStatementSupport
             .addOptional(YangStmtMapping.REFERENCE)
             .addOptional(YangStmtMapping.STATUS)
             .addOptional(YangStmtMapping.WHEN)
-            .build(),
-        CaseStatementSupport.rfc7950Instance());
+            .build();
 
     private final SubstatementValidator validator;
     private final CaseStatementSupport implicitCase;
 
-    private ChoiceStatementSupport(final SubstatementValidator validator, final CaseStatementSupport implicitCase) {
-        super(YangStmtMapping.CHOICE, instantiatedPolicy());
+    private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator,
+            final CaseStatementSupport implicitCase) {
+        super(YangStmtMapping.CHOICE, instantiatedPolicy(), config);
         this.validator = requireNonNull(validator);
         this.implicitCase = requireNonNull(implicitCase);
     }
 
-    public static @NonNull ChoiceStatementSupport rfc6020Instance() {
-        return RFC6020_INSTANCE;
+    public static @NonNull ChoiceStatementSupport rfc6020Instance(final YangParserConfiguration config,
+            final CaseStatementSupport implicitCase) {
+        return new ChoiceStatementSupport(config, RFC6020_VALIDATOR, implicitCase);
     }
 
-    public static @NonNull ChoiceStatementSupport rfc7950Instance() {
-        return RFC7950_INSTANCE;
+    public static @NonNull ChoiceStatementSupport rfc7950Instance(final YangParserConfiguration config,
+            final CaseStatementSupport implicitCase) {
+        return new ChoiceStatementSupport(config, RFC7950_VALIDATOR, implicitCase);
     }
 
     @Override
@@ -118,6 +120,12 @@ public final class ChoiceStatementSupport
         return DeclaredStatements.createChoice(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected ChoiceStatement attachDeclarationReference(final ChoiceStatement stmt,
+            final DeclarationReference reference) {
+        return DeclaredStatementDecorators.decorateChoice(stmt, reference);
+    }
+
     @Override
     public ChoiceEffectiveStatement copyEffective(final Current<QName, ChoiceStatement> stmt,
             final ChoiceEffectiveStatement original) {