Seal YangExpr hierarchy 06/100506/9
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Apr 2022 20:25:51 +0000 (22:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 25 Apr 2022 12:09:16 +0000 (14:09 +0200)
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 <robert.varga@pantheon.tech>
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangBinaryOperator.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangConstantExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFilterExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunctionCallExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangNumberExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangPathExpr.java
xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java

index 373b10631f28d4ec28a3bf0eb364d06bcc2db36a..deff33dd3837bd90d52bdb8ef8dcc7eb35a3fbc1 100644 (file)
@@ -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;
index 598f5b0c813693a968a2484f16888f8b17b02a12..aeac3a319b8c5805aabeb1389e8b986e6bce09ce 100644 (file)
@@ -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) {
index 26336f755a724611c195d97c45f071d0474680f2..ed7d08bb2c493660e7f9592251b0e27d7e41fc61 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.common.QName;
  * @author Robert Varga
  */
 @Beta
-public interface YangConstantExpr<T> extends YangExpr, Identifiable<QName> {
+public sealed interface YangConstantExpr<T> extends YangExpr, Identifiable<QName> permits YangBooleanConstantExpr {
     /**
      * Return this constant's value.
      *
index 6ef826cfb392ca89c3f8a123540506e1819fdd4b..06888aef78ac11691451645e376551b40f9575ee 100644 (file)
@@ -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 {
 
 }
index a0a8ce3f7e9a1ab8f2d13d2b66df404e66fc8c70..8ceaea98993fd36266b50bbc3ee54159a82e982f 100644 (file)
@@ -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;
 
index 2049c805fce6e1930292b0f4e86f1f6b33f33fdd..d3ec795e6d18941133bba68e9640528bcd601c1c 100644 (file)
@@ -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);
     }
 
index 4cbd35c55e74e04104c5acc9a8992276d5ee29bd..e987baa9f373e7ba01134461dbfcc5374ca9dcbf 100644 (file)
@@ -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<T extends AbstractQName> extends QNameStep {
+    private abstract static sealed class AbstractQNameStep<T extends AbstractQName> extends QNameStep {
         private static final long serialVersionUID = 1L;
 
         private final T qname;
@@ -206,7 +206,7 @@ public abstract class YangLocationPath implements YangExpr {
         abstract Class<? extends AbstractQNameStep<?>> equalityClass();
     }
 
-    public static class ResolvedQNameStep extends AbstractQNameStep<QName> implements ResolvedQNameReferent {
+    public static sealed class ResolvedQNameStep extends AbstractQNameStep<QName> 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<UnresolvedQName>
+    public static sealed class UnresolvedQNameStep extends AbstractQNameStep<UnresolvedQName>
             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<Step> steps;
 
-    YangLocationPath(final ImmutableList<Step> steps) {
+    private YangLocationPath(final ImmutableList<Step> steps) {
         this.steps = requireNonNull(steps);
     }
 
index cf355bd45c552aa2bf8f39e60a3ee1b612e3fcb1..a76bc01afe89e831326fcb77a9e36544d853bd85 100644 (file)
@@ -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();
index dd7886e5cce7b29346b0e540e07b5a85472b16a7..c841a20bd2f1e57c8e190eb9a6f40fc68809f976 100644 (file)
@@ -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);
     }
 
index 4735055164b2f9c023391a628d844b4839709317..e228975e498da393734392b9acf1ab35be56711e 100644 (file)
@@ -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);
     }