Fix GsonBuilder.setDateFormat
ignoring partial DEFAULT; deprecate setDateFormat(int)
#2556
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Purpose
Resolves #1529
Description
The main issue was this line:
gson/gson/src/main/java/com/google/gson/GsonBuilder.java
Line 919 in 3b1b361
When one style was non-DEFAULT but the other was DEFAULT (e.g.
dateStyle=SHORT, timeStyle=DEFAULT
), thenGsonBuilder
would ignore the styles and use DEFAULT, DEFAULT. That is incorrect because it leads to a different date pattern.This affected both
setDateFormat(int)
andsetDateFormat(int, int)
ofGsonBuilder
.However,
setDateFormat(int)
is a bit counterintuitive: Since it only takes a 'date style' you would expect it to useDateFormat.getDateInstance
. However, that is not actually the case, it usesDateFormat.getDateTimeInstance
with the 'time style' being the value which has been set previously withGsonBuilder.setDateFormat(int, int)
. See also #1529 (comment) for more details.Arguably this could have been fixed by changing
setDateFormat(int)
to useDateFormat.getDateInstance
, as one would expect. But since we don't encourage users to use the locale specific formatted dates anymore (see e.g. #2546 (review)) I thought it would be easier to just deprecate the method, especially since it was not working properly anyway due to #1529 (which is fixed by this PR now though).This pull request also removes internal code which handled the 'date style'-only case, but which was never actually called from the main code but only from tests.
Checklist
This is automatically checked by
mvn verify
, but can also be checked on its own usingmvn spotless:check
.Style violations can be fixed using
mvn spotless:apply
; this can be done in a separate commit to verify that it did not cause undesired changes.null
@since $next-version$
(
$next-version$
is a special placeholder which is automatically replaced during release)TestCase
)mvn clean verify javadoc:jar
passes without errors