Centralize SchemaNode.getPath() dispatch 35/93935/15
authorMichal Banik <michal.banik@pantheon.tech>
Thu, 26 Nov 2020 12:21:50 +0000 (13:21 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 3 Dec 2020 10:45:37 +0000 (11:45 +0100)
Our handling of SchemaPath is quite scattered. This patch makes
it easier to reason about what is going on where.

JIRA: YANGTOOLS-1071
Change-Id: Ia90976635223d2347861554e9a59c35f190b7a5d
Signed-off-by: Michal Banik <michal.banik@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
45 files changed:
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/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/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/case_/AbstractCaseStatementSupport.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/AbstractChoiceStatementSupport.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/container/AbstractContainerStatementSupport.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/extension/ExtensionEffectiveStatementImpl.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/grouping/AbstractGroupingStatementSupport.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/identity/AbstractIdentityEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.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/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/LeafStatementSupport.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/AbstractLeafListStatementSupport.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/AbstractListStatementSupport.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/AbstractOutputStatementSupport.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/UndeclaredOutputEffectiveStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.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/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 [new file with mode: 0644]

index 557bb2f46ba590e21ca2b0e034649a68118d9895..0c49c07e33dcdfe1e29ad18873e27192bfc65b11 100644 (file)
@@ -8,26 +8,28 @@
 package org.opendaylight.yangtools.yang.parser.openconfig.stmt;
 
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement;
 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.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 
 final class OpenConfigVersionEffectiveStatementImpl
         extends UnknownEffectiveStatementBase<SemVer, OpenConfigVersionStatement>
         implements OpenConfigVersionEffectiveStatement {
 
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
 
     OpenConfigVersionEffectiveStatementImpl(final Current<SemVer, OpenConfigVersionStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType());
+        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
     }
 
     @Override
@@ -38,6 +40,6 @@ final class OpenConfigVersionEffectiveStatementImpl
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 }
index 75983b6178368a6d26629f4420f4086ffb25bd58..7dd27025869a1434b68424bfc1336f969732b74d 100644 (file)
@@ -7,12 +7,11 @@
  */
 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.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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;
@@ -24,20 +23,20 @@ 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 @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     ActionEffectiveStatementImpl(final ActionStatement declared, final SchemaPath path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 05f906c4de59baeae4c029b4c8fa59cf1e8aff7e..6eb0b1d005f4da876c0d27eb66e6d703b8bc8114 100644 (file)
@@ -107,7 +107,7 @@ public final class ActionStatementSupport extends
             "Action %s is defined at the top level of a module", argument);
 
         try {
-            return new ActionEffectiveStatementImpl(stmt.declared(), stmt.getSchemaPath(),
+            return new ActionEffectiveStatementImpl(stmt.declared(), stmt.wrapSchemaPath(),
                 historyAndStatusFlags(stmt.history(), substatements), substatements);
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
index 6c3aaa176845a2890bd3db8e6e8be5620bb2e218..321db8e86b71779be35e97b338f15005764bdc67 100644 (file)
@@ -70,7 +70,7 @@ public final class AnydataStatementSupport
     protected AnydataEffectiveStatement createEffective(final Current<QName, AnydataStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         final int flags = computeFlags(stmt.history(), stmt.effectiveConfig(), substatements);
-        final SchemaPath path = stmt.getSchemaPath();
+        final SchemaPath path = stmt.wrapSchemaPath();
 
         return substatements.isEmpty()
             ? new EmptyAnydataEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt))
index 26bad6ed36540351dcc7b6afd3ffc32b0432f940..108213e7b61b36b5a4e6eb87cdeeeec9f23846c1 100644 (file)
@@ -7,15 +7,13 @@
  */
 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;
@@ -24,14 +22,14 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyAnydataEffectiveStatement extends Default<QName, AnydataStatement>
         implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin<AnydataStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final AnydataSchemaNode original;
     private final int flags;
 
     EmptyAnydataEffectiveStatement(final AnydataStatement declared, final SchemaPath path, final int flags,
             final @Nullable AnydataSchemaNode original) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         this.original = original;
     }
@@ -39,7 +37,7 @@ class EmptyAnydataEffectiveStatement extends Default<QName, AnydataStatement>
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 30816936e6cbd3520998a6a1f517b0891004f431..9142d6ff3d40ff45d5ca2c445c58612e0389b1cd 100644 (file)
@@ -70,7 +70,7 @@ public final class AnyxmlStatementSupport
     protected AnyxmlEffectiveStatement createEffective(final Current<QName, AnyxmlStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         final int flags = computeFlags(stmt.history(), stmt.effectiveConfig(), substatements);
-        final SchemaPath path = stmt.getSchemaPath();
+        final SchemaPath path = stmt.wrapSchemaPath();
 
         return substatements.isEmpty()
             ? new EmptyAnyxmlEffectiveStatement(stmt.declared(), path, flags, findOriginal(stmt))
index 21bccc07ee40799be3efc7d9b7364cee61d6f529..6d1a46f34066e12c5231defa3b01691982b7ea6a 100644 (file)
@@ -7,14 +7,12 @@
  */
 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;
@@ -23,14 +21,14 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyAnyxmlEffectiveStatement extends Default<QName, AnyxmlStatement>
         implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin<AnyxmlStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final AnyxmlSchemaNode original;
     private final int flags;
 
     EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final SchemaPath path, final int flags,
             final @Nullable AnyxmlSchemaNode original) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         this.original = original;
     }
@@ -38,7 +36,7 @@ class EmptyAnyxmlEffectiveStatement extends Default<QName, AnyxmlStatement>
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index c29b8a2fcad2852eb8e15003715e367e36c8a1e5..1ccc86c3709b8f7a74877969b2715c394067c25f 100644 (file)
@@ -65,7 +65,7 @@ abstract class AbstractCaseStatementSupport
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
             return new DeclaredCaseEffectiveStatement(stmt.declared(), substatements, computeFlags(stmt, substatements),
-                stmt.getSchemaPath(), findOriginal(stmt));
+                stmt.wrapSchemaPath(), findOriginal(stmt));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
@@ -76,7 +76,7 @@ abstract class AbstractCaseStatementSupport
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
             return new UndeclaredCaseEffectiveStatement(substatements, computeFlags(stmt, substatements),
-                stmt.getSchemaPath(), findOriginal(stmt));
+                stmt.wrapSchemaPath(), findOriginal(stmt));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index 5d3a19f8889728dfef76626f9ae77673b21ee3c4..955314a812fad7f200fced98ddc0a4e32a5d2999 100644 (file)
@@ -7,15 +7,13 @@
  */
 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;
@@ -25,7 +23,7 @@ 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 @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     DeclaredCaseEffectiveStatement(final CaseStatement declared,
@@ -33,7 +31,7 @@ final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, Case
             final SchemaPath path, final @Nullable CaseSchemaNode original) {
         super(declared, substatements);
         this.flags = flags;
-        this.path = requireNonNull(path);
+        this.path = path;
         this.original = original;
     }
 
@@ -45,7 +43,7 @@ final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, Case
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index e9c0ba856f434a0a175eb5697ff75f80a4095495..39879d8e223c0de62e7d49918c84cd36228efdf4 100644 (file)
@@ -7,15 +7,13 @@
  */
 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;
@@ -24,14 +22,14 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEff
 
 final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, CaseStatement, CaseEffectiveStatement>
         implements CaseEffectiveStatementMixin {
-    private final CaseSchemaNode original;
-    private final @NonNull SchemaPath path;
+    private final @Nullable CaseSchemaNode original;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     UndeclaredCaseEffectiveStatement(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final int flags, final SchemaPath path, final @Nullable CaseSchemaNode original) {
         super(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         this.original = original;
     }
@@ -44,7 +42,7 @@ final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, Ca
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 9e0c3a60b964b59994e734248f364df1046f0b64..c5239aacd32c6192727c5ff92e07476b6713176f 100644 (file)
@@ -86,7 +86,7 @@ abstract class AbstractChoiceStatementSupport
                 .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE))
                 .toFlags();
         try {
-            return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, flags, stmt.getSchemaPath(),
+            return new ChoiceEffectiveStatementImpl(stmt.declared(), substatements, flags, stmt.wrapSchemaPath(),
                 defaultCase, (ChoiceSchemaNode) stmt.original());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
index a35a85db6ed2bdc089d0314837f6eef6d1aa8b76..7542e49bab8d598f6a823ac173ae02a79f1fdea2 100644 (file)
@@ -18,6 +18,7 @@ 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;
@@ -34,7 +35,7 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
                    MandatoryMixin<QName, ChoiceStatement> {
     private final CaseSchemaNode defaultCase;
     private final ChoiceSchemaNode original;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     ChoiceEffectiveStatementImpl(final ChoiceStatement declared,
@@ -42,7 +43,7 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
             final SchemaPath path, final @Nullable CaseSchemaNode defaultCase,
             final @Nullable ChoiceSchemaNode original) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         this.defaultCase = defaultCase;
         this.original = original;
@@ -56,7 +57,7 @@ final class ChoiceEffectiveStatementImpl extends WithSubstatements<QName, Choice
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 28e491fed470432f68c3bea209bc56ed2e4bfed5..2deaa5bc099c28abe46defcc555d52f55c961736 100644 (file)
@@ -47,7 +47,6 @@ abstract class AbstractContainerStatementSupport
     @Override
     protected ContainerEffectiveStatement createEffective(final Current<QName, ContainerStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        final SchemaPath path = stmt.getSchemaPath();
         final ContainerSchemaNode original = (ContainerSchemaNode) stmt.original();
         final int flags = new FlagsBuilder()
                 .setHistory(stmt.history())
@@ -60,6 +59,7 @@ abstract class AbstractContainerStatementSupport
         EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements);
         EffectiveStmtUtils.checkUniqueUses(stmt, substatements);
 
+        final SchemaPath path = stmt.wrapSchemaPath();
         try {
             return new ContainerEffectiveStatementImpl(stmt.declared(), substatements, flags, path, original);
         } catch (SubstatementIndexingException e) {
index ba2591409e9a3785d5f50753a9677f466081e1f7..bc93bac11261cd22147aebc826ce7a0223e1829a 100644 (file)
@@ -7,16 +7,14 @@
  */
 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;
@@ -44,14 +42,14 @@ final class ContainerEffectiveStatementImpl
             AugmentationTargetMixin<QName, ContainerStatement> {
 
     private final int flags;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final @Nullable ContainerSchemaNode original;
 
     ContainerEffectiveStatementImpl(final ContainerStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
             final SchemaPath path, final ContainerSchemaNode original) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.original = original;
         this.flags = flags;
     }
@@ -69,7 +67,7 @@ final class ContainerEffectiveStatementImpl
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 780e2a9f3dc214b5253f205ff4c4ebe030a705dd..76a14b758f5fd05c4b252fa722d1aef807d153fc 100644 (file)
@@ -9,14 +9,14 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
 
 import static com.google.common.base.Verify.verify;
 import static com.google.common.base.Verify.verifyNotNull;
-import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayDeque;
 import java.util.Deque;
-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.ExtensionDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -64,13 +64,13 @@ final class ExtensionEffectiveStatementImpl extends DefaultArgument<QName, Exten
 
     private static final RecursionDetector TOSTRING_DETECTOR = new RecursionDetector();
 
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
 
     private volatile Object substatements;
 
     ExtensionEffectiveStatementImpl(final ExtensionStatement declared, final SchemaPath path) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
     }
 
     @Override
@@ -81,7 +81,7 @@ final class ExtensionEffectiveStatementImpl extends DefaultArgument<QName, Exten
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
@@ -95,8 +95,7 @@ final class ExtensionEffectiveStatementImpl extends DefaultArgument<QName, Exten
     public boolean isYinElement() {
         return findFirstEffectiveSubstatement(ArgumentEffectiveStatement.class)
                 .flatMap(arg -> arg.findFirstEffectiveSubstatementArgument(YinElementEffectiveStatement.class))
-                .orElse(Boolean.FALSE)
-                .booleanValue();
+                .orElse(Boolean.FALSE);
     }
 
     @Override
index 34dc72554beff0534bc68c8e0be3c4df9942633b..893149208dd4eff236ac52f6c0767e5daf9bd031 100644 (file)
@@ -114,7 +114,7 @@ public final class ExtensionStatementSupport
 
         try {
             final ExtensionEffectiveStatementImpl created = new ExtensionEffectiveStatementImpl(stmt.declared(),
-                stmt.getSchemaPath());
+                stmt.wrapSchemaPath());
             verify(tl.put(stmt, created) == null);
             try {
                 return super.createEffective(stmt, declaredSubstatements, effectiveSubstatements);
index bfc11f60beadb91aa90e21d5854558b007c64275..0fa84987c029fe85068cf0dd31cea8fa12ad6e98 100644 (file)
@@ -9,9 +9,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.AbstractQName;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -20,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveState
 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.slf4j.Logger;
@@ -30,7 +33,7 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
     private static final Logger LOG = LoggerFactory.getLogger(UnrecognizedEffectiveStatementImpl.class);
 
     private final QName maybeQNameArgument;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
 
     UnrecognizedEffectiveStatementImpl(final Current<String, UnrecognizedStatement> stmt,
             final @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
@@ -53,7 +56,7 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
             LOG.debug("Cannot construct path for {}, attempting to recover", stmt, e);
             maybePath = null;
         }
-        path = maybePath;
+        path = SchemaPathSupport.wrap(maybePath);
     }
 
     @Override
@@ -64,7 +67,7 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 5086957d8690c83fa7e9ae8bdbc976fe42caa0f4..7adb50a8f399e2eb6cf276e2f281a6d4b12f5dfe 100644 (file)
@@ -7,11 +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;
@@ -20,12 +20,12 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 class EmptyFeatureEffectiveStatement extends Default<QName, FeatureStatement>
         implements FeatureDefinition, FeatureEffectiveStatement, SchemaNodeMixin<QName, FeatureStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     EmptyFeatureEffectiveStatement(final FeatureStatement declared, final SchemaPath path, final int flags) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
@@ -42,7 +42,7 @@ class EmptyFeatureEffectiveStatement extends Default<QName, FeatureStatement>
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index ade9f5fe4abdc6e8b00a754128b81bf3b7ad4e7a..266d9ce22dbffb96e6ad6ed863b844c5734f6568 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.getSchemaPath(), EMPTY_EFFECTIVE_FLAGS)
-                : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.getSchemaPath(),
+            ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath(), EMPTY_EFFECTIVE_FLAGS)
+                : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.wrapSchemaPath(),
                     computeFlags(substatements), substatements);
     }
 
index e74b69bc5f355fffeddeabd50a46793c6df523d3..ba233c8536ba43544e178d528684a5d461c6b67f 100644 (file)
@@ -68,7 +68,7 @@ abstract class AbstractGroupingStatementSupport
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
             return new GroupingEffectiveStatementImpl(stmt.declared(), substatements,
-                historyAndStatusFlags(stmt.history(), substatements), stmt.getSchemaPath());
+                historyAndStatusFlags(stmt.history(), substatements), stmt.wrapSchemaPath());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index c3d794787c73cd9e93b5baf1088101371235d1bb..d81a58f2c5a7430d9e499321c1bed272c2705c49 100644 (file)
@@ -7,15 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping;
 
-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.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;
@@ -33,14 +31,14 @@ final class GroupingEffectiveStatementImpl
             DataNodeContainerMixin<QName, GroupingStatement>,
             SchemaNodeMixin<QName, GroupingStatement>, ActionNodeContainerMixin<QName, GroupingStatement>,
             NotificationNodeContainerMixin<QName, GroupingStatement>, AddedByUsesMixin<QName, GroupingStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     GroupingEffectiveStatementImpl(final GroupingStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
             final SchemaPath path) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
@@ -50,7 +48,7 @@ final class GroupingEffectiveStatementImpl
     }
 
     @Override
-    public @Nullable QName argument() {
+    public QName argument() {
         return getQName();
     }
 
@@ -62,7 +60,7 @@ final class GroupingEffectiveStatementImpl
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 8a02b54de7b59ac84e6bcda963fd953af69e8049..b4590255661df9d39fa62b0ed09eb04e1892c486 100644 (file)
@@ -7,12 +7,11 @@
  */
 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.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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;
@@ -21,17 +20,17 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 abstract class AbstractIdentityEffectiveStatement extends DefaultArgument<QName, IdentityStatement>
         implements IdentityEffectiveStatement, IdentitySchemaNode, SchemaNodeMixin<QName, IdentityStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
 
     AbstractIdentityEffectiveStatement(final IdentityStatement declared, final SchemaPath path) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
     }
 
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 8cc7608ef5bca0655b9cb5c18a65661cb3dc51d3..1465d662c006c15aec3c3b7197f697dea793ba17 100644 (file)
@@ -59,7 +59,7 @@ abstract class AbstractInputStatementSupport
     protected final InputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.getSchemaPath());
+        return new DeclaredInputEffectiveStatement(flags, stmt.declared(), substatements, stmt.wrapSchemaPath());
     }
 
     @Override
@@ -67,7 +67,7 @@ abstract class AbstractInputStatementSupport
             final Current<QName, InputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.getSchemaPath());
+            return new UndeclaredInputEffectiveStatement(flags, substatements, stmt.wrapSchemaPath());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index ff30218870797c0678fe4d3f8bf211502c3c3e68..def9e4f9eacf4159e16d4b3e33432f90acf13322 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
 
-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.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;
@@ -24,20 +23,20 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class DeclaredInputEffectiveStatement extends WithSubstatements<QName, InputStatement, InputEffectiveStatement>
         implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin<InputStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     DeclaredInputEffectiveStatement(final int flags, final InputStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
         super(declared, substatements);
         this.flags = flags;
-        this.path = requireNonNull(path);
+        this.path = path;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 2ca58b908114e4e943708c1ba61e9921230d94d8..013657a1ec18e643fe99613852133c1f3c11a895 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
 
-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.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;
@@ -25,20 +24,20 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 final class UndeclaredInputEffectiveStatement
         extends WithSubstatements<QName, InputStatement, InputEffectiveStatement>
         implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin<InputStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     UndeclaredInputEffectiveStatement(final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
         super(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index fd543d5101070280429b83a26c773ab2e783b504..0fdcd6e94cbc7ca6897a270188fdc36a617ef631 100644 (file)
@@ -7,13 +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;
@@ -37,7 +37,7 @@ abstract class AbstractLeafEffectiveStatement extends AbstractDeclaredEffectiveS
             DataSchemaNodeMixin<QName, LeafStatement>, MandatoryMixin<QName, LeafStatement>,
             MustConstraintMixin<QName, LeafStatement> {
     private final @NonNull Object substatements;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final @NonNull TypeDefinition<?> type;
     private final int flags;
 
@@ -45,7 +45,7 @@ abstract class AbstractLeafEffectiveStatement extends AbstractDeclaredEffectiveS
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
         this.substatements = maskList(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         // TODO: lazy instantiation?
         this.type = buildType();
@@ -62,14 +62,14 @@ abstract class AbstractLeafEffectiveStatement extends AbstractDeclaredEffectiveS
     }
 
     @Override
-    public final @NonNull QName argument() {
+    public final QName argument() {
         return getQName();
     }
 
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 938505abd2e4bf20222666a744b459a2cb2da85a..9bc65da11eda19b5038a7a8105d31fe41a0339e3 100644 (file)
@@ -90,7 +90,6 @@ public final class LeafStatementSupport extends BaseSchemaTreeStatementSupport<L
             stmt.sourceReference(),
             "Leaf '%s' has default value '%s' marked with an if-feature statement.", stmt.argument(), dflt);
 
-        final SchemaPath path = stmt.getSchemaPath();
         final LeafSchemaNode original = (LeafSchemaNode) stmt.original();
         final int flags = new FlagsBuilder()
                 .setHistory(stmt.history())
@@ -100,6 +99,7 @@ public final class LeafStatementSupport extends BaseSchemaTreeStatementSupport<L
                 .toFlags();
 
         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);
     }
index f16afd19cdf61acd6150d069de8917cde08fbc15..c8357f54ae01253149c305ad6e7ef3475bfb0911 100644 (file)
@@ -7,13 +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;
@@ -37,7 +37,7 @@ abstract class AbstractLeafListEffectiveStatement
             UserOrderedMixin<QName, LeafListStatement>, DataSchemaNodeMixin<QName, LeafListStatement>,
             MustConstraintMixin<QName, LeafListStatement> {
     private final @NonNull Object substatements;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final @NonNull TypeDefinition<?> type;
     private final int flags;
 
@@ -45,7 +45,7 @@ abstract class AbstractLeafListEffectiveStatement
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
         this.substatements = maskList(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         // TODO: lazy instantiation?
         this.type = buildType();
@@ -62,14 +62,14 @@ abstract class AbstractLeafListEffectiveStatement
     }
 
     @Override
-    public final @NonNull QName argument() {
+    public final QName argument() {
         return getQName();
     }
 
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index c9db870bd1d024b93aa0c72af3232a548e9fd063..502597824c06ed58d5bd15bd695d11b2f08716d3 100644 (file)
@@ -56,7 +56,6 @@ abstract class AbstractLeafListStatementSupport
                 findFirstStatement(substatements, TypeEffectiveStatement.class), stmt.sourceReference(),
                 "Leaf-list is missing a 'type' statement");
 
-        final SchemaPath path = stmt.getSchemaPath();
         final LeafListSchemaNode original = (LeafListSchemaNode) stmt.original();
 
         final int flags = new FlagsBuilder()
@@ -85,6 +84,7 @@ abstract class AbstractLeafListStatementSupport
                 EffectiveStmtUtils.createElementCountConstraint(substatements);
 
         final LeafListStatement declared = stmt.declared();
+        final SchemaPath path = stmt.wrapSchemaPath();
         if (defaultValues.isEmpty()) {
             return original == null && !elementCountConstraint.isPresent()
                 ? new EmptyLeafListEffectiveStatement(declared, path, flags, substatements)
index 855542d8e57f3a587e1eea86fa61159a97bf8a5d..8ca69311ba2fd86205d840d2eed568c7b4488cd3 100644 (file)
@@ -7,17 +7,17 @@
  */
 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 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.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;
@@ -46,7 +46,7 @@ abstract class AbstractListEffectiveStatement
             ActionNodeContainerMixin<QName, ListStatement>, MustConstraintMixin<QName, ListStatement> {
     private final int flags;
     private final @NonNull Object substatements;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final @NonNull Object keyDefinition;
 
     AbstractListEffectiveStatement(final ListStatement declared, final SchemaPath path, final int flags,
@@ -55,7 +55,7 @@ abstract class AbstractListEffectiveStatement
         super(declared, substatements);
 
         this.substatements = maskList(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.keyDefinition = maskList(keyDefinition);
         this.flags = flags;
     }
@@ -71,14 +71,14 @@ abstract class AbstractListEffectiveStatement
     }
 
     @Override
-    public final @NonNull QName argument() {
+    public final QName argument() {
         return getQName();
     }
 
     @Override
     @Deprecated
     public final SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index bc03fdcd4a7c0ed1bbdab644092d21f66272174e..c8a3cd753af9d3bb6f6201d0bcfdfafa41181042 100644 (file)
@@ -73,7 +73,6 @@ abstract class AbstractListStatementSupport extends
     @Override
     protected ListEffectiveStatement createEffective(final Current<QName, ListStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        final SchemaPath path = stmt.getSchemaPath();
         final ListSchemaNode original = (ListSchemaNode) stmt.original();
 
         final ImmutableList<QName> keyDefinition;
@@ -112,13 +111,13 @@ abstract class AbstractListStatementSupport extends
             warnConfigList(stmt);
         }
 
-        final Optional<ElementCountConstraint> elementCountConstraint =
-                EffectiveStmtUtils.createElementCountConstraint(substatements);
-
         EffectiveStmtUtils.checkUniqueGroupings(stmt, substatements);
         EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements);
         EffectiveStmtUtils.checkUniqueUses(stmt, substatements);
 
+        final Optional<ElementCountConstraint> elementCountConstraint =
+            EffectiveStmtUtils.createElementCountConstraint(substatements);
+        final SchemaPath path = stmt.wrapSchemaPath();
         try {
             return original == null && !elementCountConstraint.isPresent()
                 ? new EmptyListEffectiveStatement(stmt.declared(), path, flags, substatements, keyDefinition)
index 54c321d31856f30f7d682edc10ff4aa0f9ed6246..b46b754977297b236a55497689f32c8fa6ef7d11 100644 (file)
@@ -44,7 +44,7 @@ abstract class AbstractNotificationStatementSupport
 
         try {
             return new NotificationEffectiveStatementImpl(stmt.declared(), substatements,
-                historyAndStatusFlags(stmt.history(), substatements), stmt.getSchemaPath());
+                historyAndStatusFlags(stmt.history(), substatements), stmt.wrapSchemaPath());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index 9affeac4705ccbc22ca5b6b298423109a9c96077..064209e5216657992b0aac6a0ee78c45d8372c77 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification;
 
-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.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;
@@ -33,19 +32,19 @@ final class NotificationEffectiveStatementImpl
                    AugmentationTargetMixin<QName, NotificationStatement>, CopyableMixin<QName, NotificationStatement>,
                    MustConstraintMixin<QName, NotificationStatement> {
 
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     NotificationEffectiveStatementImpl(final NotificationStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
             final SchemaPath path) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
     @Override
-    public @NonNull QName argument() {
+    public QName argument() {
         return getQName();
     }
 
@@ -62,7 +61,7 @@ final class NotificationEffectiveStatementImpl
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index e563449934408a2775533fa678265c6ad97fcb87..e667de767eb4eda6119d8e63a877d72bcf8342c1 100644 (file)
@@ -59,7 +59,7 @@ abstract class AbstractOutputStatementSupport
     protected final OutputEffectiveStatement createDeclaredEffective(final int flags,
             final Current<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new DeclaredOutputEffectiveStatement(flags, stmt.declared(), substatements, stmt.getSchemaPath());
+        return new DeclaredOutputEffectiveStatement(flags, stmt.declared(), substatements, stmt.wrapSchemaPath());
     }
 
     @Override
@@ -67,7 +67,7 @@ abstract class AbstractOutputStatementSupport
             final Current<QName, OutputStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return new UndeclaredOutputEffectiveStatement(flags, substatements, stmt.getSchemaPath());
+            return new UndeclaredOutputEffectiveStatement(flags, substatements, stmt.wrapSchemaPath());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index b3c846edb76e34c1a6e470f6f168db541bdf1def..1efd798d07f0d31cc51d6d85d7e9a0cd5570d47e 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
 
-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.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;
@@ -24,20 +23,20 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class DeclaredOutputEffectiveStatement extends WithSubstatements<QName, OutputStatement, OutputEffectiveStatement>
         implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin<OutputStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     DeclaredOutputEffectiveStatement(final int flags, final OutputStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
         super(declared, substatements);
         this.flags = flags;
-        this.path = requireNonNull(path);
+        this.path = path;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 22d57d7a0196d6fafb235659b48aed6bf462e757..4b3c9b984a545d172167265bd1e0ba59ba9db465 100644 (file)
@@ -7,14 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
 
-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.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;
@@ -25,20 +24,20 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 final class UndeclaredOutputEffectiveStatement
         extends WithSubstatements<QName, OutputStatement, OutputEffectiveStatement>
         implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin<OutputStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     UndeclaredOutputEffectiveStatement(final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path) {
         super(substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 50a2696ea201dcfc4f11d6eddb54cb9b920bd12d..031fcee405dfb7044dbbe4d15460337aba185459 100644 (file)
@@ -48,7 +48,7 @@ abstract class AbstractRefineStatementSupport
     protected final 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.getSchemaPath(),
+        return new RefineEffectiveStatementImpl(stmt.declared(), substatements, stmt.wrapSchemaPath(),
                 (SchemaNode) stmt.caerbannog().getEffectOfStatement().iterator().next().buildEffective());
     }
 }
index 476fef2d6d323c486cf7cb2f76d01cb5453fc880..05fa6200b33c2c37b171265eec064ff767e912c0 100644 (file)
@@ -12,8 +12,10 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 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.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -28,15 +30,15 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 // FIXME: 7.0.0: do not implement SchemaNode
 public final class RefineEffectiveStatementImpl extends WithSubstatements<Descendant, RefineStatement>
         implements RefineEffectiveStatement, SchemaNode, DocumentedNodeMixin<Descendant, RefineStatement> {
-    private final @NonNull SchemaPath path;
-    private final SchemaNode refineTargetNode;
+    private final @NonNull SchemaNode refineTargetNode;
+    private final @Nullable SchemaPath path;
 
     RefineEffectiveStatementImpl(final RefineStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final SchemaPath path,
             final SchemaNode refineTargetNode) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
         this.refineTargetNode = requireNonNull(refineTargetNode);
+        this.path = path;
     }
 
     public SchemaNode getRefineTargetNode() {
@@ -52,7 +54,7 @@ public final class RefineEffectiveStatementImpl extends WithSubstatements<Descen
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index df490d2c4342dc5cf4b66c1e48928be9e2468817..6760b21818285dedfb433f95425ea8363cf87ce2 100644 (file)
@@ -84,7 +84,7 @@ abstract class AbstractRpcStatementSupport extends BaseSchemaTreeStatementSuppor
 
         try {
             return new RpcEffectiveStatementImpl(stmt.declared(), substatements, computeFlags(substatements),
-                stmt.getSchemaPath());
+                stmt.wrapSchemaPath());
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt.sourceReference(), e);
         }
index e39cab28688fffe0109468ec1f5a7a0d4cdf0506..9de8e43ea8728bf43dd8ad3cf0b40a7d9b1e9407 100644 (file)
@@ -7,12 +7,11 @@
  */
 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.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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;
@@ -22,20 +21,20 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix
 
 final class RpcEffectiveStatementImpl extends WithSubstatements<QName, RpcStatement, RpcEffectiveStatement>
         implements RpcDefinition, RpcEffectiveStatement, OperationDefinitionMixin<RpcStatement> {
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     RpcEffectiveStatementImpl(final RpcStatement declared,
         final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags, final SchemaPath path) {
         super(declared, substatements);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
     }
 
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index 0e25af4289b80be0ee83d1ae26d5ac0375eed866..da966ac62773e1df93506f07702954a3ea0bb8a9 100644 (file)
@@ -7,8 +7,6 @@
  */
 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;
@@ -17,7 +15,9 @@ 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;
@@ -60,7 +60,7 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     }
 
     private final @NonNull Object substatements;
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final int flags;
 
     // Accessed via TYPE_DEFINITION
@@ -73,7 +73,7 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     TypedefEffectiveStatementImpl(final TypedefStatement declared, final SchemaPath path, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(declared);
-        this.path = requireNonNull(path);
+        this.path = path;
         this.flags = flags;
         this.substatements = maskList(substatements);
     }
@@ -86,7 +86,7 @@ final class TypedefEffectiveStatementImpl extends Default<QName, TypedefStatemen
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 
     @Override
index b792eac6a0ce9c80ea0807fff7f36b4072d7aa78..64c0c50d4ebaab9fa7e9074126d7f8fc11e31caa 100644 (file)
@@ -104,7 +104,7 @@ public final class TypedefStatementSupport extends
             stmt.sourceReference(),
             "Typedef '%s' has default value '%s' marked with an if-feature statement.", stmt.argument(), dflt);
 
-        return new TypedefEffectiveStatementImpl(declared, stmt.getSchemaPath(), computeFlags(substatements),
+        return new TypedefEffectiveStatementImpl(declared, stmt.wrapSchemaPath(), computeFlags(substatements),
             substatements);
     }
 
index c4f4a7432701181ce96f12d71825cec12656b5cc..0a184371112cb204b8822431aac507f993ec431f 100644 (file)
@@ -8,24 +8,26 @@
 package org.opendaylight.yangtools.yang.thirdparty.plugin;
 
 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.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 
 final class ThirdPartyExtensionEffectiveStatementImpl
         extends UnknownEffectiveStatementBase<String, ThirdPartyExtensionStatement>
         implements ThirdPartyExtensionEffectiveStatement {
 
-    private final @NonNull SchemaPath path;
+    private final @Nullable SchemaPath path;
     private final String valueFromNamespace;
 
     ThirdPartyExtensionEffectiveStatementImpl(final Current<String, ThirdPartyExtensionStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt, substatements);
-        path = stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType());
+        path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath().createChild(getNodeType()));
         valueFromNamespace = stmt.getFromNamespace(ThirdPartyNamespace.class, stmt.caerbannog());
     }
 
@@ -42,6 +44,6 @@ final class ThirdPartyExtensionEffectiveStatementImpl
     @Override
     @Deprecated
     public SchemaPath getPath() {
-        return path;
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
     }
 }
index 4e9576706f2697b5ec60b3c8f2f1968cd4d362fa..34a0341ca5b4ba83e517f3274fe54e9602a59299 100644 (file)
@@ -67,6 +67,11 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu
         default @NonNull SchemaPath getSchemaPath() {
             return schemaPath().orElseThrow();
         }
+
+        @Deprecated
+        default @Nullable SchemaPath wrapSchemaPath() {
+            return SchemaPathSupport.wrap(getSchemaPath());
+        }
     }
 
     /**
diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java
new file mode 100644 (file)
index 0000000..6ba24e5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.spi.meta;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+
+@Beta
+@Deprecated
+public abstract class SchemaPathSupport implements Immutable {
+    private static final class Enabled extends SchemaPathSupport {
+        @Override
+        SchemaPath nullableWrap(final SchemaPath path) {
+            return path;
+        }
+    }
+
+    public static final SchemaPathSupport DEFAULT = new Enabled();
+
+    private SchemaPathSupport() {
+        // Hidden on purpose
+    }
+
+    public static @Nullable SchemaPath wrap(final @Nullable SchemaPath path) {
+        return DEFAULT.nullableWrap(path);
+    }
+
+    abstract @Nullable SchemaPath nullableWrap(@Nullable SchemaPath path);
+}