X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fspi%2Fmeta%2FAbstractStatementSupport.java;fp=yang%2Fyang-parser-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fspi%2Fmeta%2FAbstractStatementSupport.java;h=8c4770ecd643b79cebb622d42bea5915dd0dbfe0;hb=d605800fa3da3ea340497c683bd83ea37c12da6c;hp=2ab22dde41b06cfba49714e2b5572ef12b554753;hpb=306e07d63da1d140511c4ab3adf64eb765b1671a;p=yangtools.git
diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java
index 2ab22dde41..8c4770ecd6 100644
--- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java
+++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java
@@ -18,9 +18,11 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+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;
+import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
/**
@@ -34,20 +36,44 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@Beta
public abstract class AbstractStatementSupport,
E extends EffectiveStatement> extends StatementSupport {
- protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy policy) {
+ private final boolean retainDeclarationReference;
+
+ protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy policy,
+ final YangParserConfiguration config) {
super(publicDefinition, policy);
+ this.retainDeclarationReference = config.retainDeclarationReferences();
}
@Override
public final D createDeclared(final StmtContext ctx) {
- return createDeclared(ctx, ctx.declaredSubstatements().stream()
+ final D stmt = createDeclared(ctx, ctx.declaredSubstatements().stream()
.map(StmtContext::declared)
.collect(ImmutableList.toImmutableList()));
+ return retainDeclarationReference ? attachDeclarationReference(stmt, ctx) : stmt;
}
protected abstract @NonNull D createDeclared(@NonNull StmtContext ctx,
@NonNull ImmutableList extends DeclaredStatement>> substatements);
+ private @NonNull D attachDeclarationReference(final @NonNull D stmt, final @NonNull StmtContext ctx) {
+ final DeclarationReference ref = ctx.sourceReference().declarationReference();
+ return ref == null ? stmt : attachDeclarationReference(stmt, ref);
+ }
+
+ /**
+ * Attach specified {@link DeclarationReference} to a baseline declared statement. If an implementation does not
+ * support attaching DeclarationReferences, it should return the statement unchanged.
+ *
+ * @param stmt Declared statement
+ * @param reference {@link DeclarationReference} to attach
+ * @return Equivalent of stmt, potentially with specified reference attached.
+ */
+ // FIXME: make this method abstract
+ protected @NonNull D attachDeclarationReference(final @NonNull D stmt,
+ final @NonNull DeclarationReference reference) {
+ return stmt;
+ }
+
@Override
public final E createEffective(final Current stmt,
final Stream extends StmtContext, ?, ?>> declaredSubstatements,