From 039ce35af37222ba07670c6515dc8b3457bfc12f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 9 Apr 2022 22:25:51 +0200 Subject: [PATCH] Seal YangExpr hierarchy YangExpr is a baseline interface, but it has a limited audience. Seal it to make the hierarchy known to the compiler. Change-Id: I1129ac2f1cf634c75d7df94a3cdb9d3b39d29274 Signed-off-by: Robert Varga --- .../yang/xpath/api/YangBinaryExpr.java | 2 +- .../yang/xpath/api/YangBinaryOperator.java | 2 +- .../yang/xpath/api/YangConstantExpr.java | 2 +- .../yangtools/yang/xpath/api/YangExpr.java | 14 +++++++++- .../yang/xpath/api/YangFilterExpr.java | 2 +- .../yang/xpath/api/YangFunctionCallExpr.java | 4 +-- .../yang/xpath/api/YangLocationPath.java | 28 +++++++++---------- .../yang/xpath/api/YangNumberExpr.java | 6 +--- .../yang/xpath/api/YangPathExpr.java | 4 +-- .../yang/xpath/api/YangQNameExpr.java | 6 +--- 10 files changed, 37 insertions(+), 33 deletions(-) diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryExpr.java index 373b10631f..deff33dd38 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryExpr.java @@ -19,7 +19,7 @@ import org.eclipse.jdt.annotation.Nullable; * @author Robert Varga */ @Beta -public abstract class YangBinaryExpr implements YangExpr { +public abstract sealed class YangBinaryExpr implements YangExpr permits YangBinaryOperator.Expr { private static final long serialVersionUID = 1L; private final YangExpr leftExpr; diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryOperator.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryOperator.java index 598f5b0c81..aeac3a319b 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryOperator.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryOperator.java @@ -90,7 +90,7 @@ public enum YangBinaryOperator { MOD("mod"); @SuppressFBWarnings(value = "SE_INNER_CLASS", justification = "Outer class is a retained enumeration") - private final class Expr extends YangBinaryExpr { + final class Expr extends YangBinaryExpr { private static final long serialVersionUID = 1L; Expr(final YangExpr leftExpr, final YangExpr rightExpr) { diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangConstantExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangConstantExpr.java index 26336f755a..ed7d08bb2c 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangConstantExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangConstantExpr.java @@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.common.QName; * @author Robert Varga */ @Beta -public interface YangConstantExpr extends YangExpr, Identifiable { +public sealed interface YangConstantExpr extends YangExpr, Identifiable permits YangBooleanConstantExpr { /** * Return this constant's value. * diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangExpr.java index 6ef826cfb3..06888aef78 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangExpr.java @@ -17,6 +17,18 @@ import org.opendaylight.yangtools.concepts.Immutable; * @author Robert Varga */ @Beta -public interface YangExpr extends Immutable, Serializable { +public sealed interface YangExpr extends Immutable, Serializable + permits YangBinaryExpr, + YangConstantExpr, + YangFilterExpr, + YangFunctionCallExpr, + YangLiteralExpr, + YangLocationPath, + YangNaryExpr, + YangNegateExpr, + YangNumberExpr, + YangPathExpr, + YangQNameExpr, + YangVariableReferenceExpr { } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFilterExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFilterExpr.java index a0a8ce3f7e..8ceaea9899 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFilterExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFilterExpr.java @@ -18,7 +18,7 @@ import java.util.Set; import org.eclipse.jdt.annotation.Nullable; @Beta -public class YangFilterExpr implements YangExpr, YangPredicateAware { +public sealed class YangFilterExpr implements YangExpr, YangPredicateAware { private static final class WithPredicates extends YangFilterExpr { private static final long serialVersionUID = 1L; diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunctionCallExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunctionCallExpr.java index 2049c805fc..d3ec795e6d 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunctionCallExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunctionCallExpr.java @@ -25,7 +25,7 @@ import org.opendaylight.yangtools.yang.common.YangConstants; * @author Robert Varga */ @Beta -public class YangFunctionCallExpr implements YangExpr { +public sealed class YangFunctionCallExpr implements YangExpr { private static final class WithArgs extends YangFunctionCallExpr { private static final long serialVersionUID = 1L; @@ -46,7 +46,7 @@ public class YangFunctionCallExpr implements YangExpr { private final QName name; - YangFunctionCallExpr(final QName name) { + private YangFunctionCallExpr(final QName name) { this.name = requireNonNull(name); } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java index 4cbd35c55e..e987baa9f3 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java @@ -28,8 +28,8 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.UnresolvedQName; @Beta -public abstract class YangLocationPath implements YangExpr { - public abstract static class Step implements Serializable, YangPredicateAware { +public abstract sealed class YangLocationPath implements YangExpr { + public abstract static sealed class Step implements Serializable, YangPredicateAware { private static final long serialVersionUID = 1L; private final YangXPathAxis axis; @@ -63,7 +63,7 @@ public abstract class YangLocationPath implements YangExpr { } } - public static class AxisStep extends Step { + public static sealed class AxisStep extends Step { private static final long serialVersionUID = 1L; AxisStep(final YangXPathAxis axis) { @@ -111,7 +111,7 @@ public abstract class YangLocationPath implements YangExpr { } // match a particular namespace - public static class NamespaceStep extends Step { + public static final class NamespaceStep extends Step { private static final long serialVersionUID = 1L; private final QNameModule namespace; @@ -121,17 +121,17 @@ public abstract class YangLocationPath implements YangExpr { this.namespace = requireNonNull(namespace); } - public final QNameModule getNamespace() { + public QNameModule getNamespace() { return namespace; } @Override - public final int hashCode() { + public int hashCode() { return Objects.hash(getAxis(), namespace, getPredicates()); } @Override - public final boolean equals(@Nullable final Object obj) { + public boolean equals(@Nullable final Object obj) { if (this == obj) { return true; } @@ -154,7 +154,7 @@ public abstract class YangLocationPath implements YangExpr { * * @author Robert Varga */ - public abstract static class QNameStep extends Step implements QNameReferent { + public abstract static sealed class QNameStep extends Step implements QNameReferent { private static final long serialVersionUID = 1L; QNameStep(final YangXPathAxis axis) { @@ -162,7 +162,7 @@ public abstract class YangLocationPath implements YangExpr { } } - private abstract static class AbstractQNameStep extends QNameStep { + private abstract static sealed class AbstractQNameStep extends QNameStep { private static final long serialVersionUID = 1L; private final T qname; @@ -206,7 +206,7 @@ public abstract class YangLocationPath implements YangExpr { abstract Class> equalityClass(); } - public static class ResolvedQNameStep extends AbstractQNameStep implements ResolvedQNameReferent { + public static sealed class ResolvedQNameStep extends AbstractQNameStep implements ResolvedQNameReferent { private static final long serialVersionUID = 1L; ResolvedQNameStep(final YangXPathAxis axis, final QName qname) { @@ -242,7 +242,7 @@ public abstract class YangLocationPath implements YangExpr { } } - public static class UnresolvedQNameStep extends AbstractQNameStep + public static sealed class UnresolvedQNameStep extends AbstractQNameStep implements UnresolvedQNameReferent { private static final long serialVersionUID = 1L; @@ -279,7 +279,7 @@ public abstract class YangLocationPath implements YangExpr { } } - public static class NodeTypeStep extends Step { + public static sealed class NodeTypeStep extends Step { private static final long serialVersionUID = 1L; private final YangXPathNodeType nodeType; @@ -336,7 +336,7 @@ public abstract class YangLocationPath implements YangExpr { } } - public static class ProcessingInstructionStep extends NodeTypeStep { + public static sealed class ProcessingInstructionStep extends NodeTypeStep { private static final long serialVersionUID = 1L; private final String name; @@ -415,7 +415,7 @@ public abstract class YangLocationPath implements YangExpr { private final ImmutableList steps; - YangLocationPath(final ImmutableList steps) { + private YangLocationPath(final ImmutableList steps) { this.steps = requireNonNull(steps); } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangNumberExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangNumberExpr.java index cf355bd45c..a76bc01afe 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangNumberExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangNumberExpr.java @@ -14,13 +14,9 @@ import org.eclipse.jdt.annotation.Nullable; * A number-bearing expression. */ @Beta -public abstract class YangNumberExpr implements YangExpr { +public abstract sealed class YangNumberExpr implements YangExpr permits BigDecimalNumberExpr, DoubleNumberExpr { private static final long serialVersionUID = 1L; - YangNumberExpr() { - // Hidden to prevent external subclassing - } - public abstract Number getNumber(); public abstract YangXPathMathSupport getSupport(); diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangPathExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangPathExpr.java index dd7886e5cc..c841a20bd2 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangPathExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangPathExpr.java @@ -16,7 +16,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath.Relative; @Beta -public class YangPathExpr implements YangExpr { +public sealed class YangPathExpr implements YangExpr { private static final class WithLocation extends YangPathExpr { private static final long serialVersionUID = 1L; @@ -37,7 +37,7 @@ public class YangPathExpr implements YangExpr { private final YangExpr filterExpr; - YangPathExpr(final YangExpr filterExpr) { + private YangPathExpr(final YangExpr filterExpr) { this.filterExpr = requireNonNull(filterExpr); } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java index 4735055164..e228975e49 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java @@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.common.UnresolvedQName; * @author Robert Varga */ @Beta -public abstract class YangQNameExpr implements YangExpr, QNameReferent { +public abstract sealed class YangQNameExpr implements YangExpr, QNameReferent { public static final class Resolved extends YangQNameExpr implements ResolvedQNameReferent { private static final long serialVersionUID = 1L; @@ -89,10 +89,6 @@ public abstract class YangQNameExpr implements YangExpr, QNameReferent { private static final long serialVersionUID = 1L; - YangQNameExpr() { - // Prevent instantiation - } - public static Unresolved of(final UnresolvedQName qname) { return new Unresolved(qname); } -- 2.36.6