* Add CI build using JDK 21
This is mainly to make sure that besides the known JDK 21 build
incompatibilities Gson can be built and run using JDK 21.
* Update ProGuard
* Update Protobuf
3.25.1 is actually newer than 4.0.0-rc-2
* Perform minor code clean-up
Notable changes:
- Replace most usages of `<code>` with `{@code ...}` in Javadoc
- Add proper summary sentence to `GsonBuilder.enableComplexMapKeySerialization`
- Extend documentation for `GsonBuilder.setDateFormat` methods
- Fix `TypeToken.isAssignableFrom(Type)` throwing AssertionError in some cases
Maybe the method should not throw an exception in the first place, but it
might not matter much since it is deprecated already anyway.
- Remove outdated `throws NumberFormatException` from internal
`JsonReader.nextQuotedValue`; the behavior had been changed by
85ebaf7c35
- Fix incorrect documentation on JsonScope fields
- Fix unit tests having 'expected' and 'actual' switched
- Use dedicated Truth methods instead of `isTrue()` / `isFalse()`
- Use common helper methods in JsonWriterTest to avoid duplication
* Implement `toString()` for ReflectionAccessFilter constants
* Address most of the review comments
* Add comment about `source.scm.tag=HEAD` warning
Actually it looks like the warning is not actually caused by usage of
`HEAD` as value, but rather because the project has a snapshot version
during development (which is expected though), see
https://github.com/apache/maven-artifact-plugin/blob/maven-artifact-plugin-3.5.0/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java#L140
But this is not a problem either since during release a non-snapshot
version is used.
However, it might still be necessary to use the same OS and JDK version
to actually be able to create identical artifacts.
This commit also formats the `pom.xml` files in the way the Maven Release
Plugin would.
* Formatting follow-up
- Adds formatting commits to .git-blame-ignore-revs so that they don't
distract during Git blame
- Restores hard line breaks in Troubleshooting.md using `\` instead of
trailing spaces
- Changes formatting of some string literals and comments
- Fixes accidental Javadoc and comment issues introduced by manual changes
of formatting commit
- Fixes license header in $Gson$Types.java erroneously being a Javadoc
comment and being reformatted
- Slightly changes `JsonReader` `getPath` and `getPreviousPath` documentation
to help Javadoc detect first sentence as summary
* Remove `spotless:off` markers
* Add empty line before comment
* Check format for .github YAML files
The 'Check API compatibility' workflow runs `mvn install` to install the
previous version to the local Maven repository to compare it afterwards.
However this fails for the graal-native-image-test module because it does
not produce a JAR.
Therefore skip execution of the maven-install-plugin for that module.
* Add integration test for GraalVM Native Image
* Enable 'quickBuild' mode
Seems to improve build speed, and at least for the previous issue with
`RecordComponent` still causes test failures (as expected) if the fix
is reverted.
* Add code shrinking tools integration test
* Keep no-args constructor of classes usable with JsonAdapter
* Add library ProGuard rules for Gson
They are automatically applied for all users of Gson, see
https://developer.android.com/build/shrink-code#configuration-files
* Skip japicmp-maven-plugin for shrinker-test
* Add more tests for JsonAdapter, add tests for generic classes
* Extend default constructor test
* Add Troubleshooting Guide entry for TypeToken
Previously Maven appended the artifact ID of the modules which lead for
example for the `gson` module to the incorrect URL https://github.com/google/gson/gson
This can be checked with `mvn help:effective-pom`
* Specify Error Prone JVM args with `.mvn/jvm.config`
This allows avoiding fork mode for compilation, which:
- might slightly reduce compilation time
- guarantees that all compiler diagnostics are properly reported
* Combine enforcer executions
Building already requires JDK >= 11, but previously using a lower JDK
version such as JDK 8 would lead to cryptic build errors because some
compiler flags are unsupported.
Using the Maven Enforcer Plugin makes sure that the build fails early
with a somewhat better to understand error message.
* Adds `@SuppressWarnings("NarrowingCompoundAssignment")`
* Adds `@SuppressWarnings("TypeParameterUnusedInFormals")`
* Adds `@SuppressWarnings("JavaUtilDate")`
* Adds a limit to `String.split()`
* Add `error_prone_annotations` to the `pom.xml`
* Adds `@InlineMe(...)` to deprecated methods
* Adds `@SuppressWarnings("ImmutableEnumChecker")`
* Adds `@SuppressWarnings("ModifiedButNotUsed")`
* Adds `@SuppressWarnings("MixedMutabilityReturnType")`
* Removes an unused import
* Adds `requires` to `module-info.java`
* Adds ErrorProne `link` into `pom.xml`
* Remove unused imports
Removed from:
- ParseBenchmark
* Adds `@SuppressWarnings("EqualsGetClass")`
* Excludes from `proto` just the generated code.
Replaces `.*proto.*` with `.*/generated-test-sources/protobuf/.*` in such way will be excluded just the generated code and not the whole `proto` directory
* Removes an unused variable
Removes the `descriptor` variable because is unused.
* Fixes the `BadImport` warn into `ProtosWithAnnotationsTest`
* Fixes the `BadImport` warns into `ProtosWithAnnotationsTest`
* Enables ErrorProne in `gson/src/test.*`
Removes the `gson/src/test.*` path from the `-XepExcludedPaths` parameter of the ErrorProne plugin
* Fixes `UnusedVariable` warns
This commit fix all `UnusedVariable` warns given by ErrorProne in the `gson/src/test.*` path.
Some field is annotated with `@Keep` that means is used by reflection.
In some other case the record is annotated with `@SuppressWarnings("unused")`
* Fixes `JavaUtilDate` warns
This commit fix all `JavaUtilDate` warns given by ErrorProne in the `gson/src/test.*` path.
Classes/Methods are annotated with `@SuppressWarnings("JavaUtilDate")` because it's not possible use differente Date API.
* Fixes `EqualsGetClass` warns
This commit fix all `EqualsGetClass` warns given by ErrorProne in the `gson/src/test.*` path.
I have rewrite the `equals()` methods to use `instanceof`
* Replaces pattern matching for instanceof with casts
* Fixes `JdkObsolete` warns
This commit fix all `JdkObsolete` warns given by ErrorProne in the `gson/src/test.*` path.
In some cases I have replaced the obsolete JDK classes with the newest alternatives. In other cases, I have added the `@SuppressWarnings("JdkObsolete")`
* Fixes `ClassCanBeStatic` warns
This commit fix all `ClassCanBeStatic` warns given by ErrorProne in the `gson/src/test.*` path.
I have added the `static` keyword, or I have added `@SuppressWarnings("ClassCanBeStatic")`
* Fixes `UndefinedEquals` warns
This commit fix all `UndefinedEquals` warns given by ErrorProne in the `gson/src/test.*` path.
I have added `@SuppressWarnings("UndefinedEquals")` or fixed the asserts
Note: In this commit I have also renamed a test from `testRawCollectionDeserializationNotAlllowed` to `testRawCollectionDeserializationNotAllowed`
* Fixes `GetClassOnEnum` warns
This commit fix all `GetClassOnEnum` warns given by ErrorProne in the `gson/src/test.*` path.
I have replaced the `.getClass()` with `.getDeclaringClass()`
* Fixes `ImmutableEnumChecker` warns
This commit fix all `ImmutableEnumChecker` warns given by ErrorProne in the `gson/src/test.*` path.
I have added the `final` keyword, or I have added the `@SuppressWarnings("ImmutableEnumChecker")` annotation
* Fixes `StaticAssignmentOfThrowable` warns
This commit fix all `StaticAssignmentOfThrowable` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `AssertionFailureIgnored` warns
This commit fix all `AssertionFailureIgnored` warns given by ErrorProne in the `gson/src/test.*` path.
I have added the `@SuppressWarnings("AssertionFailureIgnored")` annotation
* Fixes `ModifiedButNotUsed` warns
This commit fix all `ModifiedButNotUsed` warns given by ErrorProne in the `gson/src/test.*` path.
I have added the `@SuppressWarnings("ModifiedButNotUsed")` annotation
* Fixes `MissingSummary` warns
This commit fix all `MissingSummary` warns given by ErrorProne in the `gson/src/test.*` path.
I have remove the Javadoc `@author`
* Fixes `FloatingPointLiteralPrecision` warns
This commit fix all `FloatingPointLiteralPrecision` warns given by ErrorProne in the `gson/src/test.*` path.
I have added the `@SuppressWarnings("FloatingPointLiteralPrecision")` annotation
* Fixes `StringSplitter` warns
This commit fix all `StringSplitter` warns given by ErrorProne in the `gson/src/test.*` path.
I have replaced the `String.split(...)` with `Splitter`
* Fixes `EmptyCatch` warns
This commit fix all `EmptyCatch` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `UnicodeEscape` warns
This commit fix all `UnicodeEscape` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `EmptyBlockTag` warns
This commit fix all `EmptyBlockTag` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `LongFloatConversion` warns
This commit fix all `LongFloatConversion` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `LongDoubleConversion` warns
This commit fix all `LongDoubleConversion` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `TruthAssertExpected` warns
This commit fix all `TruthAssertExpected` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `UnusedMethod` warns
This commit fix all `UnusedMethod` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `UnusedTypeParameter` warns
This commit fix all `UnusedTypeParameter` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `CatchFail` warns
This commit fix all `CatchFail` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `MathAbsoluteNegative` warns
This commit fix all `MathAbsoluteNegative` warns given by ErrorProne in the `gson/src/test.*` path.
* Fixes `LoopOverCharArray` warns
This commit fix all `LoopOverCharArray` warns given by ErrorProne in the `gson/src/test.*` path.
`toCharArray` allocates a new array, using `charAt` is more efficient
* Fixes `HidingField` warns
This commit fix all `HidingField` warns given by ErrorProne in the `gson/src/test.*` path.
* Implements code review feedback
* Implements code review feedback
This commit implements some other code review feedback
* Enable ErrorProne in `extra`
Thi commit removes the `.*extras/src/test.*` path from the `-XepExcludedPaths` parameter of ErrorProne.
* Fix the `JavaUtilDate` warns
This commit fix all `JavaUtilDate` warns given by ErrorProne in the `extras/src/test.*` path.
* Implements code review feedback
* Removes redundant new-line
* Implements code review feedback
* Adds `JDK11` to run test with `--release 11`
* Revert "Adds `JDK11` to run test with `--release 11`"
This reverts commit a7cca386098ae847a10a31c09c3ab9b11eee5920.
* Adds `JDK11` to run test with `--release 11`
This commit add a new profile `JDK11` that with a JDK <= 11 apply the property `<maven.compiler.testRelease>11</maven.compiler.testRelease>`
* Removes the `JDK11` profile & Adds `testRelease` property
* Fix `OperatorPrecedence` warn in `JsonWriter#close`
* Fix `ReferenceEquality` warn in `LinkedTreeMap#replaceInParent`
* Fix `UnnecessaryParentheses` warn in `LinkedTreeMap#replaceInParent`
* Fix `ReferenceEquality` warn in `LinkedTreeMap#hasNext`
* Fix `ReferenceEquality` warn in `LinkedTreeMap#nextNode`
* Adds `error_prone_annotations` to the `pom.xml` of `gson`
* Fix `InlineMeSuggester` warns in `JsonParser`
* Fix `UnnecessaryParentheses` warns in `ConstructorConstructor#newDefaultImplementationConstructor`
* Fix `ThreadLocalUsage` warn in `Gson`
* Fix `JdkObsolete` warn in `GsonBuilder`
* Fix `ReferenceEquality` warn in `LazilyParsedNumber#equals`
* Fix `OperatorPrecedence` warn in `TreeTypeAdapter#create`
* Fix `OperatorPrecedence` warn in `ArrayTypeAdapter`
* Fix `UnnecessaryParentheses` warn in `TypeAdapters`
* Adds `-XepExcludedPaths` flag to ErrorProne plugin to exclude tests and proto path
* Fix `ClassNewInstance` warn in `InterceptorAdapter`
* Fix `ThreadLocalUsage` warn in `GraphAdapterBuilder`
* Fix `JdkObsolete` warn in `GraphAdapterBuilder`
* Revert "Adds `error_prone_annotations` to the `pom.xml` of `gson`"
This reverts commit 14af14dfa23b46a54f4855a70ccf2b0a2cdc3e3f.
* Revert "Fix `InlineMeSuggester` warns in `JsonParser`"
This reverts commit 095bfd517e06510e4cc9cc6b1aac58ad9bf3038a.
* Adds `@SuppressWarnings("ThreadLocalUsage")`
* Fix `OperatorPrecedence` in `JsonWriter`
* Revert "Fix `ReferenceEquality` warn in `LinkedTreeMap#nextNode`"
This reverts commit 387746c7f7e3d0943c8f80501f5d9c3710f4862e.
* Adds `@SuppressWarnings("ReferenceEquality")`
* Adds `guava-testlib` to the gson `pom.xml`
* `@SuppressWarnings("TruthSelfEquals")` removed to use `EqualsTester()`
* Adds Error Prone to the `pom.xml`
* Adds Error Prone annotations to avoid compiling errors
* Adds profile to run Error Prone in JDK8
* Revert "Adds profile to run Error Prone in JDK8"
This reverts commit 61771d0da55003ea5bc8c6f086d925aec583c9a2.
* Fix Error Prone warn
* Add comment to `pom.xml`
* Fix the `@SuppressWarnings("GetClassOnClass")`
* Replace the Error Prone link in the `pom.xml`
* Disable Error Prone with jdk-15`
* Remove a new-line in `pom.xml`