Seal AbstractQName hierarchy 04/100504/9
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Apr 2022 19:34:14 +0000 (21:34 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 25 Apr 2022 12:09:16 +0000 (14:09 +0200)
AbstractQName can either be resolved or one of the two UnresolvedQName
variants. Make sure compiler knows this by sealing them.

Change-Id: I2c3d866777bb9a1f5ab15d65ba81d132942ffed7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java
common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java

index 5e4f696b7f2390489f4598590d996b5043dfcb60..cbb2141795f72b1bfc95451f89d6543563e9e75d 100644 (file)
@@ -19,9 +19,8 @@ import org.opendaylight.yangtools.concepts.WritableObject;
  * Abstract superclass for sharing QName references, which can either be resolved {@link QName}s or unresolved
  * {@link UnresolvedQName.Unqualified} and {@link UnresolvedQName.Qualified}s.
  */
-// FIXME: sealed to allow QName and UnresolvedQName only when we have JDK17+
 @NonNullByDefault
-public abstract class AbstractQName implements Identifier, WritableObject {
+public abstract sealed class AbstractQName implements Identifier, WritableObject permits QName, UnresolvedQName {
     private static final long serialVersionUID = 1L;
 
     private final String localName;
index 8407d416e916147fb4531994ed5429c56642c709..3865b5863ca2c20137699e75bdc961aa28e9e5a4 100644 (file)
@@ -28,9 +28,8 @@ import org.eclipse.jdt.annotation.Nullable;
  *   <li>{@link Qualified}, which also holds a string prefix available via {@link Qualified#getPrefix()}.</li>
  * </ol>
  */
-// FIXME: sealed to allow Qualified and Unqualified only when we have JDK17+
 @NonNullByDefault
-public abstract class UnresolvedQName extends AbstractQName {
+public abstract sealed class UnresolvedQName extends AbstractQName {
     /**
      * An unresolved, qualified {@link QName}. It is guaranteed to hold a valid {@link #getLocalName()} bound to a
      * namespace identified through a prefix string, but remains unresolved. A resolved {@link QName} can be obtained