From 92124c29a91ad9051ef50e638ab94ab38b0dc490 Mon Sep 17 00:00:00 2001 From: Chris Povirk Date: Thu, 11 Jun 2026 14:42:22 -0400 Subject: [PATCH 1/2] Annotate `AbstractChronology` and `Chronology`. (prompted by https://github.com/ThreeTen/threeten-extra/pull/379) --- .../classes/java/time/chrono/AbstractChronology.java | 7 ++++--- .../share/classes/java/time/chrono/Chronology.java | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/time/chrono/AbstractChronology.java b/src/java.base/share/classes/java/time/chrono/AbstractChronology.java index acb49a419c4..b2a643d2c81 100644 --- a/src/java.base/share/classes/java/time/chrono/AbstractChronology.java +++ b/src/java.base/share/classes/java/time/chrono/AbstractChronology.java @@ -103,6 +103,8 @@ import java.util.ServiceLoader; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import sun.util.logging.PlatformLogger; @@ -125,6 +127,7 @@ * * @since 1.8 */ +@NullMarked public abstract class AbstractChronology implements Chronology { /** @@ -417,7 +420,7 @@ protected AbstractChronology() { * because of a conflict in the input data */ @Override - public ChronoLocalDate resolveDate(Map fieldValues, ResolverStyle resolverStyle) { + public @Nullable ChronoLocalDate resolveDate(Map fieldValues, ResolverStyle resolverStyle) { // check epoch-day before inventing era if (fieldValues.containsKey(EPOCH_DAY)) { return dateEpochDay(fieldValues.remove(EPOCH_DAY)); @@ -678,8 +681,6 @@ public int compareTo(Chronology other) { * @return true if this is equal to the other chronology */ @Override - - public boolean equals(@Nullable Object obj) { if (this == obj) { return true; diff --git a/src/java.base/share/classes/java/time/chrono/Chronology.java b/src/java.base/share/classes/java/time/chrono/Chronology.java index f573155ae21..a968666cd77 100644 --- a/src/java.base/share/classes/java/time/chrono/Chronology.java +++ b/src/java.base/share/classes/java/time/chrono/Chronology.java @@ -88,6 +88,8 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A calendar system, used to organize and identify dates. @@ -295,7 +297,7 @@ static Set getAvailableChronologies() { * @return the calendar system type, null if the calendar is not defined by CLDR/LDML * @see #getId() */ - String getCalendarType(); + @Nullable String getCalendarType(); //----------------------------------------------------------------------- /** @@ -684,7 +686,7 @@ public R query(TemporalQuery query) { * @throws DateTimeException if the date cannot be resolved, typically * because of a conflict in the input data */ - ChronoLocalDate resolveDate(Map fieldValues, ResolverStyle resolverStyle); + @Nullable ChronoLocalDate resolveDate(Map fieldValues, ResolverStyle resolverStyle); //----------------------------------------------------------------------- /** @@ -823,7 +825,7 @@ default boolean isIsoBased() { * @return true if this is equal to the other chronology */ @Override - boolean equals(Object obj); + boolean equals(@Nullable Object obj); /** * A hash code for this chronology. From a13d3a1b2649bf4679a5e343a45f4c3745d7c50d Mon Sep 17 00:00:00 2001 From: Chris Povirk Date: Fri, 12 Jun 2026 16:07:14 -0400 Subject: [PATCH 2/2] Add missing `@NullMarked` on `Chronology`. --- src/java.base/share/classes/java/time/chrono/Chronology.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java.base/share/classes/java/time/chrono/Chronology.java b/src/java.base/share/classes/java/time/chrono/Chronology.java index a968666cd77..4939f8045ff 100644 --- a/src/java.base/share/classes/java/time/chrono/Chronology.java +++ b/src/java.base/share/classes/java/time/chrono/Chronology.java @@ -163,6 +163,7 @@ * * @since 1.8 */ +@NullMarked public interface Chronology extends Comparable { /**