> This PR fixes the bug which occurred when `Calendar.roll(WEEK_OF_YEAR)` > rolled into a minimal first week with an invalid `WEEK_OF_YEAR` and > `DAY_OF_WEEK` combo. > > For example, Rolling _Monday, 30 December 2019_ by 1 week produced _Monday, > 31 December 2018_, which is incorrect. This is because `WEEK_OF_YEAR` is > rolled from 52 to 1, and the original `DAY_OF_WEEK` is 1. However, there is > no Monday in week 1 of 2019. This is exposed when a future method calls > `Calendar.complete()`, which eventually calculates a `fixedDate` with the > invalid `WEEK_OF_YEAR` and `DAY_OF_WEEK` combo. > > To prevent this, a check is added for rolls into week 1, which determines if > the first week is minimal. If it is indeed minimal, then it is checked if > `DAY_OF_WEEK` exists in that week, if not, `WEEK_OF_YEAR` must be incremented > by one. > > After the fix, Rolling _Monday, 30 December 2019_ by 1 week produces _Monday, > 7 January 2019_
Justin Lu has updated the pull request incrementally with five additional commits since the last revision: - Impl cleanup, add Saturday end day conditional - Rename test, clarify test documentation - Add type to static declaration of Cal.Builder, since only concerned with Gregorian for this test - Pass in amount as 1 directly - Reuse Calendar.Builder ------------- Changes: - all: https://git.openjdk.org/jdk/pull/13031/files - new: https://git.openjdk.org/jdk/pull/13031/files/f837268c..60d0621b Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=13031&range=04 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13031&range=03-04 Stats: 278 lines in 3 files changed: 132 ins; 133 del; 13 mod Patch: https://git.openjdk.org/jdk/pull/13031.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/13031/head:pull/13031 PR: https://git.openjdk.org/jdk/pull/13031