Address FIXMEs in StatementStreamSource 77/81177/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 26 Mar 2019 11:56:56 +0000 (12:56 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 26 Mar 2019 12:57:17 +0000 (13:57 +0100)
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 <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java

index a40a01f2761b64f8e2f29ef080d84028b9589f12..29d0e7e4f9e26cb880c837aba6ab45b55567f017 100644 (file)
@@ -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) {
index 62f9b38b5d03bc2e2c572c2218ee57bdeab09933..9e2529ae5c7fd0483c768edb3c1185615a653267 100644 (file)
@@ -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);
     }
 
index 1e0bd2db06853ccb3a902fe3284d635df67c63cf..91a3f555fed634f718bbca3915ec96fb40bc303b 100644 (file)
@@ -15,13 +15,11 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
  * Statement stream source, which is used for inference of effective model.
  *
  * <p>
- * 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}.
  *
  * <p>
- * 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.
  *
  * <p>
@@ -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).
  * </li>
- * <li>{@link #writeLinkage(StatementWriter, QNameToStatementDefinition, PrefixToModule)} -
+ * <li>{@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.</li>
  * <li>
- * {@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.</li>
  * <li>
- * {@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.</li>
  * </ol>
  */
+// 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<SourceIdentifier> {
-
     /**
      * Emits only pre-linkage-related statements to supplied {@code writer}.
      *
@@ -69,25 +69,6 @@ public interface StatementStreamSource extends Identifiable<SourceIdentifier> {
      */
     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<SourceIdentifier> {
      *             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<SourceIdentifier> {
      *             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<SourceIdentifier> {
      *             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);
 }