From d208510f59ad18766597a3340fd0c6844a639457 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 26 Mar 2019 12:56:56 +0100 Subject: [PATCH] Address FIXMEs in StatementStreamSource We are promoting YangVersion-bearing methods to full contract, remove the FIXMEs we have had and place a new one for 4.0.0. Change-Id: I1d02fe5266d17c16b17acb93d78d4579ff43126a Signed-off-by: Robert Varga --- .../repo/YangStatementStreamSource.java | 18 ---- .../repo/YinStatementStreamSource.java | 7 +- .../spi/source/StatementStreamSource.java | 94 +++---------------- 3 files changed, 19 insertions(+), 100 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java index a40a01f276..29d0e7e4f9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java @@ -121,12 +121,6 @@ public final class YangStatementStreamSource implements StatementStreamSource { new StatementContextVisitor(sourceName, writer, stmtDef, null, YangVersion.VERSION_1).visit(context); } - @Override - public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule preLinkagePrefixes) { - writeLinkage(writer, stmtDef, preLinkagePrefixes, YangVersion.VERSION_1); - } - @Override public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) { @@ -138,24 +132,12 @@ public final class YangStatementStreamSource implements StatementStreamSource { }.visit(context); } - @Override - public void writeLinkageAndStatementDefinitions(final StatementWriter writer, - final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) { - writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes, YangVersion.VERSION_1); - } - @Override public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { new StatementContextVisitor(sourceName, writer, stmtDef, prefixes, yangVersion).visit(context); } - @Override - public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule prefixes) { - writeFull(writer, stmtDef, prefixes, YangVersion.VERSION_1); - } - @Override public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java index 62f9b38b5d..9e2529ae5c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java @@ -21,6 +21,7 @@ import java.net.URISyntaxException; import java.util.Optional; import javax.xml.transform.TransformerException; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -240,19 +241,19 @@ public final class YinStatementStreamSource implements StatementStreamSource { @Override public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule preLinkagePrefixes) { + final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) { walkTree(writer, stmtDef); } @Override public void writeLinkageAndStatementDefinitions(final StatementWriter writer, - final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) { + final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { walkTree(writer, stmtDef); } @Override public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule prefixes) { + final PrefixToModule prefixes, final YangVersion yangVersion) { walkTree(writer, stmtDef); } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java index 1e0bd2db06..91a3f555fe 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java @@ -15,13 +15,11 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; * Statement stream source, which is used for inference of effective model. * *

- * Statement stream source is required to emit its statements using supplied - * {@link StatementWriter}. + * Statement stream source is required to emit its statements using supplied {@link StatementWriter}. * *

- * Since YANG allows language extensions defined in sources (which defines how - * source is serialized), instances of extensions present anywhere and forward - * references, each source needs to be processed in three steps, where each step + * Since YANG allows language extensions defined in sources (which defines how source is serialized), instances of + * extensions present anywhere and forward references, each source needs to be processed in three steps, where each step * uses different set of supported statements. * *

@@ -34,25 +32,27 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; * It is necessary in order to correct resolution of unknown statements used by linkage * phase (e.g. semantic version of yang modules). * - *

  • {@link #writeLinkage(StatementWriter, QNameToStatementDefinition, PrefixToModule)} - + *
  • {@link #writeLinkage(StatementWriter, QNameToStatementDefinition, PrefixToModule, YangVersion)} - * Source MUST emit only statements related in linkage, which are present in * supplied statement definition map. This step is used to build cross-source * linkage and visibility relationship, and to determine XMl namespaces and * prefixes.
  • *
  • - * {@link #writeLinkageAndStatementDefinitions(StatementWriter, QNameToStatementDefinition, PrefixToModule)} + * {@link #writeLinkageAndStatementDefinitions(StatementWriter, QNameToStatementDefinition, PrefixToModule, + * YangVersion)} * - Source MUST emit only statements related to linkage and language extensions * definitions, which are present in supplied statement definition map. This * step is used to build statement definitions in order to fully processed * source.
  • *
  • - * {@link #writeFull(StatementWriter, QNameToStatementDefinition, PrefixToModule)} + * {@link #writeFull(StatementWriter, QNameToStatementDefinition, PrefixToModule, YangVersion)} * - Source MUST emit all statements present in source. This step is used to * build full declared statement model of source.
  • * */ +// FIXME: 4.0.0: this is a push parser, essentially traversing the same tree multiple times. Perhaps we should create +// a visitor/filter or perform some explicit argument binding? public interface StatementStreamSource extends Identifiable { - /** * Emits only pre-linkage-related statements to supplied {@code writer}. * @@ -69,25 +69,6 @@ public interface StatementStreamSource extends Identifiable { */ void writePreLinkage(StatementWriter writer, QNameToStatementDefinition stmtDef); - /** - * Emits only linkage-related statements to supplied {@code writer}. - * - * @param writer - * {@link StatementWriter} which should be used to emit - * statements. - * @param stmtDef - * Map of available statement definitions. Only these statements - * may be written to statement writer, source MUST ignore and MUST NOT - * emit any other statements. - * @param preLinkagePrefixes - * Pre-linkage map of source-specific prefixes to namespaces - * @throws SourceException - * If source was is not valid, or provided statement writer - * failed to write statements. - */ - // FIXME: 3.0.0: remove this method or make it default - void writeLinkage(StatementWriter writer, QNameToStatementDefinition stmtDef, PrefixToModule preLinkagePrefixes); - /** * Emits only linkage-related statements to supplied {@code writer} based on specified YANG version. * Default implementation does not make any differences between versions. @@ -107,30 +88,8 @@ public interface StatementStreamSource extends Identifiable { * If source was is not valid, or provided statement writer * failed to write statements. */ - // FIXME: 3.0.0: make this method non-default - default void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) { - writeLinkage(writer, stmtDef, preLinkagePrefixes); - } - - /** - * Emits only linkage and language extension statements to supplied {@code writer}. - * - * @param writer - * {@link StatementWriter} which should be used to emit statements. - * @param stmtDef - * Map of available statement definitions. Only these statements - * may be written to statement writer, source MUST ignore and MUST NOT - * emit any other statements. - * @param prefixes - * Map of source-specific prefixes to namespaces - * @throws SourceException - * If source was is not valid, or provided statement writer - * failed to write statements. - */ - // FIXME: 3.0.0: remove this method or make it default - void writeLinkageAndStatementDefinitions(StatementWriter writer, QNameToStatementDefinition stmtDef, - PrefixToModule prefixes); + void writeLinkage(StatementWriter writer, QNameToStatementDefinition stmtDef, PrefixToModule preLinkagePrefixes, + YangVersion yangVersion); /** * Emits only linkage and language extension statements to supplied @@ -153,28 +112,8 @@ public interface StatementStreamSource extends Identifiable { * If source was is not valid, or provided statement writer * failed to write statements. */ - // FIXME: 3.0.0: make this method non-default - default void writeLinkageAndStatementDefinitions(final StatementWriter writer, - final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { - writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes); - } - - /** - * Emits every statements present in this statement source to supplied {@code writer}. - * - * @param writer - * {@link StatementWriter} which should be used to emit - * statements. - * @param stmtDef - * Map of available statement definitions. - * @param prefixes - * Map of source-specific prefixes to namespaces - * @throws SourceException - * If source was is not valid, or provided statement writer - * failed to write statements. - */ - // FIXME: 3.0.0: remove this method or make it default - void writeFull(StatementWriter writer,QNameToStatementDefinition stmtDef, PrefixToModule prefixes); + void writeLinkageAndStatementDefinitions(StatementWriter writer, QNameToStatementDefinition stmtDef, + PrefixToModule prefixes, YangVersion yangVersion); /** * Emits every statements present in this statement source to supplied @@ -194,9 +133,6 @@ public interface StatementStreamSource extends Identifiable { * If source was is not valid, or provided statement writer * failed to write statements. */ - // FIXME: 3.0.0: make this method non-default - default void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, - final PrefixToModule prefixes, final YangVersion yangVersion) { - writeFull(writer, stmtDef, prefixes); - } + void writeFull(StatementWriter writer, QNameToStatementDefinition stmtDef, PrefixToModule prefixes, + YangVersion yangVersion); } -- 2.36.6