diff --git a/checker-qual/src/main/java/org/checkerframework/checker/optional/qual/OptionalBottom.java b/checker-qual/src/main/java/org/checkerframework/checker/optional/qual/OptionalBottom.java deleted file mode 100644 index 755f071ec45..00000000000 --- a/checker-qual/src/main/java/org/checkerframework/checker/optional/qual/OptionalBottom.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.checkerframework.checker.optional.qual; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import org.checkerframework.framework.qual.SubtypeOf; - -/** - * The bottom type qualifier for the Optional Checker. The only value of this type is {@code null}. - * Programmers rarely write this annotation. - * - * @checker_framework.manual #optional-checker Optional Checker - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) -@SubtypeOf({Present.class}) -public @interface OptionalBottom {} diff --git a/checker/tests/optional/SubtypeCheck.java b/checker/tests/optional/SubtypeCheck.java index dd10817cec3..2ac3cec73e7 100644 --- a/checker/tests/optional/SubtypeCheck.java +++ b/checker/tests/optional/SubtypeCheck.java @@ -1,27 +1,16 @@ import java.util.Optional; import org.checkerframework.checker.optional.qual.MaybePresent; -import org.checkerframework.checker.optional.qual.OptionalBottom; import org.checkerframework.checker.optional.qual.Present; /** Basic test of subtyping. */ public class SubtypeCheck { @SuppressWarnings("optional.parameter") - void foo( - @MaybePresent Optional mp, - @Present Optional p, - @OptionalBottom Optional ob) { + void foo(@MaybePresent Optional mp, @Present Optional p) { @MaybePresent Optional mp2 = mp; @MaybePresent Optional mp3 = p; - @MaybePresent Optional mp4 = ob; // :: error: (assignment) @Present Optional p2 = mp; @Present Optional p3 = p; - @Present Optional p4 = ob; - // :: error: (assignment) - @OptionalBottom Optional ob2 = mp; - // :: error: (assignment) - @OptionalBottom Optional ob3 = p; - @OptionalBottom Optional ob4 = ob; } } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 52c0c6141f1..96a3c2aecad 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,4 +1,4 @@ -Version 3.46.1 (September 3, 2024) +Version 3.47.0 (September 3, 2024) ----------------------------- **User-visible changes:** @@ -6,8 +6,13 @@ Version 3.46.1 (September 3, 2024) The Checker Framework runs under JDK 22 -- that is, it runs on a version 22 JVM. The Checker Framework runs under JDK 23 -- that is, it runs on a version 23 JVM. +The Optional Checker no longer supports the `@OptionalBottom` annotation. + **Implementation details:** +Removed annotations: + * `@OptionalBottom` + **Closed issues:** diff --git a/docs/manual/figures/optional-subtyping.svg b/docs/manual/figures/optional-subtyping.svg index 2da84db270e..f6827efc744 100644 --- a/docs/manual/figures/optional-subtyping.svg +++ b/docs/manual/figures/optional-subtyping.svg @@ -7,9 +7,9 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="144.88226" - height="145.84274" - viewBox="358 100 128.50827 205.80031" + width="194" + height="120" + viewBox="320 111 205 105" id="svg3577" version="1.1" inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" @@ -107,15 +107,6 @@ y="226.772" id="tspan3617">@Present - @@ -135,59 +126,4 @@ points="465.5,176.236 460.5,173.736 455.5,176.236 460.5,166.236 " id="polygon3663" /> - - - - - @OptionalBottom - - - - - - diff --git a/docs/manual/optional-checker.tex b/docs/manual/optional-checker.tex index 320151afc32..5b654d052ca 100644 --- a/docs/manual/optional-checker.tex +++ b/docs/manual/optional-checker.tex @@ -78,10 +78,6 @@ \item[\refqualclass{checker/optional/qual}{Present}] The annotated \ container definitely contains a (non-null) value. -\item[\refqualclass{checker/optional/qual}{OptionalBottom}] - The annotated expression evaluates to \ rather than to an \ container. - Programmers rarely write this annotation. - \item[\refqualclass{checker/optional/qual}{PolyPresent}] indicates qualifier polymorphism. For a description of qualifier polymorphism, see