Seal ItemOrder and MutationBehaviour
[yangtools.git] / common / concepts / src / main / java / org / opendaylight / yangtools / concepts / ItemOrder.java
index 03d2b0d3aa2e5cf0a466b4b4e3f4e3952b9f8bb4..27a8ee8d7264b93b07c350d38095ffda6264e27e 100644 (file)
@@ -11,7 +11,7 @@ import com.google.common.annotations.Beta;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
-import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 
 /**
@@ -23,13 +23,12 @@ import org.eclipse.jdt.annotation.Nullable;
  * @param <T> Item order type
  */
 @Beta
-@NonNullByDefault
-public interface ItemOrder<T extends ItemOrder<T>> {
+public sealed interface ItemOrder<T extends ItemOrder<T>> {
     /**
      * Items are ordered and their order is significant. A {@link List} is an example of a collection which conforms to
      * this contract.
      */
-    interface Ordered extends ItemOrder<Ordered> {
+    non-sealed interface Ordered extends ItemOrder<Ordered> {
         @Override
         default Class<Ordered> itemOrder() {
             return Ordered.class;
@@ -43,7 +42,7 @@ public interface ItemOrder<T extends ItemOrder<T>> {
          * {@link List#hashCode()} (in the {@code must} reading of sensitivity. {@code need not} reading of sensitivity
          * could also be implemented as {@code Map.hashCode()} in case of a map-like container.
          */
-        // FIXME: 7.0.0: tighten 'should' to 'must'?
+        // FIXME: 8.0.0: tighten 'should' to 'must'?
         @Override
         int hashCode();
 
@@ -55,14 +54,14 @@ public interface ItemOrder<T extends ItemOrder<T>> {
          * {@link List#equals(Object)}.
          */
         @Override
-        boolean equals(@Nullable Object obj);
+        boolean equals(Object obj);
     }
 
     /**
      * Items are unordered and their order is insignificant. A {@link Set} is an example of a collection which conforms
      * to this contract.
      */
-    interface Unordered extends ItemOrder<Unordered> {
+    non-sealed interface Unordered extends ItemOrder<Unordered> {
         @Override
         default Class<Unordered> itemOrder() {
             return Unordered.class;
@@ -92,7 +91,7 @@ public interface ItemOrder<T extends ItemOrder<T>> {
          * This contract is also exposed through {@link #itemOrder()}.
          */
         @Override
-        boolean equals(@Nullable Object obj);
+        boolean equals(Object obj);
     }
 
     /**
@@ -101,7 +100,7 @@ public interface ItemOrder<T extends ItemOrder<T>> {
      *
      * @return Item order class.
      */
-    Class<T> itemOrder();
+    @NonNull Class<T> itemOrder();
 
     /**
      * {@link ItemOrder} has impact on {@link #hashCode()}.