From: Michal Banik Date: Thu, 26 Nov 2020 12:21:50 +0000 (+0100) Subject: Centralize SchemaNode.getPath() dispatch X-Git-Tag: v7.0.0~383 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F35%2F93935%2F15;p=yangtools.git Centralize SchemaNode.getPath() dispatch 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 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java index 557bb2f46b..0c49c07e33 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java @@ -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 implements OpenConfigVersionEffectiveStatement { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; OpenConfigVersionEffectiveStatementImpl(final Current stmt, final ImmutableList> 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); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java index 75983b6178..7dd2702586 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java @@ -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 implements ActionDefinition, ActionEffectiveStatement, OperationDefinitionMixin, CopyableMixin { - 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> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index 05f906c4de..6eb0b1d005 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -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); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java index 6c3aaa1768..321db8e86b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java @@ -70,7 +70,7 @@ public final class AnydataStatementSupport protected AnydataEffectiveStatement createEffective(final Current stmt, final ImmutableList> 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)) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java index 26bad6ed36..108213e7b6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/EmptyAnydataEffectiveStatement.java @@ -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 implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin { - 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 @Override @Deprecated public final SchemaPath getPath() { - return path; + return SchemaNodeDefaults.throwUnsupportedIfNull(this, path); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java index 30816936e6..9142d6ff3d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java @@ -70,7 +70,7 @@ public final class AnyxmlStatementSupport protected AnyxmlEffectiveStatement createEffective(final Current stmt, final ImmutableList> 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)) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java index 21bccc07ee..6d1a46f340 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/EmptyAnyxmlEffectiveStatement.java @@ -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 implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin { - 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 @Override @Deprecated public final SchemaPath getPath() { - return path; + return SchemaNodeDefaults.throwUnsupportedIfNull(this, path); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java index c29b8a2fca..1ccc86c370 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java @@ -65,7 +65,7 @@ abstract class AbstractCaseStatementSupport final ImmutableList> 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> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java index 5d3a19f888..955314a812 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/DeclaredCaseEffectiveStatement.java @@ -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 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 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> 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 { 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 stmt, final ImmutableList> 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) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java index ba2591409e..bc93bac112 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerEffectiveStatementImpl.java @@ -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 { 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> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java index 780e2a9f3d..76a14b758f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java @@ -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 arg.findFirstEffectiveSubstatementArgument(YinElementEffectiveStatement.class)) - .orElse(Boolean.FALSE) - .booleanValue(); + .orElse(Boolean.FALSE); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java index 34dc72554b..893149208d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java @@ -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); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index bfc11f60be..0fa84987c0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -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 stmt, final @NonNull ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/EmptyFeatureEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/EmptyFeatureEffectiveStatement.java index 5086957d86..7adb50a8f3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/EmptyFeatureEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/EmptyFeatureEffectiveStatement.java @@ -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 implements FeatureDefinition, FeatureEffectiveStatement, SchemaNodeMixin { - 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 @Override @Deprecated public final SchemaPath getPath() { - return path; + return SchemaNodeDefaults.throwUnsupportedIfNull(this, path); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java index ade9f5fe4a..266d9ce22d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java @@ -77,8 +77,8 @@ public final class FeatureStatementSupport protected FeatureEffectiveStatement createEffective(final Current stmt, final ImmutableList> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java index e74b69bc5f..ba233c8536 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java @@ -68,7 +68,7 @@ abstract class AbstractGroupingStatementSupport final ImmutableList> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java index c3d794787c..d81a58f2c5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java @@ -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, SchemaNodeMixin, ActionNodeContainerMixin, NotificationNodeContainerMixin, AddedByUsesMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; GroupingEffectiveStatementImpl(final GroupingStatement declared, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityEffectiveStatement.java index 8a02b54de7..b459025566 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityEffectiveStatement.java @@ -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 implements IdentityEffectiveStatement, IdentitySchemaNode, SchemaNodeMixin { - 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java index 8cc7608ef5..1465d662c0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java @@ -59,7 +59,7 @@ abstract class AbstractInputStatementSupport protected final InputEffectiveStatement createDeclaredEffective(final int flags, final Current stmt, final ImmutableList> 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 stmt, final ImmutableList> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java index ff30218870..def9e4f9ea 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/DeclaredInputEffectiveStatement.java @@ -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 implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; DeclaredInputEffectiveStatement(final int flags, final InputStatement declared, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java index 2ca58b9081..013657a1ec 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/UndeclaredInputEffectiveStatement.java @@ -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 implements InputEffectiveStatement, InputSchemaNode, OperationContainerMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; UndeclaredInputEffectiveStatement(final int flags, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/AbstractLeafEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/AbstractLeafEffectiveStatement.java index fd543d5101..0fdcd6e94c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/AbstractLeafEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/AbstractLeafEffectiveStatement.java @@ -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, MandatoryMixin, MustConstraintMixin { 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> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java index 938505abd2..9bc65da11e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java @@ -90,7 +90,6 @@ public final class LeafStatementSupport extends BaseSchemaTreeStatementSupport, DataSchemaNodeMixin, MustConstraintMixin { 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> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java index c9db870bd1..502597824c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java @@ -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) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java index 855542d8e5..8ca69311ba 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java @@ -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, MustConstraintMixin { 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java index bc03fdcd4a..c8a3cd753a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java @@ -73,7 +73,6 @@ abstract class AbstractListStatementSupport extends @Override protected ListEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { - final SchemaPath path = stmt.getSchemaPath(); final ListSchemaNode original = (ListSchemaNode) stmt.original(); final ImmutableList keyDefinition; @@ -112,13 +111,13 @@ abstract class AbstractListStatementSupport extends warnConfigList(stmt); } - final Optional elementCountConstraint = - EffectiveStmtUtils.createElementCountConstraint(substatements); - EffectiveStmtUtils.checkUniqueGroupings(stmt, substatements); EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements); EffectiveStmtUtils.checkUniqueUses(stmt, substatements); + final Optional elementCountConstraint = + EffectiveStmtUtils.createElementCountConstraint(substatements); + final SchemaPath path = stmt.wrapSchemaPath(); try { return original == null && !elementCountConstraint.isPresent() ? new EmptyListEffectiveStatement(stmt.declared(), path, flags, substatements, keyDefinition) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java index 54c321d318..b46b754977 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java index 9affeac470..064209e521 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java @@ -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, CopyableMixin, MustConstraintMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; NotificationEffectiveStatementImpl(final NotificationStatement declared, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java index e563449934..e667de767e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java @@ -59,7 +59,7 @@ abstract class AbstractOutputStatementSupport protected final OutputEffectiveStatement createDeclaredEffective(final int flags, final Current stmt, final ImmutableList> 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 stmt, final ImmutableList> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java index b3c846edb7..1efd798d07 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/DeclaredOutputEffectiveStatement.java @@ -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 implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; DeclaredOutputEffectiveStatement(final int flags, final OutputStatement declared, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java index 22d57d7a01..4b3c9b984a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/UndeclaredOutputEffectiveStatement.java @@ -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 implements OutputEffectiveStatement, OutputSchemaNode, OperationContainerMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; UndeclaredOutputEffectiveStatement(final int flags, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java index 50a2696ea2..031fcee405 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java @@ -48,7 +48,7 @@ abstract class AbstractRefineStatementSupport protected final RefineEffectiveStatement createEffective(final Current stmt, final ImmutableList> 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()); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java index 476fef2d6d..05fa6200b3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java @@ -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 implements RefineEffectiveStatement, SchemaNode, DocumentedNodeMixin { - 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> 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 implements RpcDefinition, RpcEffectiveStatement, OperationDefinitionMixin { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final int flags; RpcEffectiveStatementImpl(final RpcStatement declared, final ImmutableList> 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java index 0e25af4289..da966ac627 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java @@ -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> 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 implements ThirdPartyExtensionEffectiveStatement { - private final @NonNull SchemaPath path; + private final @Nullable SchemaPath path; private final String valueFromNamespace; ThirdPartyExtensionEffectiveStatementImpl(final Current stmt, final ImmutableList> 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); } } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java index 4e9576706f..34a0341ca5 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java @@ -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 index 0000000000..6ba24e597e --- /dev/null +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java @@ -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); +}