From 43ecb0b94a7e5809f8c65774cd9fe1dfbdbe0333 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 29 Jan 2024 16:21:35 +0100 Subject: [PATCH] Eagerly initialize ZERO_NANOS constant --- .../scheduling/support/BitsCronField.java | 23 ++++++++----------- .../scheduling/support/CronField.java | 5 ++-- .../scheduling/support/QuartzCronField.java | 5 ++-- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/BitsCronField.java b/spring-context/src/main/java/org/springframework/scheduling/support/BitsCronField.java index 7437575c7b..f922a8b9dd 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/BitsCronField.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/BitsCronField.java @@ -29,17 +29,15 @@ import org.springframework.util.StringUtils; * Created using the {@code parse*} methods. * * @author Arjen Poutsma + * @author Juergen Hoeller * @since 5.3 */ final class BitsCronField extends CronField { + public static final BitsCronField ZERO_NANOS = forZeroNanos(); + private static final long MASK = 0xFFFFFFFFFFFFFFFFL; - - @Nullable - private static BitsCronField zeroNanos = null; - - // we store at most 60 bits, for seconds and minutes, so a 64-bit long suffices private long bits; @@ -48,16 +46,14 @@ final class BitsCronField extends CronField { super(type); } + /** * Return a {@code BitsCronField} enabled for 0 nanoseconds. */ - public static BitsCronField zeroNanos() { - if (zeroNanos == null) { - BitsCronField field = new BitsCronField(Type.NANO); - field.setBit(0); - zeroNanos = field; - } - return zeroNanos; + private static BitsCronField forZeroNanos() { + BitsCronField field = new BitsCronField(Type.NANO); + field.setBit(0); + return field; } /** @@ -108,7 +104,6 @@ final class BitsCronField extends CronField { return result; } - private static BitsCronField parseDate(String value, BitsCronField.Type type) { if (value.equals("?")) { value = "*"; @@ -174,6 +169,7 @@ final class BitsCronField extends CronField { } } + @Nullable @Override public > T nextOrSame(T temporal) { @@ -217,7 +213,6 @@ final class BitsCronField extends CronField { else { return -1; } - } private void setBits(ValueRange range) { diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/CronField.java b/spring-context/src/main/java/org/springframework/scheduling/support/CronField.java index 3369f62baf..3124cc25b5 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/CronField.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/CronField.java @@ -29,7 +29,7 @@ import org.springframework.util.StringUtils; /** * Single field in a cron pattern. Created using the {@code parse*} methods, - * main and only entry point is {@link #nextOrSame(Temporal)}. + * the main and only entry point is {@link #nextOrSame(Temporal)}. * *

Supports a Quartz day-of-month/week field with an L/# expression. Follows * common cron conventions in every other respect, including 0-6 for SUN-SAT @@ -60,7 +60,7 @@ abstract class CronField { * Return a {@code CronField} enabled for 0 nanoseconds. */ public static CronField zeroNanos() { - return BitsCronField.zeroNanos(); + return BitsCronField.ZERO_NANOS; } /** @@ -186,7 +186,6 @@ abstract class CronField { MONTH(ChronoField.MONTH_OF_YEAR, ChronoUnit.YEARS, ChronoField.DAY_OF_MONTH, ChronoField.HOUR_OF_DAY, ChronoField.MINUTE_OF_HOUR, ChronoField.SECOND_OF_MINUTE, ChronoField.NANO_OF_SECOND), DAY_OF_WEEK(ChronoField.DAY_OF_WEEK, ChronoUnit.WEEKS, ChronoField.HOUR_OF_DAY, ChronoField.MINUTE_OF_HOUR, ChronoField.SECOND_OF_MINUTE, ChronoField.NANO_OF_SECOND); - private final ChronoField field; private final ChronoUnit higherOrder; diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java b/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java index 2963817743..85700de710 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java @@ -75,8 +75,9 @@ final class QuartzCronField extends CronField { } /** - * Parse the given value into a days of months {@code QuartzCronField}, the fourth entry of a cron expression. - * Expects a "L" or "W" in the given value. + * Parse the given value into a days of months {@code QuartzCronField}, + * the fourth entry of a cron expression. + *

Expects a "L" or "W" in the given value. */ public static QuartzCronField parseDaysOfMonth(String value) { int idx = value.lastIndexOf('L');