diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e8b2cef0c2..f9ebe2f6d1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,12 +10,7 @@ jobs: name: "Build on JDK ${{ matrix.java }}" strategy: matrix: - java: [ 11, 17 ] - # Custom JDK 21 configuration - include: - - java: 21 - # Disable Enforcer check which (intentionally) prevents using JDK 21 for building - extra-mvn-args: -Denforcer.fail=false + java: [ 11, 17, 21 ] runs-on: ubuntu-latest steps: @@ -28,7 +23,7 @@ jobs: cache: 'maven' - name: Build with Maven # This also runs javadoc:jar to detect any issues with the Javadoc generated during release - run: mvn --batch-mode --no-transfer-progress verify javadoc:jar ${{ matrix.extra-mvn-args || '' }} + run: mvn --batch-mode --no-transfer-progress verify javadoc:jar native-image-test: name: "GraalVM Native Image test" diff --git a/README.md b/README.md index acd145b504..fc90176584 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ Gson uses Maven to build the project: mvn clean verify ``` -JDK 11 or newer is required for building, JDK 17 is recommended. Newer JDKs are currently not supported for building (but are supported when _using_ Gson). +JDK 11 or newer is required for building, JDK 17 or 21 is recommended. Newer JDKs are currently not supported for building (but are supported when _using_ Gson). ### Contributing diff --git a/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java b/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java index dba381531e..e81597f2df 100644 --- a/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java +++ b/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java @@ -52,7 +52,7 @@ public GraphAdapterBuilder() { } public GraphAdapterBuilder addType(Type type) { - final ObjectConstructor objectConstructor = constructorConstructor.get(TypeToken.get(type)); + ObjectConstructor objectConstructor = constructorConstructor.get(TypeToken.get(type)); InstanceCreator instanceCreator = new InstanceCreator() { @Override @@ -95,8 +95,8 @@ public TypeAdapter create(Gson gson, TypeToken type) { return null; } - final TypeAdapter typeAdapter = gson.getDelegateAdapter(this, type); - final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + TypeAdapter typeAdapter = gson.getDelegateAdapter(this, type); + TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); return new TypeAdapter() { @Override public void write(JsonWriter out, T value) throws IOException { diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java index f705cd4628..01812ad24f 100644 --- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java +++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java @@ -252,9 +252,9 @@ public TypeAdapter create(Gson gson, TypeToken type) { return null; } - final TypeAdapter jsonElementAdapter = gson.getAdapter(JsonElement.class); - final Map> labelToDelegate = new LinkedHashMap<>(); - final Map, TypeAdapter> subtypeToDelegate = new LinkedHashMap<>(); + TypeAdapter jsonElementAdapter = gson.getAdapter(JsonElement.class); + Map> labelToDelegate = new LinkedHashMap<>(); + Map, TypeAdapter> subtypeToDelegate = new LinkedHashMap<>(); for (Map.Entry> entry : labelToSubtype.entrySet()) { TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); labelToDelegate.put(entry.getKey(), delegate); diff --git a/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java b/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java index 866a8b01a0..c7e5683e8d 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java @@ -88,7 +88,7 @@ public boolean equals(Object o) { if (!(o instanceof Sandwich)) { return false; } - final Sandwich other = (Sandwich) o; + Sandwich other = (Sandwich) o; if (this.bread == null ? other.bread != null : !this.bread.equals(other.bread)) { return false; } @@ -115,7 +115,7 @@ public boolean equals(Object o) { if (!(o instanceof MultipleSandwiches)) { return false; } - final MultipleSandwiches other = (MultipleSandwiches) o; + MultipleSandwiches other = (MultipleSandwiches) o; if (this.sandwiches == null ? other.sandwiches != null : !this.sandwiches.equals(other.sandwiches)) { diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index 196dc90fc3..d58597396f 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -538,7 +538,7 @@ public void write(JsonWriter out, Number value) throws IOException { }; } - private static TypeAdapter atomicLongAdapter(final TypeAdapter longAdapter) { + private static TypeAdapter atomicLongAdapter(TypeAdapter longAdapter) { return new TypeAdapter() { @Override public void write(JsonWriter out, AtomicLong value) throws IOException { @@ -554,7 +554,7 @@ public AtomicLong read(JsonReader in) throws IOException { } private static TypeAdapter atomicLongArrayAdapter( - final TypeAdapter longAdapter) { + TypeAdapter longAdapter) { return new TypeAdapter() { @Override public void write(JsonWriter out, AtomicLongArray value) throws IOException { @@ -682,7 +682,7 @@ public TypeAdapter getAdapter(Class type) { * public int numReads = 0; * public int numWrites = 0; * public TypeAdapter create(Gson gson, TypeToken type) { - * final TypeAdapter delegate = gson.getDelegateAdapter(this, type); + * TypeAdapter delegate = gson.getDelegateAdapter(this, type); * return new TypeAdapter() { * public void write(JsonWriter out, T value) throws IOException { * ++numWrites; diff --git a/gson/src/main/java/com/google/gson/TypeAdapterFactory.java b/gson/src/main/java/com/google/gson/TypeAdapterFactory.java index 0387340635..4473e59b7a 100644 --- a/gson/src/main/java/com/google/gson/TypeAdapterFactory.java +++ b/gson/src/main/java/com/google/gson/TypeAdapterFactory.java @@ -117,7 +117,7 @@ * } * * private TypeAdapter> newMultisetAdapter( - * final TypeAdapter elementAdapter) { + * TypeAdapter elementAdapter) { * return new TypeAdapter>() { * public void write(JsonWriter out, Multiset value) throws IOException { * if (value == null) { diff --git a/gson/src/main/java/com/google/gson/internal/ConstructorConstructor.java b/gson/src/main/java/com/google/gson/internal/ConstructorConstructor.java index b4deb74726..ae0725d599 100644 --- a/gson/src/main/java/com/google/gson/internal/ConstructorConstructor.java +++ b/gson/src/main/java/com/google/gson/internal/ConstructorConstructor.java @@ -95,13 +95,13 @@ static String checkInstantiable(Class c) { } public ObjectConstructor get(TypeToken typeToken) { - final Type type = typeToken.getType(); - final Class rawType = typeToken.getRawType(); + Type type = typeToken.getType(); + Class rawType = typeToken.getRawType(); // first try an instance creator @SuppressWarnings("unchecked") // types must agree - final InstanceCreator typeCreator = (InstanceCreator) instanceCreators.get(type); + InstanceCreator typeCreator = (InstanceCreator) instanceCreators.get(type); if (typeCreator != null) { return new ObjectConstructor() { @Override @@ -113,7 +113,7 @@ public T construct() { // Next try raw type match for instance creators @SuppressWarnings("unchecked") // types must agree - final InstanceCreator rawTypeCreator = (InstanceCreator) instanceCreators.get(rawType); + InstanceCreator rawTypeCreator = (InstanceCreator) instanceCreators.get(rawType); if (rawTypeCreator != null) { return new ObjectConstructor() { @Override @@ -145,7 +145,7 @@ public T construct() { // Check whether type is instantiable; otherwise ReflectionAccessFilter recommendation // of adjusting filter suggested below is irrelevant since it would not solve the problem - final String exceptionMessage = checkInstantiable(rawType); + String exceptionMessage = checkInstantiable(rawType); if (exceptionMessage != null) { return new ObjectConstructor() { @Override @@ -161,7 +161,7 @@ public T construct() { // finally try unsafe return newUnsafeAllocator(rawType); } else { - final String message = + String message = "Unable to create instance of " + rawType + "; ReflectionAccessFilter does not permit using reflection or Unsafe. Register an" @@ -181,7 +181,7 @@ public T construct() { * constructor. */ private static ObjectConstructor newSpecialCollectionConstructor( - final Type type, Class rawType) { + Type type, Class rawType) { if (EnumSet.class.isAssignableFrom(rawType)) { return new ObjectConstructor() { @Override @@ -233,7 +233,7 @@ private static ObjectConstructor newDefaultConstructor( return null; } - final Constructor constructor; + Constructor constructor; try { constructor = rawType.getDeclaredConstructor(); } catch (NoSuchMethodException e) { @@ -249,7 +249,7 @@ private static ObjectConstructor newDefaultConstructor( || Modifier.isPublic(constructor.getModifiers()))); if (!canAccess) { - final String message = + String message = "Unable to invoke no-args constructor of " + rawType + ";" @@ -267,7 +267,7 @@ public T construct() { // Only try to make accessible if allowed; in all other cases checks above should // have verified that constructor is accessible if (filterResult == FilterResult.ALLOW) { - final String exceptionMessage = ReflectionHelper.tryMakeAccessible(constructor); + String exceptionMessage = ReflectionHelper.tryMakeAccessible(constructor); if (exceptionMessage != null) { /* * Create ObjectConstructor which throws exception. @@ -323,7 +323,7 @@ public T construct() { /** Constructors for common interface types like Map and List and their subtypes. */ @SuppressWarnings("unchecked") // use runtime checks to guarantee that 'T' is what it is private static ObjectConstructor newDefaultImplementationConstructor( - final Type type, Class rawType) { + Type type, Class rawType) { /* * IMPORTANT: Must only create instances for classes with public no-args constructor. @@ -409,7 +409,7 @@ public T construct() { return null; } - private ObjectConstructor newUnsafeAllocator(final Class rawType) { + private ObjectConstructor newUnsafeAllocator(Class rawType) { if (useJdkUnsafe) { return new ObjectConstructor() { @Override @@ -444,8 +444,8 @@ public T construct() { " Or adjust your R8 configuration to keep the no-args constructor of the class."; } - // Explicit final variable to allow usage in the anonymous class below - final String exceptionMessageF = exceptionMessage; + // Separate effectively final variable to allow usage in the anonymous class below + String exceptionMessageF = exceptionMessage; return new ObjectConstructor() { @Override diff --git a/gson/src/main/java/com/google/gson/internal/Excluder.java b/gson/src/main/java/com/google/gson/internal/Excluder.java index 9a6ba9db34..3744a306c1 100644 --- a/gson/src/main/java/com/google/gson/internal/Excluder.java +++ b/gson/src/main/java/com/google/gson/internal/Excluder.java @@ -108,11 +108,11 @@ public Excluder withExclusionStrategy( } @Override - public TypeAdapter create(final Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { Class rawType = type.getRawType(); - final boolean skipSerialize = excludeClass(rawType, true); - final boolean skipDeserialize = excludeClass(rawType, false); + boolean skipSerialize = excludeClass(rawType, true); + boolean skipDeserialize = excludeClass(rawType, false); if (!skipSerialize && !skipDeserialize) { return null; diff --git a/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java b/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java index 51008f840b..45a9c2905b 100644 --- a/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java +++ b/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java @@ -127,5 +127,6 @@ public int hashCode() { return delegate.hashCode(); } - // TODO: Once Gson targets Java 8 also override List.sort + // Maybe also delegate List#sort and List#spliterator in the future, but that + // requires Android API level 24 } diff --git a/gson/src/main/java/com/google/gson/internal/ReflectionAccessFilterHelper.java b/gson/src/main/java/com/google/gson/internal/ReflectionAccessFilterHelper.java index 4f66ee0799..980b29562f 100644 --- a/gson/src/main/java/com/google/gson/internal/ReflectionAccessFilterHelper.java +++ b/gson/src/main/java/com/google/gson/internal/ReflectionAccessFilterHelper.java @@ -85,7 +85,7 @@ private abstract static class AccessChecker { // TODO: Ideally should use Multi-Release JAR for this version specific code if (JavaVersion.isJava9OrLater()) { try { - final Method canAccessMethod = + Method canAccessMethod = AccessibleObject.class.getDeclaredMethod("canAccess", Object.class); accessChecker = new AccessChecker() { diff --git a/gson/src/main/java/com/google/gson/internal/UnsafeAllocator.java b/gson/src/main/java/com/google/gson/internal/UnsafeAllocator.java index 4a1073607a..fe400f8a97 100644 --- a/gson/src/main/java/com/google/gson/internal/UnsafeAllocator.java +++ b/gson/src/main/java/com/google/gson/internal/UnsafeAllocator.java @@ -54,8 +54,8 @@ private static UnsafeAllocator create() { Class unsafeClass = Class.forName("sun.misc.Unsafe"); Field f = unsafeClass.getDeclaredField("theUnsafe"); f.setAccessible(true); - final Object unsafe = f.get(null); - final Method allocateInstance = unsafeClass.getMethod("allocateInstance", Class.class); + Object unsafe = f.get(null); + Method allocateInstance = unsafeClass.getMethod("allocateInstance", Class.class); return new UnsafeAllocator() { @Override @SuppressWarnings("unchecked") @@ -77,8 +77,8 @@ public T newInstance(Class c) throws Exception { Method getConstructorId = ObjectStreamClass.class.getDeclaredMethod("getConstructorId", Class.class); getConstructorId.setAccessible(true); - final int constructorId = (Integer) getConstructorId.invoke(null, Object.class); - final Method newInstance = + int constructorId = (Integer) getConstructorId.invoke(null, Object.class); + Method newInstance = ObjectStreamClass.class.getDeclaredMethod("newInstance", Class.class, int.class); newInstance.setAccessible(true); return new UnsafeAllocator() { @@ -99,7 +99,7 @@ public T newInstance(Class c) throws Exception { // Class instantiationClass, Class constructorClass); // } try { - final Method newInstance = + Method newInstance = ObjectInputStream.class.getDeclaredMethod("newInstance", Class.class, Class.class); newInstance.setAccessible(true); return new UnsafeAllocator() { diff --git a/gson/src/main/java/com/google/gson/internal/bind/EnumTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/EnumTypeAdapter.java index bb703a13d8..5f24dc18d9 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/EnumTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/bind/EnumTypeAdapter.java @@ -54,7 +54,7 @@ public TypeAdapter create(Gson gson, TypeToken typeToken) { private final Map stringToConstant = new HashMap<>(); private final Map constantToName = new HashMap<>(); - private EnumTypeAdapter(final Class classOfT) { + private EnumTypeAdapter(Class classOfT) { try { // Uses reflection to find enum constants to work around name mismatches for obfuscated // classes diff --git a/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java b/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java index 6b5ecc6dd3..759310ea20 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java +++ b/gson/src/main/java/com/google/gson/internal/bind/JsonTreeReader.java @@ -282,14 +282,14 @@ public int nextInt() throws IOException { } JsonElement nextJsonElement() throws IOException { - final JsonToken peeked = peek(); + JsonToken peeked = peek(); if (peeked == JsonToken.NAME || peeked == JsonToken.END_ARRAY || peeked == JsonToken.END_OBJECT || peeked == JsonToken.END_DOCUMENT) { throw new IllegalStateException("Unexpected " + peeked + " when reading a JsonElement."); } - final JsonElement element = (JsonElement) peekStack(); + JsonElement element = (JsonElement) peekStack(); skipValue(); return element; } diff --git a/gson/src/main/java/com/google/gson/internal/bind/NumberTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/NumberTypeAdapter.java index 853f2a5fc0..80eabccd93 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/NumberTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/bind/NumberTypeAdapter.java @@ -41,7 +41,7 @@ private NumberTypeAdapter(ToNumberStrategy toNumberStrategy) { } private static TypeAdapterFactory newFactory(ToNumberStrategy toNumberStrategy) { - final NumberTypeAdapter adapter = new NumberTypeAdapter(toNumberStrategy); + NumberTypeAdapter adapter = new NumberTypeAdapter(toNumberStrategy); return new TypeAdapterFactory() { @SuppressWarnings("unchecked") @Override diff --git a/gson/src/main/java/com/google/gson/internal/bind/ObjectTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/ObjectTypeAdapter.java index 20d1606291..2fa704544f 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/ObjectTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/bind/ObjectTypeAdapter.java @@ -49,7 +49,7 @@ private ObjectTypeAdapter(Gson gson, ToNumberStrategy toNumberStrategy) { this.toNumberStrategy = toNumberStrategy; } - private static TypeAdapterFactory newFactory(final ToNumberStrategy toNumberStrategy) { + private static TypeAdapterFactory newFactory(ToNumberStrategy toNumberStrategy) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") @Override 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 79e93bcc77..94396ff1eb 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 @@ -103,7 +103,7 @@ private List getFieldNames(Field f) { } @Override - public TypeAdapter create(Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { Class raw = type.getRawType(); if (!Object.class.isAssignableFrom(raw)) { @@ -175,18 +175,18 @@ private static void checkAccessible( } private BoundField createBoundField( - final Gson context, - final Field field, - final Method accessor, - final String serializedName, - final TypeToken fieldType, - final boolean serialize, - final boolean blockInaccessible) { + Gson context, + Field field, + Method accessor, + String serializedName, + TypeToken fieldType, + boolean serialize, + boolean blockInaccessible) { - final boolean isPrimitive = Primitives.isPrimitive(fieldType.getRawType()); + boolean isPrimitive = Primitives.isPrimitive(fieldType.getRawType()); int modifiers = field.getModifiers(); - final boolean isStaticFinalField = Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers); + boolean isStaticFinalField = Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers); JsonAdapter annotation = field.getAnnotation(JsonAdapter.class); TypeAdapter mapped = null; @@ -196,14 +196,14 @@ private BoundField createBoundField( jsonAdapterFactory.getTypeAdapter( constructorConstructor, context, fieldType, annotation, false); } - final boolean jsonAdapterPresent = mapped != null; + boolean jsonAdapterPresent = mapped != null; if (mapped == null) { mapped = context.getAdapter(fieldType); } @SuppressWarnings("unchecked") - final TypeAdapter typeAdapter = (TypeAdapter) mapped; - final TypeAdapter writeTypeAdapter; + TypeAdapter typeAdapter = (TypeAdapter) mapped; + TypeAdapter writeTypeAdapter; if (serialize) { writeTypeAdapter = jsonAdapterPresent diff --git a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java index 5543fec39b..71f98c0034 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java +++ b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java @@ -815,7 +815,7 @@ public void write(JsonWriter out, Locale value) throws IOException { @SuppressWarnings("TypeParameterNaming") public static TypeAdapterFactory newFactory( - final TypeToken type, final TypeAdapter typeAdapter) { + TypeToken type, TypeAdapter typeAdapter) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") // we use a runtime check to make sure the 'T's equal @Override @@ -826,8 +826,7 @@ public TypeAdapter create(Gson gson, TypeToken typeToken) { } @SuppressWarnings("TypeParameterNaming") - public static TypeAdapterFactory newFactory( - final Class type, final TypeAdapter typeAdapter) { + public static TypeAdapterFactory newFactory(Class type, TypeAdapter typeAdapter) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") // we use a runtime check to make sure the 'T's equal @Override @@ -844,7 +843,7 @@ public String toString() { @SuppressWarnings("TypeParameterNaming") public static TypeAdapterFactory newFactory( - final Class unboxed, final Class boxed, final TypeAdapter typeAdapter) { + Class unboxed, Class boxed, TypeAdapter typeAdapter) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") // we use a runtime check to make sure the 'T's equal @Override @@ -868,9 +867,7 @@ public String toString() { @SuppressWarnings("TypeParameterNaming") public static TypeAdapterFactory newFactoryForMultipleTypes( - final Class base, - final Class sub, - final TypeAdapter typeAdapter) { + Class base, Class sub, TypeAdapter typeAdapter) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") // we use a runtime check to make sure the 'T's equal @Override @@ -897,12 +894,12 @@ public String toString() { * that the deserialized type matches the type requested. */ public static TypeAdapterFactory newTypeHierarchyFactory( - final Class clazz, final TypeAdapter typeAdapter) { + Class clazz, TypeAdapter typeAdapter) { return new TypeAdapterFactory() { @SuppressWarnings("unchecked") @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { - final Class requestedType = typeToken.getRawType(); + Class requestedType = typeToken.getRawType(); if (!clazz.isAssignableFrom(requestedType)) { return null; } diff --git a/gson/src/main/java/com/google/gson/internal/reflect/ReflectionHelper.java b/gson/src/main/java/com/google/gson/internal/reflect/ReflectionHelper.java index 7ee75bde92..7a845ce515 100644 --- a/gson/src/main/java/com/google/gson/internal/reflect/ReflectionHelper.java +++ b/gson/src/main/java/com/google/gson/internal/reflect/ReflectionHelper.java @@ -128,7 +128,8 @@ public static String constructorToString(Constructor constructor) { return stringBuilder.toString(); } - // Ideally parameter type would be java.lang.reflect.Executable, but that was added in Java 8 + // Ideally parameter type would be java.lang.reflect.Executable, but that was added + // in Android API level 26 private static void appendExecutableParameters( AccessibleObject executable, StringBuilder stringBuilder) { stringBuilder.append('('); diff --git a/gson/src/main/java/com/google/gson/internal/sql/SqlTimestampTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/sql/SqlTimestampTypeAdapter.java index 63c4b86d51..ab1cefe544 100644 --- a/gson/src/main/java/com/google/gson/internal/sql/SqlTimestampTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/sql/SqlTimestampTypeAdapter.java @@ -34,7 +34,7 @@ class SqlTimestampTypeAdapter extends TypeAdapter { @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { if (typeToken.getRawType() == Timestamp.class) { - final TypeAdapter dateTypeAdapter = gson.getAdapter(Date.class); + TypeAdapter dateTypeAdapter = gson.getAdapter(Date.class); return (TypeAdapter) new SqlTimestampTypeAdapter(dateTypeAdapter); } else { return null; diff --git a/gson/src/test/java/com/google/gson/GsonBuilderTest.java b/gson/src/test/java/com/google/gson/GsonBuilderTest.java index cbebb1d619..f5890e7161 100644 --- a/gson/src/test/java/com/google/gson/GsonBuilderTest.java +++ b/gson/src/test/java/com/google/gson/GsonBuilderTest.java @@ -254,17 +254,17 @@ public void testSetLenient() throws IOException { @Test public void testSetStrictness() throws IOException { - final Strictness STRICTNESS = Strictness.STRICT; + Strictness strictness = Strictness.STRICT; GsonBuilder builder = new GsonBuilder(); - builder.setStrictness(STRICTNESS); + builder.setStrictness(strictness); Gson gson = builder.create(); - assertThat(gson.newJsonReader(new StringReader("{}")).getStrictness()).isEqualTo(STRICTNESS); - assertThat(gson.newJsonWriter(new StringWriter()).getStrictness()).isEqualTo(STRICTNESS); + assertThat(gson.newJsonReader(new StringReader("{}")).getStrictness()).isEqualTo(strictness); + assertThat(gson.newJsonWriter(new StringWriter()).getStrictness()).isEqualTo(strictness); } @Test public void testRegisterTypeAdapterForObjectAndJsonElements() { - final String ERROR_MESSAGE = "Cannot override built-in adapter for "; + String errorMessage = "Cannot override built-in adapter for "; Type[] types = { Object.class, JsonElement.class, JsonArray.class, }; @@ -274,13 +274,13 @@ public void testRegisterTypeAdapterForObjectAndJsonElements() { assertThrows( IllegalArgumentException.class, () -> gsonBuilder.registerTypeAdapter(type, NULL_TYPE_ADAPTER)); - assertThat(e).hasMessageThat().isEqualTo(ERROR_MESSAGE + type); + assertThat(e).hasMessageThat().isEqualTo(errorMessage + type); } } @Test public void testRegisterTypeHierarchyAdapterJsonElements() { - final String ERROR_MESSAGE = "Cannot override built-in adapter for "; + String errorMessage = "Cannot override built-in adapter for "; Class[] types = { JsonElement.class, JsonArray.class, }; @@ -291,7 +291,7 @@ public void testRegisterTypeHierarchyAdapterJsonElements() { IllegalArgumentException.class, () -> gsonBuilder.registerTypeHierarchyAdapter(type, NULL_TYPE_ADAPTER)); - assertThat(e).hasMessageThat().isEqualTo(ERROR_MESSAGE + type); + assertThat(e).hasMessageThat().isEqualTo(errorMessage + type); } // But registering type hierarchy adapter for Object should be allowed gsonBuilder.registerTypeHierarchyAdapter(Object.class, NULL_TYPE_ADAPTER); diff --git a/gson/src/test/java/com/google/gson/GsonTest.java b/gson/src/test/java/com/google/gson/GsonTest.java index 8bfc69b45a..94c4409a42 100644 --- a/gson/src/test/java/com/google/gson/GsonTest.java +++ b/gson/src/test/java/com/google/gson/GsonTest.java @@ -28,7 +28,6 @@ import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; -import java.lang.reflect.Field; import java.lang.reflect.Type; import java.text.DateFormat; import java.util.ArrayList; @@ -49,13 +48,7 @@ public final class GsonTest { private static final Excluder CUSTOM_EXCLUDER = Excluder.DEFAULT.excludeFieldsWithoutExposeAnnotation().disableInnerClassSerialization(); - private static final FieldNamingStrategy CUSTOM_FIELD_NAMING_STRATEGY = - new FieldNamingStrategy() { - @Override - public String translateName(Field f) { - return "foo"; - } - }; + private static final FieldNamingStrategy CUSTOM_FIELD_NAMING_STRATEGY = f -> "foo"; private static final ToNumberStrategy CUSTOM_OBJECT_TO_NUMBER_STRATEGY = ToNumberPolicy.DOUBLE; private static final ToNumberStrategy CUSTOM_NUMBER_TO_NUMBER_STRATEGY = @@ -164,9 +157,9 @@ public T read(JsonReader in) throws IOException { } } - final AtomicInteger adapterInstancesCreated = new AtomicInteger(0); - final AtomicReference> threadAdapter = new AtomicReference<>(); - final Class requestedType = Number.class; + AtomicInteger adapterInstancesCreated = new AtomicInteger(0); + AtomicReference> threadAdapter = new AtomicReference<>(); + Class requestedType = Number.class; Gson gson = new GsonBuilder() @@ -175,7 +168,7 @@ public T read(JsonReader in) throws IOException { private volatile boolean isFirstCall = true; @Override - public TypeAdapter create(final Gson gson, TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { if (isFirstCall) { isFirstCall = false; @@ -253,10 +246,10 @@ public T read(JsonReader in) throws IOException { } } - final CountDownLatch isThreadWaiting = new CountDownLatch(1); - final CountDownLatch canThreadProceed = new CountDownLatch(1); + CountDownLatch isThreadWaiting = new CountDownLatch(1); + CountDownLatch canThreadProceed = new CountDownLatch(1); - final Gson gson = + Gson gson = new GsonBuilder() .registerTypeAdapterFactory( new TypeAdapterFactory() { @@ -298,7 +291,7 @@ public TypeAdapter create(Gson gson, TypeToken type) { }) .create(); - final AtomicReference> otherThreadAdapter = new AtomicReference<>(); + AtomicReference> otherThreadAdapter = new AtomicReference<>(); Thread thread = new Thread() { @Override diff --git a/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java b/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java index a9a62eba1d..50e101c6b6 100644 --- a/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java +++ b/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java @@ -22,7 +22,11 @@ import com.google.gson.common.MoreAsserts; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.Spliterator; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import org.junit.Test; /** Tests for {@link JsonArray#asList()}. */ @@ -200,6 +204,67 @@ public void testIndexOf() { assertThat(list.lastIndexOf(null)).isEqualTo(-1); } + private List spliteratorToList(Spliterator spliterator) { + return StreamSupport.stream(spliterator, false).collect(Collectors.toList()); + } + + @Test + public void testSpliterator() { + JsonArray a = new JsonArray(); + a.add(1); + a.add(3); + a.add(2); + + List list = a.asList(); + List values = spliteratorToList(list.spliterator()); + assertThat(values) + .containsExactly(new JsonPrimitive(1), new JsonPrimitive(3), new JsonPrimitive(2)) + .inOrder(); + + list = new JsonArray().asList(); + assertThat(spliteratorToList(list.spliterator())).isEmpty(); + } + + @Test + public void testSort() { + JsonArray a = new JsonArray(); + a.add(1); + a.add(3); + a.add(2); + + List list = a.asList(); + // JsonElement does not implement Comparable + assertThrows(ClassCastException.class, () -> list.sort(null)); + + list.sort(Comparator.comparingInt(JsonElement::getAsInt)); + assertThat(list) + .containsExactly(new JsonPrimitive(1), new JsonPrimitive(2), new JsonPrimitive(3)) + .inOrder(); + assertThat(a) + .containsExactly(new JsonPrimitive(1), new JsonPrimitive(2), new JsonPrimitive(3)) + .inOrder(); + } + + @Test + public void testReplaceAll() { + JsonArray a = new JsonArray(); + a.add(1); + a.add(3); + a.add(2); + + List list = a.asList(); + list.replaceAll(element -> new JsonPrimitive(-element.getAsInt())); + assertThat(list) + .containsExactly(new JsonPrimitive(-1), new JsonPrimitive(-3), new JsonPrimitive(-2)) + .inOrder(); + assertThat(a) + .containsExactly(new JsonPrimitive(-1), new JsonPrimitive(-3), new JsonPrimitive(-2)) + .inOrder(); + + var e = assertThrows(NullPointerException.class, () -> list.replaceAll(element -> null)); + assertThat(e).hasMessageThat().isEqualTo("Element must be non-null"); + } + @Test public void testToArray() { JsonArray a = new JsonArray(); diff --git a/gson/src/test/java/com/google/gson/TypeAdapterTest.java b/gson/src/test/java/com/google/gson/TypeAdapterTest.java index e95b029aa5..8f4806f821 100644 --- a/gson/src/test/java/com/google/gson/TypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/TypeAdapterTest.java @@ -78,7 +78,7 @@ public String toString() { */ @Test public void testToJson_ThrowingIOException() { - final IOException exception = new IOException("test"); + IOException exception = new IOException("test"); TypeAdapter adapter = new TypeAdapter<>() { @Override diff --git a/gson/src/test/java/com/google/gson/common/TestTypes.java b/gson/src/test/java/com/google/gson/common/TestTypes.java index b41f4b36da..234acb0cc6 100644 --- a/gson/src/test/java/com/google/gson/common/TestTypes.java +++ b/gson/src/test/java/com/google/gson/common/TestTypes.java @@ -144,7 +144,7 @@ public String getExpectedJson() { @Override public int hashCode() { - final int prime = 31; + int prime = 31; int result = 1; result = prime * result + (booleanValue ? 1231 : 1237); result = prime * result + intValue; diff --git a/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java b/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java index f0e389eef4..fe77cddd69 100644 --- a/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java +++ b/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java @@ -71,9 +71,9 @@ public void testSingleThreadDeserialization() { */ @Test public void testMultiThreadSerialization() throws InterruptedException { - final CountDownLatch startLatch = new CountDownLatch(1); - final CountDownLatch finishedLatch = new CountDownLatch(10); - final AtomicReference error = new AtomicReference<>(null); + CountDownLatch startLatch = new CountDownLatch(1); + CountDownLatch finishedLatch = new CountDownLatch(10); + AtomicReference error = new AtomicReference<>(null); ExecutorService executor = Executors.newFixedThreadPool(10); for (int taskCount = 0; taskCount < 10; taskCount++) { executor.execute( @@ -106,9 +106,9 @@ public void run() { */ @Test public void testMultiThreadDeserialization() throws InterruptedException { - final CountDownLatch startLatch = new CountDownLatch(1); - final CountDownLatch finishedLatch = new CountDownLatch(10); - final AtomicReference error = new AtomicReference<>(null); + CountDownLatch startLatch = new CountDownLatch(1); + CountDownLatch finishedLatch = new CountDownLatch(10); + AtomicReference error = new AtomicReference<>(null); ExecutorService executor = Executors.newFixedThreadPool(10); for (int taskCount = 0; taskCount < 10; taskCount++) { executor.execute( diff --git a/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java b/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java index 8c837fa051..d10ab42dcb 100644 --- a/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java @@ -77,7 +77,7 @@ private static class StatsTypeAdapterFactory implements TypeAdapterFactory { @Override public TypeAdapter create(Gson gson, TypeToken type) { - final TypeAdapter delegate = gson.getDelegateAdapter(this, type); + TypeAdapter delegate = gson.getDelegateAdapter(this, type); return new TypeAdapter<>() { @Override public void write(JsonWriter out, T value) throws IOException { diff --git a/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnClassesTest.java b/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnClassesTest.java index 081b869e93..a92ee2a2e4 100644 --- a/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnClassesTest.java +++ b/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnClassesTest.java @@ -263,7 +263,7 @@ private static class C { static final class JsonAdapterFactory implements TypeAdapterFactory { @Override - public TypeAdapter create(Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { return new TypeAdapter<>() { @Override public void write(JsonWriter out, T value) throws IOException { diff --git a/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnFieldsTest.java b/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnFieldsTest.java index 277babad74..0c8422952b 100644 --- a/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnFieldsTest.java +++ b/gson/src/test/java/com/google/gson/functional/JsonAdapterAnnotationOnFieldsTest.java @@ -146,7 +146,7 @@ public Part read(JsonReader in) throws IOException { private static class GizmoPartTypeAdapterFactory implements TypeAdapterFactory { @Override - public TypeAdapter create(Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { return new TypeAdapter<>() { @Override public void write(JsonWriter out, T value) throws IOException { @@ -317,7 +317,7 @@ public Long read(JsonReader in) throws IOException { @SuppressWarnings("unchecked") @Override - public TypeAdapter create(Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { Class cls = type.getRawType(); if (Long.class.isAssignableFrom(cls)) { return (TypeAdapter) ADAPTER; @@ -351,7 +351,7 @@ private static final class Gizmo2 { private static class Gizmo2PartTypeAdapterFactory implements TypeAdapterFactory { @Override - public TypeAdapter create(Gson gson, final TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { return new TypeAdapter<>() { @Override public void write(JsonWriter out, T value) throws IOException { diff --git a/gson/src/test/java/com/google/gson/functional/MapTest.java b/gson/src/test/java/com/google/gson/functional/MapTest.java index 293178c607..99ac53b1d2 100644 --- a/gson/src/test/java/com/google/gson/functional/MapTest.java +++ b/gson/src/test/java/com/google/gson/functional/MapTest.java @@ -520,7 +520,7 @@ public final void testInterfaceTypeMapWithSerializer() { Gson tempGson = new Gson(); String subTypeJson = tempGson.toJson(subType); - final JsonElement baseTypeJsonElement = tempGson.toJsonTree(subType, TestTypes.Base.class); + JsonElement baseTypeJsonElement = tempGson.toJsonTree(subType, TestTypes.Base.class); String baseTypeJson = tempGson.toJson(baseTypeJsonElement); String expected = "{\"bases\":{\"Test\":" + baseTypeJson + "},\"subs\":{\"Test\":" + subTypeJson + "}}"; diff --git a/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java b/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java index 70780bf7a0..c419f6155d 100644 --- a/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java +++ b/gson/src/test/java/com/google/gson/functional/NamingPolicyTest.java @@ -156,16 +156,7 @@ public void testGsonDuplicateNameUsingSerializedNameFieldNamingPolicySerializati @Test public void testGsonDuplicateNameDueToBadNamingPolicy() { - Gson gson = - builder - .setFieldNamingStrategy( - new FieldNamingStrategy() { - @Override - public String translateName(Field f) { - return "x"; - } - }) - .create(); + Gson gson = builder.setFieldNamingStrategy(f -> "x").create(); var e = assertThrows(IllegalArgumentException.class, () -> gson.toJson(new ClassWithTwoFields())); diff --git a/gson/src/test/java/com/google/gson/functional/ObjectTest.java b/gson/src/test/java/com/google/gson/functional/ObjectTest.java index 9da8ab9869..13582fa218 100644 --- a/gson/src/test/java/com/google/gson/functional/ObjectTest.java +++ b/gson/src/test/java/com/google/gson/functional/ObjectTest.java @@ -488,7 +488,7 @@ public void testInnerClassSerialization() { @Test public void testInnerClassDeserialization() { - final Parent p = new Parent(); + Parent p = new Parent(); Gson gson = new GsonBuilder() .registerTypeAdapter( diff --git a/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java b/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java index b408544d5e..81de888043 100644 --- a/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java +++ b/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java @@ -437,7 +437,7 @@ private MultiParameters() {} @Override public int hashCode() { - final int prime = 31; + int prime = 31; int result = 1; result = prime * result + ((a == null) ? 0 : a.hashCode()); result = prime * result + ((b == null) ? 0 : b.hashCode()); diff --git a/gson/src/test/java/com/google/gson/functional/ReflectionAccessTest.java b/gson/src/test/java/com/google/gson/functional/ReflectionAccessTest.java index c3e14c3467..ba0542590c 100644 --- a/gson/src/test/java/com/google/gson/functional/ReflectionAccessTest.java +++ b/gson/src/test/java/com/google/gson/functional/ReflectionAccessTest.java @@ -60,8 +60,8 @@ public void testRestrictiveSecurityManager() throws Exception { // Class.getDeclaredFields() Class clazz = loadClassWithDifferentClassLoader(ClassWithPrivateMembers.class); - final Permission accessDeclaredMembers = new RuntimePermission("accessDeclaredMembers"); - final Permission suppressAccessChecks = new ReflectPermission("suppressAccessChecks"); + Permission accessDeclaredMembers = new RuntimePermission("accessDeclaredMembers"); + Permission suppressAccessChecks = new ReflectPermission("suppressAccessChecks"); SecurityManager original = System.getSecurityManager(); SecurityManager restrictiveManager = new SecurityManager() { @@ -83,7 +83,7 @@ public void checkPermission(Permission perm) { var e = assertThrows(SecurityException.class, () -> gson.getAdapter(clazz)); assertThat(e).hasMessageThat().isEqualTo("Gson: no-member-access"); - final AtomicBoolean wasReadCalled = new AtomicBoolean(false); + AtomicBoolean wasReadCalled = new AtomicBoolean(false); Gson gson2 = new GsonBuilder() .registerTypeAdapter( diff --git a/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java b/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java index 3fae2da586..1a9e6bc916 100644 --- a/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java +++ b/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java @@ -166,8 +166,8 @@ public TypeAdapter create(Gson gson, TypeToken type) { return null; } - final Map> labelToDelegate = new LinkedHashMap<>(); - final Map, TypeAdapter> subtypeToDelegate = new LinkedHashMap<>(); + Map> labelToDelegate = new LinkedHashMap<>(); + Map, TypeAdapter> subtypeToDelegate = new LinkedHashMap<>(); for (Map.Entry> entry : labelToSubtype.entrySet()) { TypeAdapter delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); labelToDelegate.put(entry.getKey(), delegate); diff --git a/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java b/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java index 52d04d9ba2..4a26dda596 100644 --- a/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java +++ b/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java @@ -139,7 +139,7 @@ private Foo(String name) { } } - private static JsonSerializer newSerializer(final String name) { + private static JsonSerializer newSerializer(String name) { return new JsonSerializer<>() { @Override public JsonElement serialize(Foo src, Type typeOfSrc, JsonSerializationContext context) { @@ -148,7 +148,7 @@ public JsonElement serialize(Foo src, Type typeOfSrc, JsonSerializationContext c }; } - private static JsonDeserializer newDeserializer(final String name) { + private static JsonDeserializer newDeserializer(String name) { return new JsonDeserializer<>() { @Override public Foo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { @@ -157,7 +157,7 @@ public Foo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContex }; } - private static TypeAdapter newTypeAdapter(final String name) { + private static TypeAdapter newTypeAdapter(String name) { return new TypeAdapter<>() { @Override public Foo read(JsonReader in) throws IOException { diff --git a/gson/src/test/java/com/google/gson/internal/bind/Java17ReflectiveTypeAdapterFactoryTest.java b/gson/src/test/java/com/google/gson/internal/bind/Java17ReflectiveTypeAdapterFactoryTest.java index a6ebda5633..931b1252b0 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/Java17ReflectiveTypeAdapterFactoryTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/Java17ReflectiveTypeAdapterFactoryTest.java @@ -87,7 +87,7 @@ public void write(JsonWriter out, T principal) throws IOException { @Override public T read(JsonReader in) throws IOException { - final String name = in.nextString(); + String name = in.nextString(); // This type adapter is only used for Group and User Principal, both of which are implemented // by PrincipalImpl. @SuppressWarnings("unchecked") diff --git a/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java b/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java index d7786470ba..2c6b353c52 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java @@ -258,7 +258,7 @@ public void testWrongType() throws IOException { @Test public void testNextJsonElement() throws IOException { - final JsonElement element = JsonParser.parseString("{\"A\": 1, \"B\" : {}, \"C\" : []}"); + JsonElement element = JsonParser.parseString("{\"A\": 1, \"B\" : {}, \"C\" : []}"); JsonTreeReader reader = new JsonTreeReader(element); reader.beginObject(); diff --git a/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java b/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java index e7a3e4d655..ab134f5d20 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java @@ -119,7 +119,7 @@ public void testDateParseSpecialTimezone() throws ParseException { @Test public void testDateParseInvalidTime() { - final String dateStr = "2018-06-25T61:60:62-03:00"; + String dateStr = "2018-06-25T61:60:62-03:00"; assertThrows(ParseException.class, () -> ISO8601Utils.parse(dateStr, new ParsePosition(0))); } } diff --git a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java index dfd24d5765..f8a33be0df 100644 --- a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java +++ b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java @@ -2171,7 +2171,7 @@ private static void assertDocument(String document, Object... expectations) thro } /** Returns a reader that returns one character at a time. */ - private static Reader reader(final String s) { + private static Reader reader(String s) { /* if (true) */ return new StringReader(s); /* return new Reader() { int position = 0; diff --git a/metrics/src/main/java/com/google/gson/metrics/BagOfPrimitives.java b/metrics/src/main/java/com/google/gson/metrics/BagOfPrimitives.java index 44c46199ee..c6b38ff620 100644 --- a/metrics/src/main/java/com/google/gson/metrics/BagOfPrimitives.java +++ b/metrics/src/main/java/com/google/gson/metrics/BagOfPrimitives.java @@ -63,7 +63,7 @@ public String getExpectedJson() { @Override public int hashCode() { - final int prime = 31; + int prime = 31; int result = 1; result = prime * result + (booleanValue ? 1231 : 1237); result = prime * result + intValue; diff --git a/pom.xml b/pom.xml index a5b279aa01..7adf82b300 100644 --- a/pom.xml +++ b/pom.xml @@ -127,9 +127,9 @@ - - [11,18) + + [11,22) @@ -280,10 +280,9 @@ -Xep:UngroupedOverloads:WARN -Xep:UnnecessarilyFullyQualified -Xep:UnnecessarilyUsedValue - -Xep:UnnecessaryAnonymousClass:OFF -Xep:UnnecessaryBoxedVariable:WARN -Xep:UnnecessaryDefaultInEnumSwitch - -Xep:UnnecessaryFinal:OFF + -Xep:UnnecessaryFinal -Xep:UnnecessaryStaticImport:WARN -Xep:UnusedException -Xep:UrlInSee diff --git a/proto/src/main/java/com/google/gson/protobuf/ProtoTypeAdapter.java b/proto/src/main/java/com/google/gson/protobuf/ProtoTypeAdapter.java index 30146c54fc..c18d1cee0a 100644 --- a/proto/src/main/java/com/google/gson/protobuf/ProtoTypeAdapter.java +++ b/proto/src/main/java/com/google/gson/protobuf/ProtoTypeAdapter.java @@ -252,10 +252,10 @@ private ProtoTypeAdapter( @Override public JsonElement serialize(Message src, Type typeOfSrc, JsonSerializationContext context) { JsonObject ret = new JsonObject(); - final Map fields = src.getAllFields(); + Map fields = src.getAllFields(); for (Map.Entry fieldPair : fields.entrySet()) { - final FieldDescriptor desc = fieldPair.getKey(); + FieldDescriptor desc = fieldPair.getKey(); String name = getCustSerializedName(desc); if (desc.getType() == ENUM_TYPE) { diff --git a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java index e0be7441e3..d85577e5e0 100644 --- a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java @@ -85,12 +85,12 @@ public void testDeserializeRepeatedFieldsProto() { @Test public void testSerializeDifferentCaseFormat() { - final ProtoWithDifferentCaseFormat proto = + ProtoWithDifferentCaseFormat proto = ProtoWithDifferentCaseFormat.newBuilder() .setAnotherField("foo") .addNameThatTestsCaseFormat("bar") .build(); - final JsonObject json = upperCamelGson.toJsonTree(proto).getAsJsonObject(); + JsonObject json = upperCamelGson.toJsonTree(proto).getAsJsonObject(); assertThat(json.get("AnotherField").getAsString()).isEqualTo("foo"); assertThat(json.get("NameThatTestsCaseFormat").getAsJsonArray().get(0).getAsString()) .isEqualTo("bar"); @@ -98,7 +98,7 @@ public void testSerializeDifferentCaseFormat() { @Test public void testDeserializeDifferentCaseFormat() { - final String json = "{NameThatTestsCaseFormat:['bar'],AnotherField:'foo'}"; + String json = "{NameThatTestsCaseFormat:['bar'],AnotherField:'foo'}"; ProtoWithDifferentCaseFormat proto = upperCamelGson.fromJson(json, ProtoWithDifferentCaseFormat.class); assertThat(proto.getAnotherField()).isEqualTo("foo");