From dc20b7561af3a793e4945842040e956803b641c9 Mon Sep 17 00:00:00 2001
From: Maicol <79454487+MaicolAntali@users.noreply.github.com>
Date: Wed, 1 Mar 2023 23:23:27 +0100
Subject: [PATCH] Fix error prone warns (#2320)
* 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.
---
.../typeadapters/UtcDateTypeAdapterTest.java | 1 +
gson/pom.xml | 6 ++
gson/src/main/java/com/google/gson/Gson.java | 8 +--
.../gson/JsonDeserializationContext.java | 1 +
.../main/java/com/google/gson/JsonParser.java | 4 ++
.../com/google/gson/internal/JavaVersion.java | 2 +-
.../bind/ReflectiveTypeAdapterFactory.java | 1 +
.../gson/internal/bind/TreeTypeAdapter.java | 5 +-
.../gson/internal/sql/SqlDateTypeAdapter.java | 1 +
.../gson/internal/sql/SqlTimeTypeAdapter.java | 1 +
.../internal/sql/SqlTimestampTypeAdapter.java | 1 +
.../gson/internal/sql/SqlTypesSupport.java | 1 +
.../com/google/gson/stream/JsonReader.java | 4 +-
gson/src/main/java/module-info.java | 3 +
.../java/com/google/gson/CommentsTest.java | 2 +
.../gson/InnerClassExclusionStrategyTest.java | 1 +
.../java/com/google/gson/JsonArrayTest.java | 2 +
.../java/com/google/gson/JsonNullTest.java | 2 +
.../google/gson/ObjectTypeAdapterTest.java | 2 +-
.../gson/OverrideCoreTypeAdaptersTest.java | 2 +
.../gson/ParameterizedTypeFixtures.java | 22 ++------
.../gson/VersionExclusionStrategyTest.java | 4 ++
.../com/google/gson/common/TestTypes.java | 31 ++++------
.../gson/functional/CollectionTest.java | 10 ++--
.../functional/CustomDeserializerTest.java | 1 +
.../functional/CustomTypeAdaptersTest.java | 10 +++-
.../functional/DefaultTypeAdaptersTest.java | 2 +
.../functional/DelegateTypeAdapterTest.java | 4 +-
.../com/google/gson/functional/EnumTest.java | 11 ++--
.../google/gson/functional/EscapingTest.java | 2 +-
.../gson/functional/ExposeFieldsTest.java | 12 +++-
.../gson/functional/FieldExclusionTest.java | 2 +
.../GsonVersionDiagnosticsTest.java | 23 +++-----
.../gson/functional/InheritanceTest.java | 1 +
.../gson/functional/Java17RecordTest.java | 6 ++
.../JsonAdapterAnnotationOnClassesTest.java | 6 +-
...JsonAdapterSerializerDeserializerTest.java | 21 +++++--
.../google/gson/functional/ObjectTest.java | 6 +-
.../functional/ParameterizedTypesTest.java | 56 ++++---------------
.../gson/functional/PrettyPrintingTest.java | 3 +-
.../google/gson/functional/PrimitiveTest.java | 4 +-
.../gson/functional/PrintFormattingTest.java | 1 +
.../gson/functional/ReflectionAccessTest.java | 2 +-
.../functional/StreamingTypeAdaptersTest.java | 5 +-
.../google/gson/functional/StringTest.java | 2 +-
.../ToNumberPolicyFunctionalTest.java | 9 +--
.../gson/functional/TreeTypeAdaptersTest.java | 1 +
.../gson/internal/LinkedTreeMapTest.java | 6 +-
.../UnsafeAllocatorInstantiationTest.java | 26 ++++-----
.../bind/DefaultDateTypeAdapterTest.java | 2 +
.../internal/bind/util/ISO8601UtilsTest.java | 5 ++
.../google/gson/reflect/TypeTokenTest.java | 2 +
.../com/google/gson/regression/OSGiTest.java | 3 +-
.../google/gson/stream/JsonReaderTest.java | 13 +++--
.../google/gson/metrics/BagOfPrimitives.java | 25 +++++----
.../CollectionsDeserializationBenchmark.java | 2 +
.../google/gson/metrics/ParseBenchmark.java | 3 +-
pom.xml | 3 +-
.../functional/ProtosWithAnnotationsTest.java | 20 +++----
.../ProtosWithPrimitiveTypesTest.java | 1 -
60 files changed, 225 insertions(+), 193 deletions(-)
diff --git a/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java
index b520183528..3d3262a336 100644
--- a/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java
+++ b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java
@@ -29,6 +29,7 @@
import java.util.TimeZone;
import org.junit.Test;
+@SuppressWarnings("JavaUtilDate")
public final class UtcDateTypeAdapterTest {
private final Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new UtcDateTypeAdapter())
diff --git a/gson/pom.xml b/gson/pom.xml
index deed98dddf..d80226c0a4 100644
--- a/gson/pom.xml
+++ b/gson/pom.xml
@@ -55,6 +55,12 @@
31.1-jretest
+
+ com.google.errorprone
+ error_prone_annotations
+ 2.18.0
+ true
+
diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java
index 054b1f92ed..45336a87e9 100644
--- a/gson/src/main/java/com/google/gson/Gson.java
+++ b/gson/src/main/java/com/google/gson/Gson.java
@@ -1011,7 +1011,7 @@ public T fromJson(String json, Class classOfT) throws JsonSyntaxException
* @see #fromJson(String, Class)
* @see #fromJson(String, TypeToken)
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
public T fromJson(String json, Type typeOfT) throws JsonSyntaxException {
return (T) fromJson(json, TypeToken.get(typeOfT));
}
@@ -1104,7 +1104,7 @@ public T fromJson(Reader json, Class classOfT) throws JsonSyntaxException
* @see #fromJson(Reader, Class)
* @see #fromJson(Reader, TypeToken)
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
public T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException {
return (T) fromJson(json, TypeToken.get(typeOfT));
}
@@ -1183,7 +1183,7 @@ private static void assertFullConsumption(Object obj, JsonReader reader) {
* @see #fromJson(Reader, Type)
* @see #fromJson(JsonReader, TypeToken)
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
public T fromJson(JsonReader reader, Type typeOfT) throws JsonIOException, JsonSyntaxException {
return (T) fromJson(reader, TypeToken.get(typeOfT));
}
@@ -1297,7 +1297,7 @@ public T fromJson(JsonElement json, Class classOfT) throws JsonSyntaxExce
* @see #fromJson(JsonElement, Class)
* @see #fromJson(JsonElement, TypeToken)
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
public T fromJson(JsonElement json, Type typeOfT) throws JsonSyntaxException {
return (T) fromJson(json, TypeToken.get(typeOfT));
}
diff --git a/gson/src/main/java/com/google/gson/JsonDeserializationContext.java b/gson/src/main/java/com/google/gson/JsonDeserializationContext.java
index 00c7505432..093653d90f 100644
--- a/gson/src/main/java/com/google/gson/JsonDeserializationContext.java
+++ b/gson/src/main/java/com/google/gson/JsonDeserializationContext.java
@@ -40,5 +40,6 @@ public interface JsonDeserializationContext {
* @return An object of type typeOfT.
* @throws JsonParseException if the parse tree does not contain expected data.
*/
+ @SuppressWarnings("TypeParameterUnusedInFormals")
public T deserialize(JsonElement json, Type typeOfT) throws JsonParseException;
}
\ No newline at end of file
diff --git a/gson/src/main/java/com/google/gson/JsonParser.java b/gson/src/main/java/com/google/gson/JsonParser.java
index 5b80042039..20d3750cea 100644
--- a/gson/src/main/java/com/google/gson/JsonParser.java
+++ b/gson/src/main/java/com/google/gson/JsonParser.java
@@ -15,6 +15,7 @@
*/
package com.google.gson;
+import com.google.errorprone.annotations.InlineMe;
import com.google.gson.internal.Streams;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
@@ -111,18 +112,21 @@ public static JsonElement parseReader(JsonReader reader)
/** @deprecated Use {@link JsonParser#parseString} */
@Deprecated
+ @InlineMe(replacement = "JsonParser.parseString(json)", imports = "com.google.gson.JsonParser")
public JsonElement parse(String json) throws JsonSyntaxException {
return parseString(json);
}
/** @deprecated Use {@link JsonParser#parseReader(Reader)} */
@Deprecated
+ @InlineMe(replacement = "JsonParser.parseReader(json)", imports = "com.google.gson.JsonParser")
public JsonElement parse(Reader json) throws JsonIOException, JsonSyntaxException {
return parseReader(json);
}
/** @deprecated Use {@link JsonParser#parseReader(JsonReader)} */
@Deprecated
+ @InlineMe(replacement = "JsonParser.parseReader(json)", imports = "com.google.gson.JsonParser")
public JsonElement parse(JsonReader json) throws JsonIOException, JsonSyntaxException {
return parseReader(json);
}
diff --git a/gson/src/main/java/com/google/gson/internal/JavaVersion.java b/gson/src/main/java/com/google/gson/internal/JavaVersion.java
index df8e9a49e1..21130ff9d0 100644
--- a/gson/src/main/java/com/google/gson/internal/JavaVersion.java
+++ b/gson/src/main/java/com/google/gson/internal/JavaVersion.java
@@ -45,7 +45,7 @@ static int getMajorJavaVersion(String javaVersion) {
// Parses both legacy 1.8 style and newer 9.0.4 style
private static int parseDotted(String javaVersion) {
try {
- String[] parts = javaVersion.split("[._]");
+ String[] parts = javaVersion.split("[._]", 3);
int firstVer = Integer.parseInt(parts[0]);
if (firstVer == 1 && parts.length > 1) {
return Integer.parseInt(parts[1]);
diff --git a/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java b/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java
index 07fee7dff2..9194fc33bf 100644
--- a/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java
+++ b/gson/src/main/java/com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.java
@@ -81,6 +81,7 @@ private boolean includeField(Field f, boolean serialize) {
}
/** first element holds the default name */
+ @SuppressWarnings("MixedMutabilityReturnType")
private List getFieldNames(Field f) {
SerializedName annotation = f.getAnnotation(SerializedName.class);
if (annotation == null) {
diff --git a/gson/src/main/java/com/google/gson/internal/bind/TreeTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/TreeTypeAdapter.java
index 47ca8fc03a..a1a5f760d4 100644
--- a/gson/src/main/java/com/google/gson/internal/bind/TreeTypeAdapter.java
+++ b/gson/src/main/java/com/google/gson/internal/bind/TreeTypeAdapter.java
@@ -174,8 +174,9 @@ private final class GsonContextImpl implements JsonSerializationContext, JsonDes
@Override public JsonElement serialize(Object src, Type typeOfSrc) {
return gson.toJsonTree(src, typeOfSrc);
}
- @SuppressWarnings("unchecked")
- @Override public R deserialize(JsonElement json, Type typeOfT) throws JsonParseException {
+ @Override
+ @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
+ public R deserialize(JsonElement json, Type typeOfT) throws JsonParseException {
return gson.fromJson(json, typeOfT);
}
}
diff --git a/gson/src/main/java/com/google/gson/internal/sql/SqlDateTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/sql/SqlDateTypeAdapter.java
index 6ae4c3ef50..271f23c21c 100644
--- a/gson/src/main/java/com/google/gson/internal/sql/SqlDateTypeAdapter.java
+++ b/gson/src/main/java/com/google/gson/internal/sql/SqlDateTypeAdapter.java
@@ -36,6 +36,7 @@
* this class state. DateFormat isn't thread safe either, so this class has
* to synchronize its read and write methods.
*/
+@SuppressWarnings("JavaUtilDate")
final class SqlDateTypeAdapter extends TypeAdapter {
static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() {
@SuppressWarnings("unchecked") // we use a runtime check to make sure the 'T's equal
diff --git a/gson/src/main/java/com/google/gson/internal/sql/SqlTimeTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/sql/SqlTimeTypeAdapter.java
index c2a37073f0..ac327ff16f 100644
--- a/gson/src/main/java/com/google/gson/internal/sql/SqlTimeTypeAdapter.java
+++ b/gson/src/main/java/com/google/gson/internal/sql/SqlTimeTypeAdapter.java
@@ -37,6 +37,7 @@
* this class state. DateFormat isn't thread safe either, so this class has
* to synchronize its read and write methods.
*/
+@SuppressWarnings("JavaUtilDate")
final class SqlTimeTypeAdapter extends TypeAdapter