Rework undeclared statement definition
[yangtools.git] / parser / yang-parser-spi / src / main / java / org / opendaylight / yangtools / yang / parser / spi / meta / EffectiveStmtCtx.java
index 82ce9bcd4b8f4039d0f6e408d973af80721050ed..c98c9fa14dd90bb960238c34e6f0c0c0f98b5881 100644 (file)
@@ -17,9 +17,6 @@ import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 
@@ -99,56 +96,6 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
 
         // FIXME: 7.0.0: this is currently only used by AbstractTypeStatement
         @NonNull QNameModule effectiveNamespace();
-
-        /**
-         * Return the effective path of this statement. This method is intended for use with statements which naturally
-         * have a {@link QName} identifier and this identifier forms the ultimate step in their
-         * {@link SchemaNode#getPath()}.
-         *
-         * <p>
-         * Returned object conforms to {@link SchemaPathSupport}'s view of how these are to be handled. Users of this
-         * method are expected to consult {@link SchemaNodeDefaults#extractQName(Immutable)} and
-         * {@link SchemaNodeDefaults#extractPath(Object, Immutable)} to ensure correct implementation behaviour with
-         * respect to {@link SchemaNode#getQName()} and {@link SchemaNode#getPath()} respectively.
-         *
-         * @return An {@link Immutable} effective path object
-         */
-        // FIXME: Remove this when SchemaNode.getPath() is removed. QName users will store getArgument() instead.
-        default @NonNull Immutable effectivePath() {
-            return SchemaPathSupport.toEffectivePath(getSchemaPath());
-        }
-
-        /**
-         * Return an optional-to-provide path for {@link SchemaNode#getPath()}. The result of this method is expected
-         * to be consulted with {@link SchemaNodeDefaults#throwUnsupportedIfNull(Object, SchemaPath)} to get consistent
-         * API behaviour.
-         *
-         * @return Potentially-null {@link SchemaPath}.
-         */
-        // FIXME: Remove this when SchemaNode.getPath() is removed
-        default @Nullable SchemaPath optionalPath() {
-            return SchemaPathSupport.toOptionalPath(getSchemaPath());
-        }
-
-        /**
-         * Return the {@link SchemaNode#getPath()} of this statement. Not all statements have a SchemaPath, in which
-         * case null is returned.
-         *
-         * @return SchemaPath or null
-         */
-        // FIXME: Remove this when SchemaNode.getPath() is removed
-        @Nullable SchemaPath schemaPath();
-
-        /**
-         * Return the {@link SchemaNode#getPath()} of this statement, failing if it is not present.
-         *
-         * @return A SchemaPath.
-         * @throws VerifyException if {@link #schemaPath()} returns null
-         */
-        // FIXME: Remove this when SchemaNode.getPath() is removed
-        default @NonNull SchemaPath getSchemaPath() {
-            return verifyNotNull(schemaPath(), "Missing path for %s", this);
-        }
     }
 
     /**
@@ -163,13 +110,10 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
 
         @NonNull QName moduleName();
 
+        @Deprecated(since = "7.0.9", forRemoval = true)
         @Nullable EffectiveStatement<?, ?> original();
 
-        default <T> @Nullable T original(final @NonNull Class<T> type) {
-            return type.cast(original());
-        }
-
-        // FIXME: 7.0.0: this method should be moved to stmt.type in some shape or form
+        // FIXME: 8.0.0: this method should be moved to stmt.type in some shape or form
         @NonNull QName argumentAsTypeQName();
 
         /**
@@ -181,20 +125,26 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
         // FIXME: YANGTOOLS-1186: lob the Holy Hand Grenade of Antioch
         @Deprecated
         <E extends EffectiveStatement<A, D>> @NonNull StmtContext<A, D, E> caerbannog();
+    }
 
-        /**
-         * Compare another context for equality of {@code getEffectiveParent().getSchemaPath()}, just in a safer manner.
-         *
-         * @param other Other {@link Current}
-         * @return True if {@code other} has parent path equal to this context's parent path.
-         */
-        // FIXME: Remove this when SchemaNode.getPath() is removed
-        default boolean equalParentPath(final Current<A, D> other) {
-            final Parent ours = effectiveParent();
-            final Parent theirs = other.effectiveParent();
-            return ours == theirs
-                || ours != null && theirs != null && SchemaPathSupport.effectivelyEqual(
-                    ours.schemaPath(), theirs.schemaPath());
+    /**
+     * A restricted version of {@link Current}, which does not expose the raw argument or the declared statement.
+     *
+     * @param <A> Argument type
+     * @param <D> Class representing declared version of this statement
+     */
+    @Beta
+    interface UndeclaredCurrent<A, D extends DeclaredStatement<A>> extends Current<A, D> {
+        @Deprecated
+        @Override
+        default String rawArgument() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Deprecated
+        @Override
+        default D declared() {
+            throw new UnsupportedOperationException();
         }
     }
 }