From 32cdb7b12fd55527b87f5b6dd9f2043f7c719247 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 9 Apr 2022 21:29:36 +0200 Subject: [PATCH] Seal ItemOrder and MutationBehaviour With JDK17 we can properly restrict the class hierarchy of these interfaces. Also hide MutationBehaviour, as it should not leak. Change-Id: I0681ef7a0c82abe7aa9dd7adddae69940e57011f Signed-off-by: Robert Varga --- .../java/org/opendaylight/yangtools/concepts/Immutable.java | 4 ++-- .../java/org/opendaylight/yangtools/concepts/ItemOrder.java | 6 +++--- .../java/org/opendaylight/yangtools/concepts/Mutable.java | 4 ++-- .../opendaylight/yangtools/concepts/MutationBehaviour.java | 4 +--- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Immutable.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Immutable.java index 1f17aeb6aa..eb0134777e 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Immutable.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Immutable.java @@ -32,6 +32,6 @@ package org.opendaylight.yangtools.concepts; * @author Robert Varga * @author Tony Tkacik */ -public interface Immutable extends MutationBehaviour { - +public non-sealed interface Immutable extends MutationBehaviour { + // Marker interface only } diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ItemOrder.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ItemOrder.java index a840e618ff..27a8ee8d72 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ItemOrder.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/ItemOrder.java @@ -23,12 +23,12 @@ import org.eclipse.jdt.annotation.Nullable; * @param Item order type */ @Beta -public interface ItemOrder> { +public sealed interface ItemOrder> { /** * 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 { + non-sealed interface Ordered extends ItemOrder { @Override default Class itemOrder() { return Ordered.class; @@ -61,7 +61,7 @@ public interface ItemOrder> { * 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 { + non-sealed interface Unordered extends ItemOrder { @Override default Class itemOrder() { return Unordered.class; diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Mutable.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Mutable.java index f6f2893f72..f5ad016c3f 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Mutable.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/Mutable.java @@ -13,6 +13,6 @@ package org.opendaylight.yangtools.concepts; * * @author Tony Tkacik */ -public interface Mutable extends MutationBehaviour { - +public non-sealed interface Mutable extends MutationBehaviour { + // Marker interface only } diff --git a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/MutationBehaviour.java b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/MutationBehaviour.java index 537548d6ac..40e938e27e 100644 --- a/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/MutationBehaviour.java +++ b/common/concepts/src/main/java/org/opendaylight/yangtools/concepts/MutationBehaviour.java @@ -15,8 +15,6 @@ package org.opendaylight.yangtools.concepts; * * @param Mutation Type */ -// FIXME: sealed to allow Mutable and Immutable only when we have JDK17+ -// FIXME: consider hiding this interface afterwards -public interface MutationBehaviour> { +sealed interface MutationBehaviour> permits Immutable, Mutable { // Marker interface only } -- 2.36.6