Update SchemaPath.getPath() implementation 07/94907/5
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 30 Jan 2021 22:13:50 +0000 (23:13 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 31 Jan 2021 07:38:08 +0000 (08:38 +0100)
SchemaNode implementations are using SchemaPath to hold their QName
as well, hence we cannot just ditch it. Update the wrapping mechanism
to support dual QName/SchemaPath storage.

JIRA: YANGTOOLS-1071
Change-Id: Ide9a6957571ea5933dfb21e4aa4d97e0c9919291
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
73 files changed:
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidEffectiveStatementImpl.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdEffectiveStatementImpl.java
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/RegularAnydataEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/RegularAnyxmlEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/UndeclaredCaseEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/EmptyFeatureEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/RegularFeatureEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/EmptyIdentityEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/RegularIdentityEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/AbstractLeafEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/EmptyLeafEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/RegularLeafEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractNonEmptyLeafListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/SlimLeafListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java

index 1f05fde9cdd25b3ee0a21fa536ce25f83f41958f..4b5c1ae4ed8041e5fd7b16adcde00eda147969df 100644 (file)
@@ -31,7 +31,7 @@ public final class AnyxmlSchemaLocationEffectiveStatementImpl
             final Current<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 9e5e40876c71aeb56c5510f45d26650742c37bd0..ca8d0f17aaf38f21e80bbbedd22959c4ca6c3fed 100644 (file)
@@ -14,7 +14,6 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
 import org.opendaylight.yangtools.yang.common.QName;
-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;
@@ -49,25 +48,25 @@ abstract class AbstractHashedValueStatementSupport
             extends UnknownEffectiveStatementBase<Void, OpenConfigHashedValueStatement>
             implements OpenConfigHashedValueEffectiveStatement {
         private final @NonNull StatementDefinition definition;
-        private final SchemaPath path;
+        private final @NonNull Object path;
 
         Effective(final Current<Void, OpenConfigHashedValueStatement> stmt,
                 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             super(stmt, substatements);
             definition = stmt.publicDefinition();
-            path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
+            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
                     .createChild(stmt.publicDefinition().getStatementName()));
         }
 
         @Override
         public QName getQName() {
-            return path.getLastComponent();
+            return SchemaPathSupport.extractQName(path);
         }
 
         @Override
         @Deprecated
         public SchemaPath getPath() {
-            return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+            return SchemaPathSupport.extractPath(this, path);
         }
 
         @Override
index e769035e28fd9ff911070f334a834bbd0e1af410..2e403bd7f69e3b80f2758fa7a9b7378749e71c43 100644 (file)
@@ -10,13 +10,11 @@ package org.opendaylight.yangtools.rfc6241.parser;
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement;
 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesSchemaNode;
 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
 import org.opendaylight.yangtools.rfc6241.model.api.NetconfStatements;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -48,24 +46,24 @@ public final class GetFilterElementAttributesStatementSupport extends AbstractVo
     private static final class Effective
             extends UnknownEffectiveStatementBase<Void, GetFilterElementAttributesStatement>
             implements GetFilterElementAttributesEffectiveStatement, GetFilterElementAttributesSchemaNode {
-        private final @Nullable SchemaPath path;
+        private final @NonNull Object path;
 
         Effective(final Current<Void, GetFilterElementAttributesStatement> stmt,
                 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             super(stmt, substatements);
-            path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
+            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
                     .createChild(stmt.publicDefinition().getStatementName()));
         }
 
         @Override
         public QName getQName() {
-            return path.getLastComponent();
+            return SchemaPathSupport.extractQName(path);
         }
 
         @Override
         @Deprecated
         public SchemaPath getPath() {
-            return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+            return SchemaPathSupport.extractPath(this, path);
         }
 
         @Override
index 738f6e3d48cb04f69c581c96383d7f985d862dc3..d46f33d7a20c41707fdb1e838a28bfcfb016c574 100644 (file)
@@ -9,13 +9,11 @@ package org.opendaylight.yangtools.rfc6536.parser;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllEffectiveStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllSchemaNode;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
 import org.opendaylight.yangtools.yang.common.QName;
-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;
@@ -40,24 +38,24 @@ public final class DefaultDenyAllStatementSupport
 
     private static final class Effective extends UnknownEffectiveStatementBase<Void, DefaultDenyAllStatement>
             implements DefaultDenyAllEffectiveStatement, DefaultDenyAllSchemaNode {
-        private final @Nullable SchemaPath path;
+        private final @NonNull Object path;
 
         Effective(final Current<Void, DefaultDenyAllStatement> stmt,
                 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             super(stmt, substatements);
-            path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
+            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
                     .createChild(stmt.publicDefinition().getStatementName()));
         }
 
         @Override
         public QName getQName() {
-            return path.getLastComponent();
+            return SchemaPathSupport.extractQName(path);
         }
 
         @Override
         @Deprecated
         public SchemaPath getPath() {
-            return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+            return SchemaPathSupport.extractPath(this, path);
         }
 
         @Override
index a15be8e7415dd9f781245c3942a5ff5ed628eebe..7c580b01951e3d5ffcd076505e6990683f31e252 100644 (file)
@@ -9,13 +9,11 @@ package org.opendaylight.yangtools.rfc6536.parser;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
 import org.opendaylight.yangtools.yang.common.QName;
-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;
@@ -40,24 +38,24 @@ public final class DefaultDenyWriteStatementSupport
 
     private static final class Effective extends UnknownEffectiveStatementBase<Void, DefaultDenyWriteStatement>
             implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode {
-        private final @Nullable SchemaPath path;
+        private final @NonNull Object path;
 
         Effective(final Current<Void, DefaultDenyWriteStatement> stmt,
                 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
             super(stmt, substatements);
-            path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
+            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
                     .createChild(stmt.publicDefinition().getStatementName()));
         }
 
         @Override
         public QName getQName() {
-            return path.getLastComponent();
+            return SchemaPathSupport.extractQName(path);
         }
 
         @Override
         @Deprecated
         public SchemaPath getPath() {
-            return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+            return SchemaPathSupport.extractPath(this, path);
         }
 
         @Override
index 8cfb6506f4070896b643c89b3d7ecc8d946ead9e..2a7b56cd4ef48f4d0445fbf9456a7b8e5c5c3427 100644 (file)
@@ -27,7 +27,7 @@ final class AliasEffectiveStatementImpl extends UnknownEffectiveStatementBase<St
     AliasEffectiveStatementImpl(final Current<String, AliasStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 61f580ad101ec1fb22a0b3ef70d1023278c9ffea..2f2ca9f8b285dc82e38f96ba62f5d719b74bc885 100644 (file)
@@ -27,7 +27,7 @@ final class DefValEffectiveStatementImpl extends UnknownEffectiveStatementBase<S
     DefValEffectiveStatementImpl(final Current<String, DefValStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 061ae83cc8c0e598208302d22b8bbd342d4a0291..cb836ce2e50b266bea8047f106f861c86609b2eb 100644 (file)
@@ -27,7 +27,7 @@ final class DisplayHintEffectiveStatementImpl extends UnknownEffectiveStatementB
     DisplayHintEffectiveStatementImpl(final Current<String, DisplayHintStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index d0057f847e2a990bdb37b62c844b7fa1ae2ac081..22a014095057cf20a4b27987544e61207735a52d 100644 (file)
@@ -28,7 +28,7 @@ final class ImpliedEffectiveStatementImpl extends UnknownEffectiveStatementBase<
     ImpliedEffectiveStatementImpl(final Current<String, ImpliedStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index c8c9b6eb05ac367347e9a7001a9eee44fa279ad4..1abda1d33ec58bde10458a85517d1f7db379e351 100644 (file)
@@ -28,7 +28,7 @@ final class MaxAccessEffectiveStatementImpl extends UnknownEffectiveStatementBas
     MaxAccessEffectiveStatementImpl(final Current<MaxAccess, MaxAccessStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index f7504201703b68c1203f8cfaebd0416a0b9ef0e6..8df7a5cc1017d8c325a0692a92cd0ea814e4c437 100644 (file)
@@ -29,7 +29,7 @@ final class OidEffectiveStatementImpl extends UnknownEffectiveStatementBase<Obje
     OidEffectiveStatementImpl(final Current<ObjectIdentifier, OidStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 7384cceb11ae99d3233d009d2749fa9b3e85dd0a..803975707e3678873a43d21e540019dbea344d1c 100644 (file)
@@ -29,7 +29,7 @@ final class SubIdEffectiveStatementImpl extends UnknownEffectiveStatementBase<Ui
     SubIdEffectiveStatementImpl(final Current<Uint32, SubIdStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 2191b185616bd07f8cf62398360fd87f4e98f9c5..37139d153488676d989998312c5ebd217ba1b4e4 100644 (file)
@@ -72,7 +72,7 @@ public final class AnnotationStatementSupport
             }
             type = builder.build();
 
-            path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
+            path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
         }
 
         @Override
index c12019d474bb03444cb0e0597c661cd115ddac44..1898e738d1f72fe5bda58572a2aef95b023f84e3 100644 (file)
@@ -41,7 +41,7 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
         super(stmt, substatements);
         this.argumentQName = requireNonNull(qname);
 
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
         container = findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).get();
 
         // TODO: this is strong binding of two API contracts. Unfortunately ContainerEffectiveStatement design is
index f74595e301de2dbfd76c4e213bd163d8f9aa1eb4..e9474a570f21568488b2f96ba3bc01d705b7d5e7 100644 (file)
@@ -104,7 +104,7 @@ public final class MountPointStatementSupport
     @Override
     protected MountPointEffectiveStatement createEffective(final Current<QName, MountPointStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new MountPointEffectiveStatementImpl(stmt, substatements,
-            SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(stmt.getArgument())));
+        return new MountPointEffectiveStatementImpl(stmt, substatements, SchemaPathSupport.toOptionalPath(
+            stmt.getEffectiveParent().getSchemaPath().createChild(stmt.getArgument())));
     }
 }
index 0c49c07e33dcdfe1e29ad18873e27192bfc65b11..d6a60f90918fd7d553fe346af84773167e89b8df 100644 (file)
@@ -29,7 +29,7 @@ final class OpenConfigVersionEffectiveStatementImpl
     OpenConfigVersionEffectiveStatementImpl(final Current<SemVer, OpenConfigVersionStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
index 9182b2bb8f634ee86d19386f9b5c88f656ea6db9..8d50ddae3e43004b31296ded3e4c6662e90e0dc3 100644 (file)
@@ -41,6 +41,7 @@ import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
@@ -60,6 +61,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
 
 /**
@@ -314,10 +316,19 @@ public final class EffectiveStatementMixins {
      */
     public interface SchemaNodeMixin<A, D extends DeclaredStatement<A>>
             extends DocumentedNodeMixin.WithStatus<A, D>, SchemaNode {
+        // FIXME: ditch all this complexity once we do not require SchemaPath
         @Override
         default QName getQName() {
-            return getPath().getLastComponent();
+            return SchemaPathSupport.extractQName(pathObject());
         }
+
+        @Override
+        @Deprecated
+        default SchemaPath getPath() {
+            return SchemaPathSupport.extractPath(this, pathObject());
+        }
+
+        @NonNull Object pathObject();
     }
 
     /**
index ddc44ad380773f0b4cf3062c259ea267ae405e81..1c19a66f31b2f34873aa2e07ea078273299aafea 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
@@ -23,26 +23,25 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 final class ActionEffectiveStatementImpl extends WithSubstatements<QName, ActionStatement, ActionEffectiveStatement>
         implements ActionDefinition, ActionEffectiveStatement, OperationDefinitionMixin<ActionStatement>,
                    CopyableMixin<QName, ActionStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    ActionEffectiveStatementImpl(final ActionStatement declared, final SchemaPath path, final int flags,
+    ActionEffectiveStatementImpl(final ActionStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
-    ActionEffectiveStatementImpl(final ActionEffectiveStatementImpl original, final SchemaPath path, final int flags) {
+    ActionEffectiveStatementImpl(final ActionEffectiveStatementImpl original, final Object path, final int flags) {
         super(original);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 7a661f2fd40479e0d03e3b2241526aed6f3d29c1..007de6955a9d04736591e8423bb71e50377a2e8c 100644 (file)
@@ -113,7 +113,7 @@ public final class ActionStatementSupport extends
         verify(!substatements.isEmpty(), "Missing implicit input/output statements at %s", ref);
 
         try {
-            return new ActionEffectiveStatementImpl(stmt.declared(), stmt.wrapSchemaPath(),
+            return new ActionEffectiveStatementImpl(stmt.declared(), stmt.effectivePath(),
                 EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), substatements);
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
@@ -123,7 +123,7 @@ public final class ActionStatementSupport extends
     @Override
     public ActionEffectiveStatement copyEffective(final Current<QName, ActionStatement> stmt,
             final ActionEffectiveStatement original) {
-        return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, stmt.wrapSchemaPath(),
+        return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, stmt.effectivePath(),
             EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
     }
 }
index bdd10079a412f8eb512d426fdfbb0b2d738991c8..30c4bdd3b6fd53e4c608df1280584994420d9d6a 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -74,7 +73,7 @@ public final class AnydataStatementSupport
             .setConfiguration(stmt.effectiveConfig().asNullable())
             .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE))
             .toFlags();
-        final SchemaPath path = stmt.wrapSchemaPath();
+        final Object path = stmt.effectivePath();
 
         return substatements.isEmpty()
             ? new EmptyAnydataEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt))
index 108213e7b61b36b5a4e6eb87cdeeeec9f23846c1..a2475f49ada66c1e71c897c2cf57f8722c1d008d 100644 (file)
@@ -7,14 +7,15 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.MoreObjects;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.Default;
@@ -22,22 +23,21 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyAnydataEffectiveStatement extends Default<QName, AnydataStatement>
         implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin<AnydataStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final AnydataSchemaNode original;
     private final int flags;
 
-    EmptyAnydataEffectiveStatement(final AnydataStatement declared, final SchemaPath path, final int flags,
+    EmptyAnydataEffectiveStatement(final AnydataStatement declared, final Object path, final int flags,
             final @Nullable AnydataSchemaNode original) {
         super(declared);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.original = original;
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index cac8eae299546f4b0334896f67b33879a520783b..372863a8b5131b4f7f9263ab69b78e78ba2541ef 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
 
@@ -21,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
 final class RegularAnydataEffectiveStatement extends EmptyAnydataEffectiveStatement {
     private final @NonNull Object substatements;
 
-    RegularAnydataEffectiveStatement(final AnydataStatement declared, final SchemaPath path, final int flags,
+    RegularAnydataEffectiveStatement(final AnydataStatement declared, final Object path, final int flags,
             final @Nullable AnydataSchemaNode original,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, path, flags, original);
index efd28e110821de1248e2375d830b33a186ea1c69..99674c5e5fd6204ff198f997af5ab4f795128708 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -74,11 +73,11 @@ public final class AnyxmlStatementSupport
             .setConfiguration(stmt.effectiveConfig().asNullable())
             .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE))
             .toFlags();
-        final SchemaPath path = stmt.wrapSchemaPath();
+        final Object path = stmt.effectivePath();
 
         return substatements.isEmpty()
             ? new EmptyAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt))
-                : new RegularAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt),substatements);
+                : new RegularAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt), substatements);
     }
 
     private static @Nullable AnyxmlSchemaNode findOriginal(final Current<?, ?> stmt) {
index 6d1a46f34066e12c5231defa3b01691982b7ea6a..a9d2334f00d5c9dcc4613f8872a0b4f36c21580f 100644 (file)
@@ -7,13 +7,14 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.MoreObjects;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.Default;
@@ -21,22 +22,21 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyAnyxmlEffectiveStatement extends Default<QName, AnyxmlStatement>
         implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin<AnyxmlStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final AnyxmlSchemaNode original;
     private final int flags;
 
-    EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final SchemaPath path, final int flags,
+    EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Object path, final int flags,
             final @Nullable AnyxmlSchemaNode original) {
         super(declared);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.original = original;
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index de7bf2589982f7c0ffc61d7b0f305324cbbf81fe..7c5fe70030d39ea2a255603f5b9628dd1bcadeaf 100644 (file)
@@ -11,14 +11,13 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
 
 final class RegularAnyxmlEffectiveStatement extends EmptyAnyxmlEffectiveStatement {
     private final @NonNull Object substatements;
 
-    RegularAnyxmlEffectiveStatement(final AnyxmlStatement declared, final SchemaPath path, final int flags,
+    RegularAnyxmlEffectiveStatement(final AnyxmlStatement declared, final Object path, final int flags,
             final @Nullable AnyxmlSchemaNode original,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, path, flags, original);
index ee2b0ae29377ae6556c9d93121ec26432dd2f8f1..53ab6c75a8d59cf93b9fa119729e97664974fc3d 100644 (file)
@@ -121,23 +121,23 @@ public final class CaseStatementSupport
     @Override
     protected CaseEffectiveStatement copyDeclaredEffective(final Current<QName, CaseStatement> stmt,
             final CaseEffectiveStatement original) {
-        return new DeclaredCaseEffectiveStatement((DeclaredCaseEffectiveStatement) original,
-            computeFlags(stmt, original.effectiveSubstatements()), stmt.wrapSchemaPath(), findOriginal(stmt));
+        return new DeclaredCaseEffectiveStatement((DeclaredCaseEffectiveStatement) original, stmt.effectivePath(),
+            computeFlags(stmt, original.effectiveSubstatements()), findOriginal(stmt));
     }
 
     @Override
     protected CaseEffectiveStatement copyUndeclaredEffective(final Current<QName, CaseStatement> stmt,
             final CaseEffectiveStatement original) {
-        return new UndeclaredCaseEffectiveStatement((UndeclaredCaseEffectiveStatement) original,
-            computeFlags(stmt, original.effectiveSubstatements()), stmt.wrapSchemaPath(), findOriginal(stmt));
+        return new UndeclaredCaseEffectiveStatement((UndeclaredCaseEffectiveStatement) original, stmt.effectivePath(),
+            computeFlags(stmt, original.effectiveSubstatements()),findOriginal(stmt));
     }
 
     @Override
     protected CaseEffectiveStatement createDeclaredEffective(final Current<QName, CaseStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, computeFlags(stmt, substatements),
-                stmt.wrapSchemaPath(), findOriginal(stmt));
+            return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, stmt.effectivePath(),
+                computeFlags(stmt, substatements), findOriginal(stmt));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
@@ -147,8 +147,8 @@ public final class CaseStatementSupport
     protected CaseEffectiveStatement createUndeclaredEffective(final Current<QName, CaseStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new UndeclaredCaseEffectiveStatement(substatements, computeFlags(stmt, substatements),
-                stmt.wrapSchemaPath(), findOriginal(stmt));
+            return new UndeclaredCaseEffectiveStatement(substatements, stmt.effectivePath(),
+                computeFlags(stmt, substatements), findOriginal(stmt));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index 4976a38dae37c9a02e01fb4106d7ff1b2d776ac8..d0935134db351aabc8e9818afb3c8092aaa4b611 100644 (file)
@@ -7,14 +7,15 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
@@ -23,23 +24,23 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffec
 final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, CaseStatement, CaseEffectiveStatement>
         implements CaseEffectiveStatementMixin {
     private final CaseSchemaNode original;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     DeclaredCaseEffectiveStatement(final CaseStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
-            final SchemaPath path, final @Nullable CaseSchemaNode original) {
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags,
+            final @Nullable CaseSchemaNode original) {
         super(declared, substatements);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
         this.original = original;
     }
 
-    DeclaredCaseEffectiveStatement(final DeclaredCaseEffectiveStatement origEffective, final int flags,
-            final SchemaPath path, final @Nullable CaseSchemaNode original) {
+    DeclaredCaseEffectiveStatement(final DeclaredCaseEffectiveStatement origEffective, final Object path,
+            final int flags, final @Nullable CaseSchemaNode original) {
         super(origEffective);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
         this.original = original;
     }
 
@@ -49,9 +50,8 @@ final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, Case
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index d9ab1a93f3d2bf397999cc47217fe355178733e0..0361e5262fbbebde2cf90ef24f46dea8c7dffd3f 100644 (file)
@@ -7,14 +7,15 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
@@ -23,21 +24,21 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEff
 final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, CaseStatement, CaseEffectiveStatement>
         implements CaseEffectiveStatementMixin {
     private final @Nullable CaseSchemaNode original;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     UndeclaredCaseEffectiveStatement(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-            final int flags, final SchemaPath path, final @Nullable CaseSchemaNode original) {
+            final Object path, final int flags, final @Nullable CaseSchemaNode original) {
         super(substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.original = original;
     }
 
-    UndeclaredCaseEffectiveStatement(final UndeclaredCaseEffectiveStatement origEffective, final int flags,
-            final SchemaPath path, final @Nullable CaseSchemaNode original) {
+    UndeclaredCaseEffectiveStatement(final UndeclaredCaseEffectiveStatement origEffective, final Object path,
+            final int flags, final @Nullable CaseSchemaNode original) {
         super(origEffective);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.original = original;
     }
@@ -48,9 +49,8 @@ final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, Ca
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index a7f437f3fbd5ba2ceacc6db1f73dec3dadaa0ccc..17246ace07a687b433c8258ccc0db1a3ec52653d 100644 (file)
@@ -18,8 +18,6 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
@@ -35,24 +33,24 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
                    MandatoryMixin<QName, ChoiceStatement> {
     private final CaseSchemaNode defaultCase;
     private final ChoiceSchemaNode original;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     ChoiceEffectiveStatementImpl(final ChoiceStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
-            final SchemaPath path, final @Nullable CaseSchemaNode defaultCase,
+            final Object path, final @Nullable CaseSchemaNode defaultCase,
             final @Nullable ChoiceSchemaNode original) {
         super(declared, substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.defaultCase = defaultCase;
         this.original = original;
     }
 
     ChoiceEffectiveStatementImpl(final ChoiceEffectiveStatementImpl origEffective, final int flags,
-            final SchemaPath path, final ChoiceSchemaNode original) {
+            final Object path, final ChoiceSchemaNode original) {
         super(origEffective);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.defaultCase = origEffective.defaultCase;
         this.original = original;
@@ -64,9 +62,8 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 6258a056922d795c3d56e719f12c79e9f3927d08..70570f0baa9062055fbbd8e8dfb12402eaeb6a8c 100644 (file)
@@ -126,7 +126,7 @@ public final class ChoiceStatementSupport
     public ChoiceEffectiveStatement copyEffective(final Current<QName, ChoiceStatement> stmt,
             final ChoiceEffectiveStatement original) {
         return new ChoiceEffectiveStatementImpl((ChoiceEffectiveStatementImpl) original,
-            computeFlags(stmt, original.effectiveSubstatements()), stmt.wrapSchemaPath(),
+            computeFlags(stmt, original.effectiveSubstatements()), stmt.effectivePath(),
             (ChoiceSchemaNode) stmt.original());
     }
 
@@ -152,7 +152,7 @@ public final class ChoiceStatementSupport
 
         try {
             return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, computeFlags(stmt, substatements),
-                stmt.wrapSchemaPath(), defaultCase, (ChoiceSchemaNode) stmt.original());
+                stmt.effectivePath(), defaultCase, (ChoiceSchemaNode) stmt.original());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index b3b2aee641a291248d14eebdd028db4ca6821be4..c891bfc3e1c39c81fcfe4aa1e5ea09529dbd537d 100644 (file)
@@ -7,15 +7,16 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
@@ -42,24 +43,24 @@ final class ContainerEffectiveStatementImpl
             AugmentationTargetMixin<QName, ContainerStatement> {
 
     private final int flags;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final @Nullable ContainerSchemaNode original;
 
     ContainerEffectiveStatementImpl(final ContainerStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
-            final SchemaPath path, final ContainerSchemaNode original) {
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags,
+            final ContainerSchemaNode original) {
         super(declared, substatements);
+        this.path = requireNonNull(path);
         this.original = original;
         this.flags = flags;
-        this.path = path;
     }
 
-    ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective,
-            final ContainerSchemaNode original, final int flags, final @Nullable SchemaPath path) {
+    ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective, final Object path,
+            final int flags, final ContainerSchemaNode original) {
         super(origEffective);
+        this.path = requireNonNull(path);
         this.original = original;
         this.flags = flags;
-        this.path = path;
     }
 
     @Override
@@ -73,9 +74,8 @@ final class ContainerEffectiveStatementImpl
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 99e4294d528f021d2b8d3f864914090088f333a7..ee2c604fa01176cca06530009246907fde351ca8 100644 (file)
@@ -119,8 +119,8 @@ public final class ContainerStatementSupport
         EffectiveStmtUtils.checkUniqueUses(stmt, substatements);
 
         try {
-            return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, createFlags(stmt, substatements),
-                stmt.wrapSchemaPath(), (ContainerSchemaNode) stmt.original());
+            return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, stmt.effectivePath(),
+                createFlags(stmt, substatements), (ContainerSchemaNode) stmt.original());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
@@ -129,9 +129,8 @@ public final class ContainerStatementSupport
     @Override
     public ContainerEffectiveStatement copyEffective(final Current<QName, ContainerStatement> stmt,
             final ContainerEffectiveStatement original) {
-        return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original,
-            (ContainerSchemaNode) stmt.original(), createFlags(stmt, original.effectiveSubstatements()),
-            stmt.wrapSchemaPath());
+        return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, stmt.effectivePath(),
+            createFlags(stmt, original.effectiveSubstatements()), (ContainerSchemaNode) stmt.original());
     }
 
     private static int createFlags(final Current<?, ?> stmt,
index 91de9b88470e44437ac346c00ffbda3e35595981..6e4c43277917024fed98897d8d04555705a3b173 100644 (file)
@@ -114,7 +114,7 @@ public final class ExtensionStatementSupport
 
         try {
             final ExtensionEffectiveStatementImpl created = new ExtensionEffectiveStatementImpl(stmt.declared(),
-                stmt.wrapSchemaPath());
+                stmt.optionalPath());
             verify(tl.put(stmt, created) == null);
             try {
                 return super.createEffective(stmt, declaredSubstatements, effectiveSubstatements);
index e036fe1d09bb8214e95aaf79f86035808c4c5830..a2881ba88e41bd6d88dc0bdfb1c9bd75ea03c4a8 100644 (file)
@@ -44,7 +44,7 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
             LOG.debug("Cannot construct path for {}, attempting to recover", stmt, e);
             maybePath = null;
         }
-        path = SchemaPathSupport.wrap(maybePath);
+        path = SchemaPathSupport.toOptionalPath(maybePath);
     }
 
     @Override
index 7adb50a8f399e2eb6cf276e2f281a6d4b12f5dfe..48d124dc6d9eee56fbf9f57d9d8d3d802cf2b68a 100644 (file)
@@ -7,12 +7,11 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature;
 
+import static java.util.Objects.requireNonNull;
+
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.Default;
@@ -20,12 +19,12 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyFeatureEffectiveStatement extends Default<QName, FeatureStatement>
         implements FeatureDefinition, FeatureEffectiveStatement, SchemaNodeMixin<QName, FeatureStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    EmptyFeatureEffectiveStatement(final FeatureStatement declared, final SchemaPath path, final int flags) {
+    EmptyFeatureEffectiveStatement(final FeatureStatement declared, final Object path, final int flags) {
         super(declared);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
@@ -41,8 +40,8 @@ class EmptyFeatureEffectiveStatement extends Default<QName, FeatureStatement>
 
     @Override
     @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index e78502095774cccef73de2620cbd79aa2575bbbd..b4561d42fd06198ae59332ac837bfa7f32b551f6 100644 (file)
@@ -77,8 +77,8 @@ public final class FeatureStatementSupport
     protected FeatureEffectiveStatement createEffective(final Current<QName, FeatureStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return substatements.isEmpty()
-            ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath(), EMPTY_EFFECTIVE_FLAGS)
-                : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath(),
+            ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(), EMPTY_EFFECTIVE_FLAGS)
+                : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(),
                     computeFlags(substatements), substatements);
     }
 
index c27064fe8decaa453cf0bfc0cdc3b446dea2f161..e5d81431c338ca75426100324f3d7fe30bc21cbf 100644 (file)
@@ -9,14 +9,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
 
 final class RegularFeatureEffectiveStatement extends EmptyFeatureEffectiveStatement {
     private final @NonNull Object substatements;
 
-    RegularFeatureEffectiveStatement(final FeatureStatement declared, final SchemaPath path, final int flags,
+    RegularFeatureEffectiveStatement(final FeatureStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, path, flags);
         this.substatements = maskList(substatements);
index 2fde065a979f8dafa9843a3fdbe752409b64fac0..72766e87324d2addb2d770f47b9fe5a24ed64c03 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
@@ -30,14 +30,13 @@ final class GroupingEffectiveStatementImpl
             DataNodeContainerMixin<QName, GroupingStatement>,
             SchemaNodeMixin<QName, GroupingStatement>, ActionNodeContainerMixin<QName, GroupingStatement>,
             NotificationNodeContainerMixin<QName, GroupingStatement>, AddedByUsesMixin<QName, GroupingStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     GroupingEffectiveStatementImpl(final GroupingStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
-            final SchemaPath path) {
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags) {
         super(declared, substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
@@ -46,6 +45,11 @@ final class GroupingEffectiveStatementImpl
         return flags;
     }
 
+    @Override
+    public Object pathObject() {
+        return path;
+    }
+
     @Override
     public QName argument() {
         return getQName();
@@ -56,12 +60,6 @@ final class GroupingEffectiveStatementImpl
         return dataSchemaNode(name);
     }
 
-    @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
-    }
-
     @Override
     public GroupingEffectiveStatement asEffectiveStatement() {
         return this;
index 5613c953d8f0a251e7886c5e4a986bcd788ce90a..0d6ec110390fbe939b7ed8cf89f82b251dc7c55d 100644 (file)
@@ -150,8 +150,8 @@ public final class GroupingStatementSupport
     protected GroupingEffectiveStatement createEffective(final Current<QName, GroupingStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new GroupingEffectiveStatementImpl(stmt.declared(), substatements,
-                EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), stmt.wrapSchemaPath());
+            return new GroupingEffectiveStatementImpl(stmt.declared(), substatements, stmt.effectivePath(),
+                EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index b4590255661df9d39fa62b0ed09eb04e1892c486..96d84939cde4d17b5d0a7fc19d4022be2aec6c82 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.base.MoreObjects;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
@@ -20,17 +20,16 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 abstract class AbstractIdentityEffectiveStatement extends DefaultArgument<QName, IdentityStatement>
         implements IdentityEffectiveStatement, IdentitySchemaNode, SchemaNodeMixin<QName, IdentityStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
 
-    AbstractIdentityEffectiveStatement(final IdentityStatement declared, final SchemaPath path) {
+    AbstractIdentityEffectiveStatement(final IdentityStatement declared, final Object path) {
         super(declared);
-        this.path = path;
+        this.path = requireNonNull(path);
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index de30f5488a90ac2b321e70574914cb8329c98640..70eed563fb04cf50be2b019c4c6c411d424cbd7f 100644 (file)
@@ -10,14 +10,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity;
 import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
 
 final class EmptyIdentityEffectiveStatement extends AbstractIdentityEffectiveStatement {
     private static final int CURRENT_FLAGS = new FlagsBuilder().setStatus(Status.CURRENT).toFlags();
 
-    EmptyIdentityEffectiveStatement(final IdentityStatement declared, final SchemaPath path) {
+    EmptyIdentityEffectiveStatement(final IdentityStatement declared, final Object path) {
         super(declared, path);
     }
 
index 7a85d6bf3af04a715a7c3279ed59dfc1daad48dd..e85565eee4d58ed2ad4829392c9feb98593581c7 100644 (file)
@@ -105,7 +105,7 @@ public final class IdentityStatementSupport
     protected IdentityEffectiveStatement createEffective(final Current<QName, IdentityStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         if (substatements.isEmpty()) {
-            return new EmptyIdentityEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath());
+            return new EmptyIdentityEffectiveStatement(stmt.declared(), stmt.effectivePath());
         }
 
         final List<IdentitySchemaNode> identities = new ArrayList<>();
@@ -121,7 +121,7 @@ public final class IdentityStatementSupport
             }
         }
 
-        return new RegularIdentityEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath(), new FlagsBuilder()
+        return new RegularIdentityEffectiveStatement(stmt.declared(), stmt.effectivePath(), new FlagsBuilder()
             .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
             .toFlags(), substatements, ImmutableSet.copyOf(identities));
     }
index c42ac79af81d25e064446ad76f49abac5d67204b..664f31bf8f73ae19bd36e5cfe2cda97f4ad640de 100644 (file)
@@ -12,7 +12,6 @@ import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
 
@@ -21,7 +20,7 @@ final class RegularIdentityEffectiveStatement extends AbstractIdentityEffectiveS
     private final @NonNull Object substatements;
     private final int flags;
 
-    RegularIdentityEffectiveStatement(final IdentityStatement declared, final SchemaPath path, final int flags,
+    RegularIdentityEffectiveStatement(final IdentityStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableSet<? extends IdentitySchemaNode> baseIdentities) {
         super(declared, path);
index cd11bcb306218893bc57873038e151b39de3c7d8..78504174e60b9a4d4b99b7b65c8c7bfb9edc1ff4 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
@@ -22,27 +22,26 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class DeclaredInputEffectiveStatement extends WithSubstatements<QName, InputStatement, InputEffectiveStatement>
         implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin<InputStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    DeclaredInputEffectiveStatement(final int flags, final InputStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+    DeclaredInputEffectiveStatement(final InputStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags) {
         super(declared, substatements);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
-    DeclaredInputEffectiveStatement(final int flags, final DeclaredInputEffectiveStatement original,
-            final SchemaPath path) {
+    DeclaredInputEffectiveStatement(final DeclaredInputEffectiveStatement original, final Object path,
+            final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index dff94f5a5557348fe9a9cfa0ff1bcd6617b6fb6b..92f902a1f76886641638d5f1f4b662bb887cd112 100644 (file)
@@ -107,22 +107,22 @@ public final class InputStatementSupport
     @Override
     protected InputEffectiveStatement copyDeclaredEffective(final int flags,
             final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
-        return new DeclaredInputEffectiveStatement(flags, (DeclaredInputEffectiveStatement) original,
-            stmt.wrapSchemaPath());
+        return new DeclaredInputEffectiveStatement((DeclaredInputEffectiveStatement) original, stmt.effectivePath(),
+            flags);
     }
 
     @Override
     protected InputEffectiveStatement copyUndeclaredEffective(final int flags,
             final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
-        return new UndeclaredInputEffectiveStatement(flags, (UndeclaredInputEffectiveStatement) original,
-            stmt.wrapSchemaPath());
+        return new UndeclaredInputEffectiveStatement((UndeclaredInputEffectiveStatement) original, stmt.effectivePath(),
+            flags);
     }
 
     @Override
     protected InputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.wrapSchemaPath());
+        return new DeclaredInputEffectiveStatement(stmt.declared(), substatements, stmt.effectivePath(), flags);
     }
 
     @Override
@@ -130,7 +130,7 @@ public final class InputStatementSupport
             final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.wrapSchemaPath());
+            return new UndeclaredInputEffectiveStatement(substatements, stmt.effectivePath(), flags);
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index 85ecb79190e8636e55a527d062a64521f76deb5a..d5dfd19a74f7d2b6d426450f15c4195982edd677 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
@@ -23,27 +23,26 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 final class UndeclaredInputEffectiveStatement
         extends WithSubstatements<QName, InputStatement, InputEffectiveStatement>
         implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin<InputStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    UndeclaredInputEffectiveStatement(final int flags,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+    UndeclaredInputEffectiveStatement(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+            final Object path, final int flags) {
         super(substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
-    UndeclaredInputEffectiveStatement(final int flags, final UndeclaredInputEffectiveStatement original,
-            final SchemaPath path) {
+    UndeclaredInputEffectiveStatement(final UndeclaredInputEffectiveStatement original, final Object path,
+            final int flags) {
         super(original);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index f390d0aabb9904e075ac42996028bc971800d188..38d40462aa00c34317fda6f775919e9921d38898 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
@@ -37,25 +36,25 @@ abstract class AbstractLeafEffectiveStatement extends AbstractDeclaredEffectiveS
             DataSchemaNodeMixin<QName, LeafStatement>, MandatoryMixin<QName, LeafStatement>,
             MustConstraintMixin<QName, LeafStatement> {
     private final @NonNull Object substatements;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final @NonNull TypeDefinition<?> type;
     private final int flags;
 
-    AbstractLeafEffectiveStatement(final LeafStatement declared, final SchemaPath path, final int flags,
+    AbstractLeafEffectiveStatement(final LeafStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
+        this.path = requireNonNull(path);
         this.substatements = maskList(substatements);
-        this.path = path;
         this.flags = flags;
         // TODO: lazy instantiation?
         this.type = buildType();
     }
 
-    AbstractLeafEffectiveStatement(final AbstractLeafEffectiveStatement original, final SchemaPath path,
+    AbstractLeafEffectiveStatement(final AbstractLeafEffectiveStatement original, final Object path,
             final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.substatements = original.substatements;
-        this.path = path;
         this.flags = flags;
         // FIXME: share with original?
         this.type = buildType();
@@ -77,9 +76,8 @@ abstract class AbstractLeafEffectiveStatement extends AbstractDeclaredEffectiveS
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index 9ec3bbe32410b05fcaba5c9dceaf48d0b53c1779..0330ce4e41655a81d9461d118ed57c6ad3b08ee3 100644 (file)
@@ -10,17 +10,16 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf;
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
 
 final class EmptyLeafEffectiveStatement extends AbstractLeafEffectiveStatement {
-    EmptyLeafEffectiveStatement(final LeafStatement declared, final SchemaPath path, final int flags,
+    EmptyLeafEffectiveStatement(final LeafStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, path, flags, substatements);
     }
 
-    EmptyLeafEffectiveStatement(final EmptyLeafEffectiveStatement original, final SchemaPath path, final int flags) {
+    EmptyLeafEffectiveStatement(final EmptyLeafEffectiveStatement original, final Object path, final int flags) {
         super(original, path, flags);
     }
 
index fc47a83c885774e898f9283b4fbd99a9bbdfba45..9457bda76f65efb3f42a579a0f00b4b51642d125 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -82,7 +81,7 @@ public final class LeafStatementSupport extends BaseSchemaTreeStatementSupport<L
     @Override
     public LeafEffectiveStatement copyEffective(final Current<QName, LeafStatement> stmt,
             final LeafEffectiveStatement original) {
-        return new RegularLeafEffectiveStatement((AbstractLeafEffectiveStatement) original, stmt.wrapSchemaPath(),
+        return new RegularLeafEffectiveStatement((AbstractLeafEffectiveStatement) original, stmt.effectivePath(),
             computeFlags(stmt, original.effectiveSubstatements()), (LeafSchemaNode) stmt.original());
     }
 
@@ -100,9 +99,8 @@ public final class LeafStatementSupport extends BaseSchemaTreeStatementSupport<L
         final LeafSchemaNode original = (LeafSchemaNode) stmt.original();
         final int flags = computeFlags(stmt, substatements);
         final LeafStatement declared = stmt.declared();
-        final SchemaPath path = stmt.wrapSchemaPath();
-        return original == null ? new EmptyLeafEffectiveStatement(declared, path, flags, substatements)
-                : new RegularLeafEffectiveStatement(declared, path, flags, substatements, original);
+        return original == null ? new EmptyLeafEffectiveStatement(declared, stmt.effectivePath(), flags, substatements)
+                : new RegularLeafEffectiveStatement(declared, stmt.effectivePath(), flags, substatements, original);
     }
 
     private static int computeFlags(final Current<?, ?> stmt,
index d350d702750313b3794eddd89035712cc225ff66..4d531f70adb436b045d8aea0f65d3e908f33b0cf 100644 (file)
@@ -11,20 +11,19 @@ import com.google.common.collect.ImmutableList;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
 
 final class RegularLeafEffectiveStatement extends AbstractLeafEffectiveStatement {
     private final @Nullable LeafSchemaNode original;
 
-    RegularLeafEffectiveStatement(final LeafStatement declared, final SchemaPath path, final int flags,
+    RegularLeafEffectiveStatement(final LeafStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final LeafSchemaNode original) {
         super(declared, path, flags, substatements);
         this.original = original;
     }
 
-    RegularLeafEffectiveStatement(final AbstractLeafEffectiveStatement originalEffective, final SchemaPath path,
+    RegularLeafEffectiveStatement(final AbstractLeafEffectiveStatement originalEffective, final Object path,
             final int flags, final LeafSchemaNode original) {
         super(originalEffective, path, flags);
         this.original = original;
index 2b9dd23499a557dd91c19a6efc1f27e1727a6ab7..a87a1d4fab96ba18b06eb4e03b14d264dcf9fcd1 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
@@ -37,25 +36,25 @@ abstract class AbstractLeafListEffectiveStatement
             UserOrderedMixin<QName, LeafListStatement>, DataSchemaNodeMixin<QName, LeafListStatement>,
             MustConstraintMixin<QName, LeafListStatement> {
     private final @NonNull Object substatements;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final @NonNull TypeDefinition<?> type;
     private final int flags;
 
-    AbstractLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+    AbstractLeafListEffectiveStatement(final LeafListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
+        this.path = requireNonNull(path);
         this.substatements = maskList(substatements);
-        this.path = path;
         this.flags = flags;
         // TODO: lazy instantiation?
         this.type = buildType();
     }
 
-    AbstractLeafListEffectiveStatement(final AbstractLeafListEffectiveStatement original, final SchemaPath path,
+    AbstractLeafListEffectiveStatement(final AbstractLeafListEffectiveStatement original, final Object path,
             final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.substatements = original.substatements;
-        this.path = path;
         this.flags = flags;
         // FIXME: share with original?
         this.type = buildType();
@@ -77,9 +76,8 @@ abstract class AbstractLeafListEffectiveStatement
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index 281da97ed426c51ed0a3980163afc5b4d76d8ed8..04c5c6a5c675cccfd1d2ea4864dab58c551ff149 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Optional;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
 
@@ -20,7 +19,7 @@ abstract class AbstractNonEmptyLeafListEffectiveStatement extends AbstractLeafLi
     private final @Nullable LeafListSchemaNode original;
     private final @Nullable ElementCountConstraint elementCountConstraint;
 
-    AbstractNonEmptyLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+    AbstractNonEmptyLeafListEffectiveStatement(final LeafListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final LeafListSchemaNode original, final ElementCountConstraint elementCountConstraint) {
         super(declared, path, flags, substatements);
@@ -29,14 +28,14 @@ abstract class AbstractNonEmptyLeafListEffectiveStatement extends AbstractLeafLi
     }
 
     AbstractNonEmptyLeafListEffectiveStatement(final AbstractNonEmptyLeafListEffectiveStatement originalEffecive,
-            final LeafListSchemaNode original, final SchemaPath path, final int flags) {
+            final LeafListSchemaNode original, final Object path, final int flags) {
         super(originalEffecive, path, flags);
         this.elementCountConstraint = originalEffecive.elementCountConstraint;
         this.original = original;
     }
 
     AbstractNonEmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective,
-            final LeafListSchemaNode original, final SchemaPath path, final int flags) {
+            final LeafListSchemaNode original, final Object path, final int flags) {
         super(originalEffective, path, flags);
         this.elementCountConstraint = null;
         this.original = original;
index 9942c62a99429a2fbede7506fecd8b51d897c870..14a7bd59918c381c44d0a100efbff12489643c7d 100644 (file)
@@ -13,17 +13,16 @@ import java.util.Collection;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
 
 final class EmptyLeafListEffectiveStatement extends AbstractLeafListEffectiveStatement {
-    EmptyLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+    EmptyLeafListEffectiveStatement(final LeafListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, path, flags, substatements);
     }
 
-    EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final SchemaPath path,
+    EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final Object path,
             final int flags) {
         super(original, path, flags);
     }
index 085f823ea75371afcfc6817cbe66a9da57fae8c6..3608d45b326183e6f4a42242dd65fda0cc20b194 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.yangtools.yang.common.Ordering;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -111,14 +110,14 @@ public final class LeafListStatementSupport
         final int flags = computeFlags(stmt, original.effectiveSubstatements());
         if (original instanceof RegularLeafListEffectiveStatement) {
             return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original,
-                (LeafListSchemaNode) stmt.original(), stmt.wrapSchemaPath(), flags);
+                (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags);
         } else if (original instanceof SlimLeafListEffectiveStatement) {
             return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original,
-                (LeafListSchemaNode) stmt.original(), stmt.wrapSchemaPath(), flags);
+                (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags);
         } else if (original instanceof EmptyLeafListEffectiveStatement) {
             // Promote to slim
             return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original,
-                (LeafListSchemaNode) stmt.original(), stmt.wrapSchemaPath(), flags);
+                (LeafListSchemaNode) stmt.original(), stmt.effectivePath(), flags);
         } else {
             // Safe fallback
             return super.copyEffective(stmt, original);
@@ -152,16 +151,15 @@ public final class LeafListStatementSupport
 
         final LeafListSchemaNode original = (LeafListSchemaNode) stmt.original();
         final LeafListStatement declared = stmt.declared();
-        final SchemaPath path = stmt.wrapSchemaPath();
         if (defaultValues.isEmpty()) {
             return original == null && !elementCountConstraint.isPresent()
-                ? new EmptyLeafListEffectiveStatement(declared, path, flags, substatements)
-                    : new SlimLeafListEffectiveStatement(declared, path, flags, substatements, original,
+                ? new EmptyLeafListEffectiveStatement(declared, stmt.effectivePath(), flags, substatements)
+                    : new SlimLeafListEffectiveStatement(declared, stmt.effectivePath(), flags, substatements, original,
                         elementCountConstraint.orElse(null));
         }
 
-        return new RegularLeafListEffectiveStatement(declared, path, flags, substatements, original, defaultValues,
-            elementCountConstraint.orElse(null));
+        return new RegularLeafListEffectiveStatement(declared, stmt.effectivePath(), flags, substatements, original,
+            defaultValues, elementCountConstraint.orElse(null));
     }
 
     private static int computeFlags(final Current<?, ?> stmt,
index a68aea94c1901c2dca85b3726af0160d43e1edc7..5be7fb943c245ffb258f775b72fa6888e72d18d8 100644 (file)
@@ -14,14 +14,13 @@ import com.google.common.collect.ImmutableSet;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
 
 final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
     private final @NonNull ImmutableSet<String> defaults;
 
-    RegularLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+    RegularLeafListEffectiveStatement(final LeafListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final LeafListSchemaNode original,
             final ImmutableSet<String> defaults, final ElementCountConstraint elementCountConstraint) {
         super(declared, path, flags, substatements, original, elementCountConstraint);
@@ -29,7 +28,7 @@ final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEf
     }
 
     RegularLeafListEffectiveStatement(final RegularLeafListEffectiveStatement originalEffective,
-            final LeafListSchemaNode original, final SchemaPath path, final int flags) {
+            final LeafListSchemaNode original, final Object path, final int flags) {
         super(originalEffective, original, path, flags);
         this.defaults = originalEffective.defaults;
     }
index 14868673777702c7051adb212982eeaff2be8996..abb471487f30d57f3fa7f03b1ae7f83c647eb2fb 100644 (file)
@@ -11,24 +11,23 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
 
 final class SlimLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
-    SlimLeafListEffectiveStatement(final LeafListStatement declared, final SchemaPath path, final int flags,
+    SlimLeafListEffectiveStatement(final LeafListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final LeafListSchemaNode original, final ElementCountConstraint elementCountConstraint) {
         super(declared, path, flags, substatements, original, elementCountConstraint);
     }
 
     SlimLeafListEffectiveStatement(final SlimLeafListEffectiveStatement originalEffective,
-            final LeafListSchemaNode original, final SchemaPath path, final int flags) {
+            final LeafListSchemaNode original, final Object path, final int flags) {
         super(originalEffective, original, path, flags);
     }
 
     SlimLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective,
-            final LeafListSchemaNode original, final SchemaPath path, final int flags) {
+            final LeafListSchemaNode original, final Object path, final int flags) {
         super(originalEffective, original, path, flags);
     }
 
index affaebfff35df7b00a61d399464f9ec35df296b8..089ccad277c9321e15c78914317b4a9a48d15146 100644 (file)
@@ -7,17 +7,16 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
@@ -45,26 +44,24 @@ abstract class AbstractListEffectiveStatement
             ActionNodeContainerMixin<QName, ListStatement>, MustConstraintMixin<QName, ListStatement> {
     private final int flags;
     private final @NonNull Object substatements;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final @NonNull Object keyDefinition;
 
-    AbstractListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+    AbstractListEffectiveStatement(final ListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
         super(declared, substatements);
-
+        this.path = requireNonNull(path);
         this.substatements = maskList(substatements);
-        this.path = path;
         this.keyDefinition = maskList(keyDefinition);
         this.flags = flags;
     }
 
-    AbstractListEffectiveStatement(final AbstractListEffectiveStatement original, final SchemaPath path,
-            final int flags) {
+    AbstractListEffectiveStatement(final AbstractListEffectiveStatement original, final Object path, final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.substatements = original.substatements;
         this.keyDefinition = original.keyDefinition;
-        this.path = path;
         this.flags = flags;
     }
 
@@ -84,9 +81,8 @@ abstract class AbstractListEffectiveStatement
     }
 
     @Override
-    @Deprecated
-    public final SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public final Object pathObject() {
+        return path;
     }
 
     @Override
index b7a64b63efd8614f19a5ebecba23331993968fed..195d04178e08804534a5870e2d8f02998d31d157 100644 (file)
@@ -12,18 +12,17 @@ import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
 final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
-    EmptyListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+    EmptyListEffectiveStatement(final ListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
         super(declared, path, flags, substatements, keyDefinition);
     }
 
-    EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final SchemaPath path, final int flags) {
+    EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final Object path, final int flags) {
         super(original, path, flags);
     }
 
index bff75b6cf5b190b697eedc65a94ab8ccac97239e..32ec4803d11375781dd005896181f5645b995a53 100644 (file)
@@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -148,10 +147,10 @@ public final class ListStatementSupport extends BaseSchemaTreeStatementSupport<L
         final int flags = computeFlags(stmt, original.effectiveSubstatements());
         if (original instanceof RegularListEffectiveStatement) {
             return new RegularListEffectiveStatement((RegularListEffectiveStatement) original,
-                (ListSchemaNode) stmt.original(), stmt.wrapSchemaPath(), flags);
+                (ListSchemaNode) stmt.original(), stmt.effectivePath(), flags);
         } else if (original instanceof EmptyListEffectiveStatement) {
             return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original,
-                (ListSchemaNode) stmt.original(), stmt.wrapSchemaPath(), flags);
+                (ListSchemaNode) stmt.original(), stmt.effectivePath(), flags);
         } else {
             // Safe fallback
             return super.copyEffective(stmt, original);
@@ -195,7 +194,7 @@ public final class ListStatementSupport extends BaseSchemaTreeStatementSupport<L
 
         final Optional<ElementCountConstraint> elementCountConstraint =
             EffectiveStmtUtils.createElementCountConstraint(substatements);
-        final SchemaPath path = stmt.wrapSchemaPath();
+        final Object path = stmt.effectivePath();
         final ListSchemaNode original = (ListSchemaNode) stmt.original();
         try {
             return original == null && !elementCountConstraint.isPresent()
index 6721b95669d2c2d3e22a11e0dbf3fa0be596411c..2c577f1963bd6d316fb736482611963419e7b25a 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
@@ -20,7 +19,7 @@ final class RegularListEffectiveStatement extends AbstractListEffectiveStatement
     private final ElementCountConstraint elementCountConstraint;
     private final ListSchemaNode original;
 
-    RegularListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
+    RegularListEffectiveStatement(final ListStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition, final ElementCountConstraint elementCountConstraint,
             final ListSchemaNode original) {
@@ -30,14 +29,14 @@ final class RegularListEffectiveStatement extends AbstractListEffectiveStatement
     }
 
     RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final ListSchemaNode original,
-            final SchemaPath path, final int flags) {
+            final Object path, final int flags) {
         super(originalEffective, path, flags);
         this.elementCountConstraint = originalEffective.elementCountConstraint;
         this.original = original;
     }
 
     RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective, final ListSchemaNode original,
-            final SchemaPath path, final int flags) {
+            final Object path, final int flags) {
         super(originalEffective, path, flags);
         this.elementCountConstraint = null;
         this.original = original;
index 51ab5b62c26834860cf6fd0a0ea8e7ef59750cdf..f4458bbafc916e5e063562179c16438794019009 100644 (file)
@@ -42,8 +42,8 @@ abstract class AbstractNotificationStatementSupport
     protected final NotificationEffectiveStatement createEffective(final Current<QName, NotificationStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new NotificationEffectiveStatementImpl(stmt.declared(), substatements,
-                EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), stmt.wrapSchemaPath());
+            return new NotificationEffectiveStatementImpl(stmt.declared(), substatements, stmt.effectivePath(),
+                EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
@@ -53,7 +53,7 @@ abstract class AbstractNotificationStatementSupport
     public final NotificationEffectiveStatement copyEffective(final Current<QName, NotificationStatement> stmt,
             final NotificationEffectiveStatement original) {
         return new NotificationEffectiveStatementImpl((NotificationEffectiveStatementImpl) original,
-            EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()),
-            stmt.wrapSchemaPath());
+            stmt.effectivePath(),
+            EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
     }
 }
\ No newline at end of file
index 9e83524c9f451c617c2119b5e9fe5fe7ace6e173..2a4b75356dec6f3a5b2aa2ba98561c72a39e00b3 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
@@ -31,22 +31,21 @@ final class NotificationEffectiveStatementImpl
                    AugmentationTargetMixin<QName, NotificationStatement>, CopyableMixin<QName, NotificationStatement>,
                    MustConstraintMixin<QName, NotificationStatement> {
 
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     NotificationEffectiveStatementImpl(final NotificationStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
-            final SchemaPath path) {
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags) {
         super(declared, substatements);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
-    NotificationEffectiveStatementImpl(final NotificationEffectiveStatementImpl original, final int flags,
-            final SchemaPath path) {
+    NotificationEffectiveStatementImpl(final NotificationEffectiveStatementImpl original, final Object path,
+            final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
     @Override
@@ -65,9 +64,8 @@ final class NotificationEffectiveStatementImpl
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 285c4e1927a3884e58ec79f1a144569587ea4852..81a27c4690c2594c4d3677a73cb29bd80914cb45 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
@@ -22,27 +22,26 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class DeclaredOutputEffectiveStatement extends WithSubstatements<QName, OutputStatement, OutputEffectiveStatement>
         implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin<OutputStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    DeclaredOutputEffectiveStatement(final int flags, final OutputStatement declared,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+    DeclaredOutputEffectiveStatement(final OutputStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags) {
         super(declared, substatements);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
-    DeclaredOutputEffectiveStatement(final int flags, final DeclaredOutputEffectiveStatement original,
-            final SchemaPath path) {
+    DeclaredOutputEffectiveStatement(final DeclaredOutputEffectiveStatement original, final Object path,
+            final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 07848beb732edb67fff8e823af569ca28603fc38..0e31d0bf20fe1863845a0e89475ec0cde1d060f0 100644 (file)
@@ -107,22 +107,22 @@ public final class OutputStatementSupport
     @Override
     protected OutputEffectiveStatement copyDeclaredEffective(final int flags,
             final Current<QName, OutputStatement> stmt, final OutputEffectiveStatement original) {
-        return new DeclaredOutputEffectiveStatement(flags, (DeclaredOutputEffectiveStatement) original,
-            stmt.wrapSchemaPath());
+        return new DeclaredOutputEffectiveStatement((DeclaredOutputEffectiveStatement) original, stmt.effectivePath(),
+            flags);
     }
 
     @Override
     protected OutputEffectiveStatement copyUndeclaredEffective(final int flags,
             final Current<QName, OutputStatement> stmt, final OutputEffectiveStatement original) {
-        return new UndeclaredOutputEffectiveStatement(flags, (UndeclaredOutputEffectiveStatement) original,
-            stmt.wrapSchemaPath());
+        return new UndeclaredOutputEffectiveStatement((UndeclaredOutputEffectiveStatement) original,
+            stmt.effectivePath(), flags);
     }
 
     @Override
     protected OutputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new DeclaredOutputEffectiveStatement(flags, stmt.declared(), substatements, stmt.wrapSchemaPath());
+        return new DeclaredOutputEffectiveStatement(stmt.declared(), substatements, stmt.effectivePath(), flags);
     }
 
     @Override
@@ -130,7 +130,7 @@ public final class OutputStatementSupport
             final Current<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new UndeclaredOutputEffectiveStatement(flags, substatements, stmt.wrapSchemaPath());
+            return new UndeclaredOutputEffectiveStatement(substatements, stmt.effectivePath(), flags);
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index 8e4443ada3aa6d9d66fbe5a1f55fa2049aa65258..a185f0d4b5cd873ed2558a6f226366e9ca2c8d1d 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
@@ -23,27 +23,26 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 final class UndeclaredOutputEffectiveStatement
         extends WithSubstatements<QName, OutputStatement, OutputEffectiveStatement>
         implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin<OutputStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
-    UndeclaredOutputEffectiveStatement(final int flags,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
+    UndeclaredOutputEffectiveStatement(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+            final Object path, final int flags) {
         super(substatements);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
-    UndeclaredOutputEffectiveStatement(final int flags, final UndeclaredOutputEffectiveStatement original,
-            final SchemaPath path) {
+    UndeclaredOutputEffectiveStatement(final UndeclaredOutputEffectiveStatement original, final Object path,
+            final int flags) {
         super(original);
+        this.path = requireNonNull(path);
         this.flags = flags;
-        this.path = path;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 96781bd12f9115a00b42a296b8b2fea857b6342e..50f55fdea919b0060e100755f5aff2b6e4459854 100644 (file)
@@ -97,7 +97,7 @@ public final class RefineStatementSupport
     protected RefineEffectiveStatement createEffective(final Current<Descendant, RefineStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         // Empty refine is exceedingly unlikely: let's be lazy and reuse the implementation
-        return new RefineEffectiveStatementImpl(stmt.declared(), substatements, stmt.wrapSchemaPath(),
+        return new RefineEffectiveStatementImpl(stmt.declared(), substatements, stmt.optionalPath(),
             (SchemaNode) verifyNotNull(stmt.namespaceItem(RefineTargetNamespace.class, Empty.getInstance()))
                 .buildEffective());
     }
index 9de8e43ea8728bf43dd8ad3cf0b40a7d9b1e9407..3bf32f1e072b52cc1524131ec74661ca559f675d 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
@@ -21,20 +21,19 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class RpcEffectiveStatementImpl extends WithSubstatements<QName, RpcStatement, RpcEffectiveStatement>
         implements RpcDefinition, RpcEffectiveStatement, OperationDefinitionMixin<RpcStatement> {
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     RpcEffectiveStatementImpl(final RpcStatement declared,
-        final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags, final SchemaPath path) {
+        final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Object path, final int flags) {
         super(declared, substatements);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index 38380d759216f0454c9042d001ae5f88d76e3fa8..bd9985f3b70f7bad2150b24451afd736cd9a1470 100644 (file)
@@ -108,8 +108,8 @@ public final class RpcStatementSupport extends BaseSchemaTreeStatementSupport<Rp
         checkState(!substatements.isEmpty(), "Missing implicit input/output statements at %s", stmt.sourceReference());
 
         try {
-            return new RpcEffectiveStatementImpl(stmt.declared(), substatements, computeFlags(substatements),
-                stmt.wrapSchemaPath());
+            return new RpcEffectiveStatementImpl(stmt.declared(), substatements, stmt.effectivePath(),
+                computeFlags(substatements));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
index ae33edb17a2afa5850bbd106572116b3e336bf7b..f583dd0b87dc0d63c573915e1bce13161c612b35 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.typedef;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodHandles.Lookup;
@@ -15,10 +17,7 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -60,7 +59,7 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     }
 
     private final @NonNull Object substatements;
-    private final @Nullable SchemaPath path;
+    private final @NonNull Object path;
     private final int flags;
 
     // Accessed via TYPE_DEFINITION
@@ -70,10 +69,10 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     @SuppressWarnings("unused")
     private volatile ProxyTypeEffectiveStatement typeStatement;
 
-    TypedefEffectiveStatementImpl(final TypedefStatement declared, final SchemaPath path, final int flags,
+    TypedefEffectiveStatementImpl(final TypedefStatement declared, final Object path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
-        this.path = path;
+        this.path = requireNonNull(path);
         this.flags = flags;
         this.substatements = maskList(substatements);
     }
@@ -84,9 +83,8 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     }
 
     @Override
-    @Deprecated
-    public SchemaPath getPath() {
-        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    public Object pathObject() {
+        return path;
     }
 
     @Override
index ee15a72c48490909038c4d78c3fb2c602549bf47..5eb99e3d8553d31a31113c98157b8ec2f8a0594c 100644 (file)
@@ -126,7 +126,7 @@ public final class TypedefStatementSupport extends
             EffectiveStmtUtils.hasDefaultValueMarkedWithIfFeature(stmt.yangVersion(), typeEffectiveStmt, dflt), stmt,
             "Typedef '%s' has default value '%s' marked with an if-feature statement.", stmt.argument(), dflt);
 
-        return new TypedefEffectiveStatementImpl(declared, stmt.wrapSchemaPath(), computeFlags(substatements),
+        return new TypedefEffectiveStatementImpl(declared, stmt.effectivePath(), computeFlags(substatements),
             substatements);
     }
 
index 670695e9baa2d9ff12773786f3fd2d874ecc0290..3eaf7224841f544d700a04c2e5faff3f9f31b6e6 100644 (file)
@@ -28,7 +28,7 @@ final class ThirdPartyExtensionEffectiveStatementImpl
     ThirdPartyExtensionEffectiveStatementImpl(final Current<String, ThirdPartyExtensionStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
         valueFromNamespace = stmt.getFromNamespace(ThirdPartyNamespace.class, Empty.getInstance());
     }
 
index e51ef20b9ccdbbd77012cc5dbbb6977d61d5866e..a50d7a72b5927f3a70861739bdc508c25657abb6 100644 (file)
@@ -100,6 +100,14 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
         // FIXME: 7.0.0: this is currently only used by AbstractTypeStatement
         @NonNull QNameModule effectiveNamespace();
 
+        default @NonNull Object effectivePath() {
+            return SchemaPathSupport.toEffectivePath(getSchemaPath());
+        }
+
+        default @Nullable SchemaPath optionalPath() {
+            return SchemaPathSupport.toOptionalPath(getSchemaPath());
+        }
+
         /**
          * Return the {@link SchemaPath} of this statement. Not all statements have a SchemaPath, in which case
          * {@link Optional#empty()} is returned.
@@ -116,11 +124,6 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
         default @NonNull SchemaPath getSchemaPath() {
             return schemaPath().orElseThrow();
         }
-
-        @Deprecated
-        default @Nullable SchemaPath wrapSchemaPath() {
-            return SchemaPathSupport.wrap(getSchemaPath());
-        }
     }
 
     /**
index 6ba24e597ee14d90cc292bcc39ea1f9ac3746598..a3e2956548b10f0af6c91d840e586efe2f7af1c4 100644 (file)
@@ -7,30 +7,54 @@
  */
 package org.opendaylight.yangtools.yang.parser.spi.meta;
 
+import static com.google.common.base.Verify.verifyNotNull;
+
 import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 @Beta
-@Deprecated
+// FIXME: remove this class once we ditch SchemaPath.getPath()
 public abstract class SchemaPathSupport implements Immutable {
     private static final class Enabled extends SchemaPathSupport {
         @Override
-        SchemaPath nullableWrap(final SchemaPath path) {
+        SchemaPath effectivePath(final SchemaPath path) {
+            return path;
+        }
+
+        @Override
+        SchemaPath optionalPath(final SchemaPath path) {
             return path;
         }
     }
 
-    public static final SchemaPathSupport DEFAULT = new Enabled();
+    private static final SchemaPathSupport DEFAULT = new Enabled();
 
     private SchemaPathSupport() {
         // Hidden on purpose
     }
 
-    public static @Nullable SchemaPath wrap(final @Nullable SchemaPath path) {
-        return DEFAULT.nullableWrap(path);
+    public static @NonNull Object toEffectivePath(final @NonNull SchemaPath path) {
+        return DEFAULT.effectivePath(path);
+    }
+
+    public static @Nullable SchemaPath toOptionalPath(final @Nullable SchemaPath path) {
+        return DEFAULT.optionalPath(path);
+    }
+
+    public static @NonNull QName extractQName(final @NonNull Object path) {
+        return path instanceof QName ? (QName) path : verifyNotNull(((SchemaPath) path).getLastComponent());
     }
 
-    abstract @Nullable SchemaPath nullableWrap(@Nullable SchemaPath path);
+    public static @NonNull SchemaPath extractPath(final @NonNull Object impl, final @NonNull Object path) {
+        return path instanceof SchemaPath ? (SchemaPath) path : SchemaNodeDefaults.throwUnsupported(impl);
+    }
+
+    abstract @NonNull Object effectivePath(@NonNull SchemaPath path);
+
+    abstract @Nullable SchemaPath optionalPath(@Nullable SchemaPath path);
 }