Retain DeclarationReference in DeclaredStatements
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / submodule / SubmoduleStatementSupport.java
index 200554ea1c1e83aeb1bf69be2ec91459d736b950..d0728bfe247e3fdca9b82b4e01feb1f6c9fca0fc 100644 (file)
@@ -16,14 +16,17 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 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.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
+import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
 import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
@@ -40,7 +43,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 @Beta
 public final class SubmoduleStatementSupport
         extends AbstractStatementSupport<UnqualifiedQName, SubmoduleStatement, SubmoduleEffectiveStatement> {
-    private static final @NonNull SubmoduleStatementSupport RFC6020_INSTANCE = new SubmoduleStatementSupport(
+    private static final SubstatementValidator RFC6020_VALIDATOR =
         SubstatementValidator.builder(YangStmtMapping.SUBMODULE)
             .addAny(YangStmtMapping.ANYXML)
             .addAny(YangStmtMapping.AUGMENT)
@@ -67,8 +70,8 @@ public final class SubmoduleStatementSupport
             .addAny(YangStmtMapping.TYPEDEF)
             .addAny(YangStmtMapping.USES)
             .addOptional(YangStmtMapping.YANG_VERSION)
-            .build());
-    private static final @NonNull SubmoduleStatementSupport RFC7950_INSTANCE = new SubmoduleStatementSupport(
+            .build();
+    private static final SubstatementValidator RFC7950_VALIDATOR =
         SubstatementValidator.builder(YangStmtMapping.SUBMODULE)
             .addAny(YangStmtMapping.ANYDATA)
             .addAny(YangStmtMapping.ANYXML)
@@ -96,21 +99,21 @@ public final class SubmoduleStatementSupport
             .addAny(YangStmtMapping.TYPEDEF)
             .addAny(YangStmtMapping.USES)
             .addOptional(YangStmtMapping.YANG_VERSION)
-            .build());
+            .build();
 
     private final SubstatementValidator validator;
 
-    private SubmoduleStatementSupport(final SubstatementValidator validator) {
-        super(YangStmtMapping.SUBMODULE, StatementPolicy.reject());
+    private SubmoduleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
+        super(YangStmtMapping.SUBMODULE, StatementPolicy.reject(), config);
         this.validator = requireNonNull(validator);
     }
 
-    public static @NonNull SubmoduleStatementSupport rfc6020Instance() {
-        return RFC6020_INSTANCE;
+    public static @NonNull SubmoduleStatementSupport rfc6020Instance(final YangParserConfiguration config) {
+        return new SubmoduleStatementSupport(config, RFC6020_VALIDATOR);
     }
 
-    public static @NonNull SubmoduleStatementSupport rfc7950Instance() {
-        return RFC7950_INSTANCE;
+    public static @NonNull SubmoduleStatementSupport rfc7950Instance(final YangParserConfiguration config) {
+        return new SubmoduleStatementSupport(config, RFC7950_VALIDATOR);
     }
 
     @Override
@@ -167,6 +170,12 @@ public final class SubmoduleStatementSupport
         return DeclaredStatements.createSubmodule(ctx.getRawArgument(), ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected SubmoduleStatement attachDeclarationReference(final SubmoduleStatement stmt,
+            final DeclarationReference reference) {
+        return DeclaredStatementDecorators.decorateSubmodule(stmt, reference);
+    }
+
     @Override
     protected SubmoduleEffectiveStatement createEffective(final Current<UnqualifiedQName, SubmoduleStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {