From f7a164d98b77d7f7e3f918115781e74fdede5bdb Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 27 Aug 2022 02:36:18 +0200 Subject: [PATCH] Fail Maven build on compiler warnings; remove some warning suppressions (#2183) * Fail Maven build on compiler warnings; remove some warning suppressions * Fix compiler warnings causing failure for newer JDK * Improve placement of "raw" and "unchecked" warning suppressions * Adjust javac documentation link * Fix compilation error on newer JDKs --- .../gson/graph/GraphAdapterBuilder.java | 11 +++-- .../PostConstructAdapterFactoryTest.java | 9 ++-- gson/src/main/java/com/google/gson/Gson.java | 19 +++++---- .../java/com/google/gson/GsonBuilder.java | 12 +++--- .../gson/internal/LazilyParsedNumber.java | 1 + .../google/gson/internal/LinkedTreeMap.java | 4 +- .../gson/internal/bind/ArrayTypeAdapter.java | 8 ++-- ...onAdapterAnnotationTypeAdapterFactory.java | 13 +++--- .../gson/internal/bind/ObjectTypeAdapter.java | 2 +- .../bind/ReflectiveTypeAdapterFactory.java | 10 ++--- .../bind/TypeAdapterRuntimeTypeWrapper.java | 13 +++--- .../gson/internal/bind/TypeAdapters.java | 5 ++- .../com/google/gson/stream/JsonReader.java | 4 ++ .../com/google/gson/stream/JsonWriter.java | 2 +- .../com/google/gson/common/TestTypes.java | 16 +++---- .../com/google/gson/functional/ArrayTest.java | 2 +- .../gson/functional/CollectionTest.java | 42 +++++++++---------- .../functional/CustomTypeAdaptersTest.java | 11 ++--- .../functional/DefaultTypeAdaptersTest.java | 8 ++-- .../gson/functional/InstanceCreatorTest.java | 14 +++---- .../google/gson/functional/JsonArrayTest.java | 3 +- .../com/google/gson/functional/MapTest.java | 32 +++++++------- .../google/gson/functional/ObjectTest.java | 7 +--- .../functional/ParameterizedTypesTest.java | 32 +++++++------- .../gson/functional/PrintFormattingTest.java | 9 ++-- .../gson/functional/TreeTypeAdaptersTest.java | 19 ++++----- .../gson/functional/TypeVariableTest.java | 10 ++--- .../google/gson/internal/JavaVersionTest.java | 5 ++- .../gson/internal/LinkedTreeMapTest.java | 1 + pom.xml | 8 ++++ 30 files changed, 164 insertions(+), 168 deletions(-) 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 e6a07f14..c48c3cd9 100644 --- a/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java +++ b/extras/src/main/java/com/google/gson/graph/GraphAdapterBuilder.java @@ -42,7 +42,6 @@ import java.util.Queue; * Writes a graph of objects as a list of named nodes. */ // TODO: proper documentation -@SuppressWarnings("rawtypes") public final class GraphAdapterBuilder { private final Map> instanceCreators; private final ConstructorConstructor constructorConstructor; @@ -78,7 +77,7 @@ public final class GraphAdapterBuilder { } } - static class Factory implements TypeAdapterFactory, InstanceCreator { + static class Factory implements TypeAdapterFactory, InstanceCreator { private final Map> instanceCreators; private final ThreadLocal graphThreadLocal = new ThreadLocal<>(); @@ -215,7 +214,6 @@ public final class GraphAdapterBuilder { *

Gson should only ever call this method when we're expecting it to; * that is only when we've called back into Gson to deserialize a tree. */ - @SuppressWarnings("unchecked") @Override public Object createInstance(Type type) { Graph graph = graphThreadLocal.get(); @@ -242,14 +240,14 @@ public final class GraphAdapterBuilder { * The queue of elements to write during serialization. Unused during * deserialization. */ - private final Queue queue = new LinkedList<>(); + private final Queue> queue = new LinkedList<>(); /** * The instance currently being deserialized. Used as a backdoor between * the graph traversal (which needs to know instances) and instance creators * which create them. */ - private Element nextCreate; + private Element nextCreate; private Graph(Map> map) { this.map = map; @@ -299,11 +297,12 @@ public final class GraphAdapterBuilder { typeAdapter.write(out, value); } + @SuppressWarnings("unchecked") void read(Graph graph) throws IOException { if (graph.nextCreate != null) { throw new IllegalStateException("Unexpected recursive call to read() for " + id); } - graph.nextCreate = this; + graph.nextCreate = (Element) this; value = typeAdapter.fromJsonTree(element); if (value == null) { throw new IllegalStateException("non-null value deserialized to null: " + element); 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 e3574bbc..4ade154f 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java @@ -16,15 +16,12 @@ package com.google.gson.typeadapters; -import javax.annotation.PostConstruct; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; - -import junit.framework.TestCase; - import java.util.Arrays; import java.util.List; +import javax.annotation.PostConstruct; +import junit.framework.TestCase; public class PostConstructAdapterFactoryTest extends TestCase { public void test() throws Exception { @@ -55,6 +52,7 @@ public class PostConstructAdapterFactoryTest extends TestCase { assertEquals(sandwiches, sandwichesFromJson); } + @SuppressWarnings("overrides") // for missing hashCode() override static class Sandwich { public String bread; public String cheese; @@ -89,6 +87,7 @@ public class PostConstructAdapterFactoryTest extends TestCase { } } + @SuppressWarnings("overrides") // for missing hashCode() override static class MultipleSandwiches { public List sandwiches; diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index f5045a1c..168bc6f1 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -503,12 +503,13 @@ public final class Gson { * @throws IllegalArgumentException if this GSON cannot serialize and * deserialize {@code type}. */ - @SuppressWarnings("unchecked") public TypeAdapter getAdapter(TypeToken type) { Objects.requireNonNull(type, "type must not be null"); TypeAdapter cached = typeTokenCache.get(type); if (cached != null) { - return (TypeAdapter) cached; + @SuppressWarnings("unchecked") + TypeAdapter adapter = (TypeAdapter) cached; + return adapter; } Map, FutureTypeAdapter> threadCalls = calls.get(); @@ -520,6 +521,7 @@ public final class Gson { } // the key and value type parameters always agree + @SuppressWarnings("unchecked") FutureTypeAdapter ongoingCall = (FutureTypeAdapter) threadCalls.get(type); if (ongoingCall != null) { return ongoingCall; @@ -532,6 +534,7 @@ public final class Gson { for (TypeAdapterFactory factory : factories) { TypeAdapter candidate = factory.create(this, type); if (candidate != null) { + @SuppressWarnings("unchecked") TypeAdapter existingAdapter = (TypeAdapter) typeTokenCache.putIfAbsent(type, candidate); // If other thread concurrently added adapter prefer that one instead if (existingAdapter != null) { @@ -780,9 +783,9 @@ public final class Gson { * * @throws JsonIOException if there was a problem writing to the writer */ - @SuppressWarnings("unchecked") public void toJson(Object src, Type typeOfSrc, JsonWriter writer) throws JsonIOException { - TypeAdapter adapter = getAdapter(TypeToken.get(typeOfSrc)); + @SuppressWarnings("unchecked") + TypeAdapter adapter = (TypeAdapter) getAdapter(TypeToken.get(typeOfSrc)); boolean oldLenient = writer.isLenient(); writer.setLenient(true); boolean oldHtmlSafe = writer.isHtmlSafe(); @@ -790,7 +793,7 @@ public final class Gson { boolean oldSerializeNulls = writer.getSerializeNulls(); writer.setSerializeNulls(serializeNulls); try { - ((TypeAdapter) adapter).write(writer, src); + adapter.write(writer, src); } catch (IOException e) { throw new JsonIOException(e); } catch (AssertionError e) { @@ -957,12 +960,12 @@ public final class Gson { * @throws JsonParseException if json is not a valid representation for an object of type typeOfT * @throws JsonSyntaxException if json is not a valid representation for an object of type */ - @SuppressWarnings("unchecked") public T fromJson(String json, Type typeOfT) throws JsonSyntaxException { if (json == null) { return null; } StringReader reader = new StringReader(json); + @SuppressWarnings("unchecked") T target = (T) fromJson(reader, typeOfT); return target; } @@ -1017,9 +1020,9 @@ public final class Gson { * @throws JsonSyntaxException if json is not a valid representation for an object of type * @since 1.2 */ - @SuppressWarnings("unchecked") public T fromJson(Reader json, Type typeOfT) throws JsonIOException, JsonSyntaxException { JsonReader jsonReader = newJsonReader(json); + @SuppressWarnings("unchecked") T object = (T) fromJson(jsonReader, typeOfT); assertFullConsumption(object, jsonReader); return object; @@ -1052,7 +1055,6 @@ public final class Gson { * @throws JsonIOException if there was a problem writing to the Reader * @throws JsonSyntaxException if json is not a valid representation for an object of type */ - @SuppressWarnings("unchecked") public T fromJson(JsonReader reader, Type typeOfT) throws JsonIOException, JsonSyntaxException { boolean isEmpty = true; boolean oldLenient = reader.isLenient(); @@ -1060,6 +1062,7 @@ public final class Gson { try { reader.peek(); isEmpty = false; + @SuppressWarnings("unchecked") TypeToken typeToken = (TypeToken) TypeToken.get(typeOfT); TypeAdapter typeAdapter = getAdapter(typeToken); T object = typeAdapter.read(reader); diff --git a/gson/src/main/java/com/google/gson/GsonBuilder.java b/gson/src/main/java/com/google/gson/GsonBuilder.java index 12db7915..e28da7c7 100644 --- a/gson/src/main/java/com/google/gson/GsonBuilder.java +++ b/gson/src/main/java/com/google/gson/GsonBuilder.java @@ -541,7 +541,6 @@ public final class GsonBuilder { * {@link InstanceCreator}, {@link JsonSerializer}, and a {@link JsonDeserializer} interfaces. * @return a reference to this {@code GsonBuilder} object to fulfill the "Builder" pattern */ - @SuppressWarnings({"unchecked", "rawtypes"}) public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter) { Objects.requireNonNull(type); $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer @@ -549,14 +548,16 @@ public final class GsonBuilder { || typeAdapter instanceof InstanceCreator || typeAdapter instanceof TypeAdapter); if (typeAdapter instanceof InstanceCreator) { - instanceCreators.put(type, (InstanceCreator) typeAdapter); + instanceCreators.put(type, (InstanceCreator) typeAdapter); } if (typeAdapter instanceof JsonSerializer || typeAdapter instanceof JsonDeserializer) { TypeToken typeToken = TypeToken.get(type); factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(typeToken, typeAdapter)); } if (typeAdapter instanceof TypeAdapter) { - factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter)); + @SuppressWarnings({"unchecked", "rawtypes"}) + TypeAdapterFactory factory = TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter); + factories.add(factory); } return this; } @@ -589,7 +590,6 @@ public final class GsonBuilder { * @return a reference to this {@code GsonBuilder} object to fulfill the "Builder" pattern * @since 1.7 */ - @SuppressWarnings({"unchecked", "rawtypes"}) public GsonBuilder registerTypeHierarchyAdapter(Class baseType, Object typeAdapter) { Objects.requireNonNull(baseType); $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer @@ -599,7 +599,9 @@ public final class GsonBuilder { hierarchyFactories.add(TreeTypeAdapter.newTypeHierarchyFactory(baseType, typeAdapter)); } if (typeAdapter instanceof TypeAdapter) { - factories.add(TypeAdapters.newTypeHierarchyFactory(baseType, (TypeAdapter)typeAdapter)); + @SuppressWarnings({"unchecked", "rawtypes"}) + TypeAdapterFactory factory = TypeAdapters.newTypeHierarchyFactory(baseType, (TypeAdapter)typeAdapter); + factories.add(factory); } return this; } diff --git a/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java b/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java index 6138dfff..abc4b2a4 100644 --- a/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java +++ b/gson/src/main/java/com/google/gson/internal/LazilyParsedNumber.java @@ -26,6 +26,7 @@ import java.math.BigDecimal; * * @author Inderjeet Singh */ +@SuppressWarnings("serial") // ignore warning about missing serialVersionUID public final class LazilyParsedNumber extends Number { private final String value; diff --git a/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java b/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java index ce01a125..e47e165d 100644 --- a/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java +++ b/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java @@ -38,6 +38,7 @@ import java.util.Set; * *

This implementation was derived from Android 4.1's TreeMap class. */ +@SuppressWarnings("serial") // ignore warning about missing serialVersionUID public final class LinkedTreeMap extends AbstractMap implements Serializable { @SuppressWarnings({ "unchecked", "rawtypes" }) // to avoid Comparable>> private static final Comparator NATURAL_ORDER = new Comparator() { @@ -504,10 +505,9 @@ public final class LinkedTreeMap extends AbstractMap implements Seri return oldValue; } - @SuppressWarnings("rawtypes") @Override public boolean equals(Object o) { if (o instanceof Entry) { - Entry other = (Entry) o; + Entry other = (Entry) o; return (key == null ? other.getKey() == null : key.equals(other.getKey())) && (value == null ? other.getValue() == null : value.equals(other.getValue())); } diff --git a/gson/src/main/java/com/google/gson/internal/bind/ArrayTypeAdapter.java b/gson/src/main/java/com/google/gson/internal/bind/ArrayTypeAdapter.java index 46974dca..23648e56 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/ArrayTypeAdapter.java +++ b/gson/src/main/java/com/google/gson/internal/bind/ArrayTypeAdapter.java @@ -35,7 +35,6 @@ import java.util.ArrayList; */ public final class ArrayTypeAdapter extends TypeAdapter { public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() { - @SuppressWarnings({"unchecked", "rawtypes"}) @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { Type type = typeToken.getType(); if (!(type instanceof GenericArrayType || type instanceof Class && ((Class) type).isArray())) { @@ -44,8 +43,11 @@ public final class ArrayTypeAdapter extends TypeAdapter { Type componentType = $Gson$Types.getArrayComponentType(type); TypeAdapter componentTypeAdapter = gson.getAdapter(TypeToken.get(componentType)); - return new ArrayTypeAdapter( + + @SuppressWarnings({"unchecked", "rawtypes"}) + TypeAdapter arrayAdapter = new ArrayTypeAdapter( gson, componentTypeAdapter, $Gson$Types.getRawType(componentType)); + return arrayAdapter; } }; @@ -89,7 +91,6 @@ public final class ArrayTypeAdapter extends TypeAdapter { } } - @SuppressWarnings("unchecked") @Override public void write(JsonWriter out, Object array) throws IOException { if (array == null) { out.nullValue(); @@ -98,6 +99,7 @@ public final class ArrayTypeAdapter extends TypeAdapter { out.beginArray(); for (int i = 0, length = Array.getLength(array); i < length; i++) { + @SuppressWarnings("unchecked") E value = (E) Array.get(array, i); componentTypeAdapter.write(out, value); } diff --git a/gson/src/main/java/com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory.java b/gson/src/main/java/com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory.java index d75e4ee0..643c5190 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory.java +++ b/gson/src/main/java/com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory.java @@ -38,7 +38,7 @@ public final class JsonAdapterAnnotationTypeAdapterFactory implements TypeAdapte this.constructorConstructor = constructorConstructor; } - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") // this is not safe; requires that user has specified correct adapter class for @JsonAdapter @Override public TypeAdapter create(Gson gson, TypeToken targetType) { Class rawType = targetType.getRawType(); @@ -49,7 +49,6 @@ public final class JsonAdapterAnnotationTypeAdapterFactory implements TypeAdapte return (TypeAdapter) getTypeAdapter(constructorConstructor, gson, targetType, annotation); } - @SuppressWarnings({ "unchecked", "rawtypes" }) // Casts guarded by conditionals. TypeAdapter getTypeAdapter(ConstructorConstructor constructorConstructor, Gson gson, TypeToken type, JsonAdapter annotation) { Object instance = constructorConstructor.get(TypeToken.get(annotation.value())).construct(); @@ -62,12 +61,16 @@ public final class JsonAdapterAnnotationTypeAdapterFactory implements TypeAdapte typeAdapter = ((TypeAdapterFactory) instance).create(gson, type); } else if (instance instanceof JsonSerializer || instance instanceof JsonDeserializer) { JsonSerializer serializer = instance instanceof JsonSerializer - ? (JsonSerializer) instance + ? (JsonSerializer) instance : null; JsonDeserializer deserializer = instance instanceof JsonDeserializer - ? (JsonDeserializer) instance + ? (JsonDeserializer) instance : null; - typeAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null, nullSafe); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + TypeAdapter tempAdapter = new TreeTypeAdapter(serializer, deserializer, gson, type, null, nullSafe); + typeAdapter = tempAdapter; + nullSafe = false; } else { throw new IllegalArgumentException("Invalid attempt to bind an instance of " 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 c5f2ec73..4b409445 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 @@ -166,13 +166,13 @@ public final class ObjectTypeAdapter extends TypeAdapter { } } - @SuppressWarnings("unchecked") @Override public void write(JsonWriter out, Object value) throws IOException { if (value == null) { out.nullValue(); return; } + @SuppressWarnings("unchecked") TypeAdapter typeAdapter = (TypeAdapter) gson.getAdapter(value.getClass()); if (typeAdapter instanceof ObjectTypeAdapter) { out.beginObject(); 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 95d01ace..31a44e1a 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 @@ -126,19 +126,19 @@ public final class ReflectiveTypeAdapterFactory implements TypeAdapterFactory { final TypeToken fieldType, boolean serialize, boolean deserialize, final boolean blockInaccessible) { final boolean isPrimitive = Primitives.isPrimitive(fieldType.getRawType()); - // special casing primitives here saves ~5% on Android... JsonAdapter annotation = field.getAnnotation(JsonAdapter.class); TypeAdapter mapped = null; if (annotation != null) { + // This is not safe; requires that user has specified correct adapter class for @JsonAdapter mapped = jsonAdapterFactory.getTypeAdapter( constructorConstructor, context, fieldType, annotation); } final boolean jsonAdapterPresent = mapped != null; if (mapped == null) mapped = context.getAdapter(fieldType); - final TypeAdapter typeAdapter = mapped; + @SuppressWarnings("unchecked") + final TypeAdapter typeAdapter = (TypeAdapter) mapped; return new ReflectiveTypeAdapterFactory.BoundField(name, serialize, deserialize) { - @SuppressWarnings({"unchecked", "rawtypes"}) // the type adapter and field type always agree @Override void write(JsonWriter writer, Object value) throws IOException, IllegalAccessException { if (!serialized) return; @@ -152,8 +152,8 @@ public final class ReflectiveTypeAdapterFactory implements TypeAdapterFactory { return; } writer.name(name); - TypeAdapter t = jsonAdapterPresent ? typeAdapter - : new TypeAdapterRuntimeTypeWrapper(context, typeAdapter, fieldType.getType()); + TypeAdapter t = jsonAdapterPresent ? typeAdapter + : new TypeAdapterRuntimeTypeWrapper<>(context, typeAdapter, fieldType.getType()); t.write(writer, fieldValue); } @Override void read(JsonReader reader, Object value) diff --git a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java index 2bf37ad0..6a690919 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java +++ b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.java @@ -15,15 +15,14 @@ */ package com.google.gson.internal.bind; -import java.io.IOException; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; - import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; final class TypeAdapterRuntimeTypeWrapper extends TypeAdapter { private final Gson context; @@ -41,7 +40,6 @@ final class TypeAdapterRuntimeTypeWrapper extends TypeAdapter { return delegate.read(in); } - @SuppressWarnings({"rawtypes", "unchecked"}) @Override public void write(JsonWriter out, T value) throws IOException { // Order of preference for choosing type adapters @@ -50,10 +48,11 @@ final class TypeAdapterRuntimeTypeWrapper extends TypeAdapter { // Third preference: reflective type adapter for the runtime type (if it is a sub class of the declared type) // Fourth preference: reflective type adapter for the declared type - TypeAdapter chosen = delegate; + TypeAdapter chosen = delegate; Type runtimeType = getRuntimeTypeIfMoreSpecific(type, value); if (runtimeType != type) { - TypeAdapter runtimeTypeAdapter = context.getAdapter(TypeToken.get(runtimeType)); + @SuppressWarnings("unchecked") + TypeAdapter runtimeTypeAdapter = (TypeAdapter) context.getAdapter(TypeToken.get(runtimeType)); if (!(runtimeTypeAdapter instanceof ReflectiveTypeAdapterFactory.Adapter)) { // The user registered a type adapter for the runtime type, so we will use that chosen = runtimeTypeAdapter; 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 9ba13637..84723b17 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 @@ -891,7 +891,6 @@ public final class TypeAdapters { } public static final TypeAdapterFactory ENUM_FACTORY = new TypeAdapterFactory() { - @SuppressWarnings({"rawtypes", "unchecked"}) @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { Class rawType = typeToken.getRawType(); if (!Enum.class.isAssignableFrom(rawType) || rawType == Enum.class) { @@ -900,7 +899,9 @@ public final class TypeAdapters { if (!rawType.isEnum()) { rawType = rawType.getSuperclass(); // handle anonymous subclasses } - return (TypeAdapter) new EnumTypeAdapter(rawType); + @SuppressWarnings({"rawtypes", "unchecked"}) + TypeAdapter adapter = (TypeAdapter) new EnumTypeAdapter(rawType); + return adapter; } }; diff --git a/gson/src/main/java/com/google/gson/stream/JsonReader.java b/gson/src/main/java/com/google/gson/stream/JsonReader.java index 99b09cfb..a468d7ed 100644 --- a/gson/src/main/java/com/google/gson/stream/JsonReader.java +++ b/gson/src/main/java/com/google/gson/stream/JsonReader.java @@ -466,6 +466,7 @@ public class JsonReader implements Closeable { } } + @SuppressWarnings("fallthrough") int doPeek() throws IOException { int peekStack = stack[stackSize - 1]; if (peekStack == JsonScope.EMPTY_ARRAY) { @@ -749,6 +750,7 @@ public class JsonReader implements Closeable { } } + @SuppressWarnings("fallthrough") private boolean isLiteral(char c) throws IOException { switch (c) { case '/': @@ -1129,6 +1131,7 @@ public class JsonReader implements Closeable { throw syntaxError("Unterminated string"); } + @SuppressWarnings("fallthrough") private void skipUnquotedValue() throws IOException { do { int i = 0; @@ -1539,6 +1542,7 @@ public class JsonReader implements Closeable { * @throws NumberFormatException if any unicode escape sequences are * malformed. */ + @SuppressWarnings("fallthrough") private char readEscapeCharacter() throws IOException { if (pos == limit && !fillBuffer(1)) { throw syntaxError("Unterminated escape sequence"); diff --git a/gson/src/main/java/com/google/gson/stream/JsonWriter.java b/gson/src/main/java/com/google/gson/stream/JsonWriter.java index 0972dbab..6e978132 100644 --- a/gson/src/main/java/com/google/gson/stream/JsonWriter.java +++ b/gson/src/main/java/com/google/gson/stream/JsonWriter.java @@ -153,7 +153,7 @@ public class JsonWriter implements Closeable, Flushable { static { REPLACEMENT_CHARS = new String[128]; for (int i = 0; i <= 0x1f; i++) { - REPLACEMENT_CHARS[i] = String.format("\\u%04x", (int) i); + REPLACEMENT_CHARS[i] = String.format("\\u%04x", i); } REPLACEMENT_CHARS['"'] = "\\\""; REPLACEMENT_CHARS['\\'] = "\\\\"; 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 11d3d0ab..13807637 100644 --- a/gson/src/test/java/com/google/gson/common/TestTypes.java +++ b/gson/src/test/java/com/google/gson/common/TestTypes.java @@ -16,9 +16,6 @@ package com.google.gson.common; -import java.lang.reflect.Type; -import java.util.Collection; - import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; @@ -28,6 +25,8 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.annotations.SerializedName; +import java.lang.reflect.Type; +import java.util.Collection; /** * Types used for testing JSON serialization and deserialization @@ -36,7 +35,7 @@ import com.google.gson.annotations.SerializedName; * @author Joel Leitch */ public class TestTypes { - + public static class Base { public static final String BASE_NAME = Base.class.getSimpleName(); public static final String BASE_FIELD_KEY = "baseName"; @@ -76,7 +75,7 @@ public class TestTypes { } public static class BaseSerializer implements JsonSerializer { - public static final String NAME = BaseSerializer.class.getSimpleName(); + public static final String NAME = BaseSerializer.class.getSimpleName(); @Override public JsonElement serialize(Base src, Type typeOfSrc, JsonSerializationContext context) { JsonObject obj = new JsonObject(); @@ -85,13 +84,13 @@ public class TestTypes { } } public static class SubSerializer implements JsonSerializer { - public static final String NAME = SubSerializer.class.getSimpleName(); + public static final String NAME = SubSerializer.class.getSimpleName(); @Override public JsonElement serialize(Sub src, Type typeOfSrc, JsonSerializationContext context) { JsonObject obj = new JsonObject(); obj.addProperty(Base.SERIALIZER_KEY, NAME); return obj; - } + } } public static class StringWrapper { @@ -228,6 +227,7 @@ public class TestTypes { } } + @SuppressWarnings("overrides") // for missing hashCode() override public static class ClassWithNoFields { // Nothing here.. @Override @@ -271,7 +271,7 @@ public class TestTypes { } public static class ClassWithTransientFields { - public transient T transientT; + public transient T transientT; public final transient long transientLongValue; private final long[] longValue; diff --git a/gson/src/test/java/com/google/gson/functional/ArrayTest.java b/gson/src/test/java/com/google/gson/functional/ArrayTest.java index 1aa56561..9d0f89ad 100644 --- a/gson/src/test/java/com/google/gson/functional/ArrayTest.java +++ b/gson/src/test/java/com/google/gson/functional/ArrayTest.java @@ -141,12 +141,12 @@ public class ArrayTest extends TestCase { assertEquals("hello", arrayType[0]); } - @SuppressWarnings("unchecked") public void testArrayOfCollectionSerialization() throws Exception { StringBuilder sb = new StringBuilder("["); int arraySize = 3; Type typeToSerialize = new TypeToken[]>() {}.getType(); + @SuppressWarnings({"rawtypes", "unchecked"}) Collection[] arrayOfCollection = new ArrayList[arraySize]; for (int i = 0; i < arraySize; ++i) { int startValue = (3 * i) + 1; diff --git a/gson/src/test/java/com/google/gson/functional/CollectionTest.java b/gson/src/test/java/com/google/gson/functional/CollectionTest.java index f113b850..44a655c8 100644 --- a/gson/src/test/java/com/google/gson/functional/CollectionTest.java +++ b/gson/src/test/java/com/google/gson/functional/CollectionTest.java @@ -16,6 +16,16 @@ package com.google.gson.functional; +import static org.junit.Assert.assertArrayEquals; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.common.TestTypes.BagOfPrimitives; +import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; @@ -30,18 +40,7 @@ import java.util.Queue; import java.util.Set; import java.util.Stack; import java.util.Vector; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import com.google.gson.common.TestTypes.BagOfPrimitives; -import com.google.gson.reflect.TypeToken; - import junit.framework.TestCase; -import static org.junit.Assert.assertArrayEquals; /** * Functional tests for Json serialization and deserialization of collections. @@ -241,35 +240,33 @@ public class CollectionTest extends TestCase { assertEquals("[1,2,3,4,5,6,7,8,9]", gson.toJson(target)); } - @SuppressWarnings("rawtypes") - public void testRawCollectionSerialization() { + public void testObjectCollectionSerialization() { BagOfPrimitives bag1 = new BagOfPrimitives(); - Collection target = Arrays.asList(bag1, bag1); + Collection target = Arrays.asList(bag1, bag1, "test"); String json = gson.toJson(target); assertTrue(json.contains(bag1.getExpectedJson())); } - @SuppressWarnings("rawtypes") public void testRawCollectionDeserializationNotAlllowed() { String json = "[0,1,2,3,4,5,6,7,8,9]"; - Collection integers = gson.fromJson(json, Collection.class); + Collection integers = gson.fromJson(json, Collection.class); // JsonReader converts numbers to double by default so we need a floating point comparison assertEquals(Arrays.asList(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), integers); json = "[\"Hello\", \"World\"]"; - Collection strings = gson.fromJson(json, Collection.class); + Collection strings = gson.fromJson(json, Collection.class); assertTrue(strings.contains("Hello")); assertTrue(strings.contains("World")); } - @SuppressWarnings({"rawtypes", "unchecked"}) public void testRawCollectionOfBagOfPrimitivesNotAllowed() { BagOfPrimitives bag = new BagOfPrimitives(10, 20, false, "stringValue"); String json = '[' + bag.getExpectedJson() + ',' + bag.getExpectedJson() + ']'; - Collection target = gson.fromJson(json, Collection.class); + Collection target = gson.fromJson(json, Collection.class); assertEquals(2, target.size()); for (Object bag1 : target) { // Gson 2.0 converts raw objects into maps + @SuppressWarnings("unchecked") Map values = (Map) bag1; assertTrue(values.containsValue(10.0)); assertTrue(values.containsValue(20.0)); @@ -324,7 +321,7 @@ public class CollectionTest extends TestCase { HasArrayListField copy = gson.fromJson("{\"longs\":[1,3]}", HasArrayListField.class); assertEquals(Arrays.asList(1L, 3L), copy.longs); } - + public void testUserCollectionTypeAdapter() { Type listOfString = new TypeToken>() {}.getType(); Object stringListSerializer = new JsonSerializer>() { @@ -343,11 +340,10 @@ public class CollectionTest extends TestCase { ArrayList longs = new ArrayList<>(); } - @SuppressWarnings("rawtypes") - private static int[] toIntArray(Collection collection) { + private static int[] toIntArray(Collection collection) { int[] ints = new int[collection.size()]; int i = 0; - for (Iterator iterator = collection.iterator(); iterator.hasNext(); ++i) { + for (Iterator iterator = collection.iterator(); iterator.hasNext(); ++i) { Object obj = iterator.next(); if (obj instanceof Integer) { ints[i] = ((Integer)obj).intValue(); diff --git a/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java index b14ed52e..1c38e6ca 100644 --- a/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java @@ -29,15 +29,13 @@ import com.google.gson.JsonSerializer; import com.google.gson.common.TestTypes.BagOfPrimitives; import com.google.gson.common.TestTypes.ClassWithCustomTypeConverter; import com.google.gson.reflect.TypeToken; - -import java.util.Date; -import junit.framework.TestCase; - import java.lang.reflect.Type; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import junit.framework.TestCase; /** * Functional tests for the support of custom serializer and deserializers. @@ -220,12 +218,11 @@ public class CustomTypeAdaptersTest extends TestCase { assertEquals("true", gson.toJson(true, Boolean.class)); } - @SuppressWarnings("rawtypes") public void testCustomDeserializerInvokedForPrimitives() { Gson gson = new GsonBuilder() - .registerTypeAdapter(boolean.class, new JsonDeserializer() { + .registerTypeAdapter(boolean.class, new JsonDeserializer() { @Override - public Object deserialize(JsonElement json, Type t, JsonDeserializationContext context) { + public Boolean deserialize(JsonElement json, Type t, JsonDeserializationContext context) { return json.getAsInt() != 0; } }) diff --git a/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java index 91a4639e..218c97ab 100644 --- a/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/DefaultTypeAdaptersTest.java @@ -54,7 +54,6 @@ import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; import java.util.UUID; - import junit.framework.TestCase; /** @@ -654,14 +653,13 @@ public class DefaultTypeAdaptersTest extends TestCase { assertEquals("abc", sb.toString()); } - @SuppressWarnings("rawtypes") - private static class MyClassTypeAdapter extends TypeAdapter { + private static class MyClassTypeAdapter extends TypeAdapter> { @Override - public void write(JsonWriter out, Class value) throws IOException { + public void write(JsonWriter out, Class value) throws IOException { out.value(value.getName()); } @Override - public Class read(JsonReader in) throws IOException { + public Class read(JsonReader in) throws IOException { String className = in.nextString(); try { return Class.forName(className); diff --git a/gson/src/test/java/com/google/gson/functional/InstanceCreatorTest.java b/gson/src/test/java/com/google/gson/functional/InstanceCreatorTest.java index 95e3e3ef..3ed60327 100644 --- a/gson/src/test/java/com/google/gson/functional/InstanceCreatorTest.java +++ b/gson/src/test/java/com/google/gson/functional/InstanceCreatorTest.java @@ -22,15 +22,13 @@ import com.google.gson.InstanceCreator; import com.google.gson.common.TestTypes.Base; import com.google.gson.common.TestTypes.ClassWithBaseField; import com.google.gson.common.TestTypes.Sub; - import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import junit.framework.TestCase; - -import java.lang.reflect.Type; import java.util.SortedSet; import java.util.TreeSet; +import junit.framework.TestCase; /** * Functional Test exercising custom serialization only. When test applies to both @@ -102,13 +100,13 @@ public class InstanceCreatorTest extends TestCase { assertEquals(SubArrayList.class, list.getClass()); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings("unchecked") public void testInstanceCreatorForParametrizedType() throws Exception { @SuppressWarnings("serial") class SubTreeSet extends TreeSet {} - InstanceCreator sortedSetCreator = new InstanceCreator() { - @Override public SortedSet createInstance(Type type) { - return new SubTreeSet(); + InstanceCreator> sortedSetCreator = new InstanceCreator>() { + @Override public SortedSet createInstance(Type type) { + return new SubTreeSet<>(); } }; Gson gson = new GsonBuilder() diff --git a/gson/src/test/java/com/google/gson/functional/JsonArrayTest.java b/gson/src/test/java/com/google/gson/functional/JsonArrayTest.java index 22a479b8..410a0817 100644 --- a/gson/src/test/java/com/google/gson/functional/JsonArrayTest.java +++ b/gson/src/test/java/com/google/gson/functional/JsonArrayTest.java @@ -17,9 +17,8 @@ package com.google.gson.functional; import com.google.gson.JsonArray; -import junit.framework.TestCase; - import java.math.BigInteger; +import junit.framework.TestCase; /** * Functional tests for adding primitives to a JsonArray. 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 ef9eae2b..c5344a76 100644 --- a/gson/src/test/java/com/google/gson/functional/MapTest.java +++ b/gson/src/test/java/com/google/gson/functional/MapTest.java @@ -16,18 +16,6 @@ package com.google.gson.functional; -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.ConcurrentNavigableMap; -import java.util.concurrent.ConcurrentSkipListMap; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; @@ -42,7 +30,17 @@ import com.google.gson.JsonSyntaxException; import com.google.gson.common.TestTypes; import com.google.gson.internal.$Gson$Types; import com.google.gson.reflect.TypeToken; - +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ConcurrentNavigableMap; +import java.util.concurrent.ConcurrentSkipListMap; import junit.framework.TestCase; /** @@ -78,9 +76,8 @@ public class MapTest extends TestCase { assertEquals(2, target.get("b").intValue()); } - @SuppressWarnings({"unchecked", "rawtypes"}) - public void testRawMapSerialization() { - Map map = new LinkedHashMap(); + public void testObjectMapSerialization() { + Map map = new LinkedHashMap<>(); map.put("a", 1); map.put("b", "string"); String json = gson.toJson(map); @@ -647,7 +644,6 @@ public class MapTest extends TestCase { } static final class MapWithGeneralMapParameters { - @SuppressWarnings({"rawtypes", "unchecked"}) - final Map map = new LinkedHashMap(); + final Map map = new LinkedHashMap<>(); } } 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 e9aa15b2..de384879 100644 --- a/gson/src/test/java/com/google/gson/functional/ObjectTest.java +++ b/gson/src/test/java/com/google/gson/functional/ObjectTest.java @@ -44,7 +44,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.TimeZone; - import junit.framework.TestCase; /** @@ -121,18 +120,16 @@ public class ObjectTest extends TestCase { assertEquals(target.getExpectedJson(), gson.toJson(target)); } - @SuppressWarnings("rawtypes") public void testClassWithTransientFieldsDeserialization() throws Exception { String json = "{\"longValue\":[1]}"; - ClassWithTransientFields target = gson.fromJson(json, ClassWithTransientFields.class); + ClassWithTransientFields target = gson.fromJson(json, ClassWithTransientFields.class); assertEquals(json, target.getExpectedJson()); } - @SuppressWarnings("rawtypes") public void testClassWithTransientFieldsDeserializationTransientFieldsPassedInJsonAreIgnored() throws Exception { String json = "{\"transientLongValue\":1,\"longValue\":[1]}"; - ClassWithTransientFields target = gson.fromJson(json, ClassWithTransientFields.class); + ClassWithTransientFields target = gson.fromJson(json, ClassWithTransientFields.class); assertFalse(target.transientLongValue != 1); } 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 8decc640..49cb0db9 100644 --- a/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java +++ b/gson/src/test/java/com/google/gson/functional/ParameterizedTypesTest.java @@ -23,9 +23,6 @@ import com.google.gson.ParameterizedTypeFixtures.MyParameterizedTypeAdapter; import com.google.gson.ParameterizedTypeFixtures.MyParameterizedTypeInstanceCreator; import com.google.gson.common.TestTypes.BagOfPrimitives; import com.google.gson.reflect.TypeToken; - -import junit.framework.TestCase; - import java.io.Reader; import java.io.Serializable; import java.io.StringReader; @@ -35,6 +32,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import junit.framework.TestCase; /** * Functional tests for the serialization and deserialization of parameterized types in Gson. @@ -154,14 +152,19 @@ public class ParameterizedTypesTest extends TestCase { assertEquals(expected, actual); } - @SuppressWarnings("unchecked") + @SuppressWarnings("varargs") + @SafeVarargs + private static T[] arrayOf(T... args) { + return args; + } + public void testVariableTypeFieldsAndGenericArraysSerialization() throws Exception { Integer obj = 0; Integer[] array = { 1, 2, 3 }; List list = new ArrayList<>(); list.add(4); list.add(5); - List[] arrayOfLists = new List[] { list, list }; + List[] arrayOfLists = arrayOf(list, list); Type typeOfSrc = new TypeToken>() {}.getType(); ObjectWithTypeVariables objToSerialize = @@ -171,14 +174,13 @@ public class ParameterizedTypesTest extends TestCase { assertEquals(objToSerialize.getExpectedJson(), json); } - @SuppressWarnings("unchecked") public void testVariableTypeFieldsAndGenericArraysDeserialization() throws Exception { Integer obj = 0; Integer[] array = { 1, 2, 3 }; List list = new ArrayList<>(); list.add(4); list.add(5); - List[] arrayOfLists = new List[] { list, list }; + List[] arrayOfLists = arrayOf(list, list); Type typeOfSrc = new TypeToken>() {}.getType(); ObjectWithTypeVariables objToSerialize = @@ -225,12 +227,11 @@ public class ParameterizedTypesTest extends TestCase { assertEquals(objAfterDeserialization.getExpectedJson(), json); } - @SuppressWarnings("unchecked") public void testParameterizedTypeGenericArraysSerialization() throws Exception { List list = new ArrayList<>(); list.add(1); list.add(2); - List[] arrayOfLists = new List[] { list, list }; + List[] arrayOfLists = arrayOf(list, list); Type typeOfSrc = new TypeToken>() {}.getType(); ObjectWithTypeVariables objToSerialize = @@ -239,12 +240,11 @@ public class ParameterizedTypesTest extends TestCase { assertEquals("{\"arrayOfListOfTypeParameters\":[[1,2],[1,2]]}", json); } - @SuppressWarnings("unchecked") public void testParameterizedTypeGenericArraysDeserialization() throws Exception { List list = new ArrayList<>(); list.add(1); list.add(2); - List[] arrayOfLists = new List[] { list, list }; + List[] arrayOfLists = arrayOf(list, list); Type typeOfSrc = new TypeToken>() {}.getType(); ObjectWithTypeVariables objToSerialize = @@ -459,7 +459,7 @@ public class ParameterizedTypesTest extends TestCase { return true; } } - + // Begin: tests to reproduce issue 103 private static class Quantity { @SuppressWarnings("unused") @@ -475,21 +475,21 @@ public class ParameterizedTypesTest extends TestCase { } private interface Immutable { } - - public static final class Amount + + public static final class Amount implements Measurable, Field>, Serializable, Immutable { private static final long serialVersionUID = -7560491093120970437L; int value = 30; } - + public void testDeepParameterizedTypeSerialization() { Amount amount = new Amount<>(); String json = gson.toJson(amount); assertTrue(json.contains("value")); assertTrue(json.contains("30")); } - + public void testDeepParameterizedTypeDeserialization() { String json = "{value:30}"; Type type = new TypeToken>() {}.getType(); diff --git a/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java b/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java index 7dcbc23c..6801ba00 100644 --- a/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java +++ b/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java @@ -23,11 +23,9 @@ import com.google.gson.common.TestTypes.BagOfPrimitives; import com.google.gson.common.TestTypes.ClassWithTransientFields; import com.google.gson.common.TestTypes.Nested; import com.google.gson.common.TestTypes.PrimitiveArray; - -import junit.framework.TestCase; - import java.util.ArrayList; import java.util.List; +import junit.framework.TestCase; /** * Functional tests for print formatting. @@ -45,13 +43,12 @@ public class PrintFormattingTest extends TestCase { gson = new Gson(); } - @SuppressWarnings({"unchecked", "rawtypes"}) public void testCompactFormattingLeavesNoWhiteSpace() { - List list = new ArrayList(); + List list = new ArrayList<>(); list.add(new BagOfPrimitives()); list.add(new Nested()); list.add(new PrimitiveArray()); - list.add(new ClassWithTransientFields()); + list.add(new ClassWithTransientFields<>()); String json = gson.toJson(list); assertContainsNoWhiteSpace(json); diff --git a/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java index f82d92e4..006c6ebd 100644 --- a/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java @@ -16,14 +16,6 @@ package com.google.gson.functional; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import junit.framework.TestCase; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -34,6 +26,12 @@ import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.reflect.TypeToken; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import junit.framework.TestCase; /** * Collection of functional tests for DOM tree based type adapters. @@ -44,7 +42,7 @@ public class TreeTypeAdaptersTest extends TestCase { private static final Student STUDENT1 = new Student(STUDENT1_ID, "first"); private static final Student STUDENT2 = new Student(STUDENT2_ID, "second"); private static final Type TYPE_COURSE_HISTORY = - new TypeToken>(){}.getType(); + new TypeToken>(){}.getType(); private static final Id> COURSE_ID = new Id<>("10", TYPE_COURSE_HISTORY); @@ -93,7 +91,6 @@ public class TreeTypeAdaptersTest extends TestCase { private static final class IdTreeTypeAdapter implements JsonSerializer>, JsonDeserializer> { - @SuppressWarnings("rawtypes") @Override public Id deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { @@ -104,7 +101,7 @@ public class TreeTypeAdaptersTest extends TestCase { // Since Id takes only one TypeVariable, the actual type corresponding to the first // TypeVariable is the Type we are looking for Type typeOfId = parameterizedType.getActualTypeArguments()[0]; - return new Id(json.getAsString(), typeOfId); + return new Id<>(json.getAsString(), typeOfId); } @Override diff --git a/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java b/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java index e5a4d8ba..f9ef46b3 100644 --- a/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java +++ b/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java @@ -16,16 +16,14 @@ package com.google.gson.functional; import com.google.gson.Gson; - import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; -import java.util.Arrays; -import junit.framework.TestCase; - import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import junit.framework.TestCase; /** * Functional test for Gson serialization and deserialization of @@ -70,6 +68,7 @@ public class TypeVariableTest extends TestCase { assertEquals(blue1, blue2); } + @SuppressWarnings("overrides") // for missing hashCode() override public static class Blue extends Red { public Blue() { super(false); @@ -79,7 +78,6 @@ public class TypeVariableTest extends TestCase { super(value); } - // Technically, we should implement hashcode too @Override public boolean equals(Object o) { if (!(o instanceof Blue)) { @@ -100,6 +98,7 @@ public class TypeVariableTest extends TestCase { } } + @SuppressWarnings("overrides") // for missing hashCode() override public static class Foo extends Red { private S someSField; private T someTField; @@ -113,7 +112,6 @@ public class TypeVariableTest extends TestCase { this.someTField = tValue; } - // Technically, we should implement hashcode too @Override @SuppressWarnings("unchecked") public boolean equals(Object o) { diff --git a/gson/src/test/java/com/google/gson/internal/JavaVersionTest.java b/gson/src/test/java/com/google/gson/internal/JavaVersionTest.java index 54b62862..582d683a 100644 --- a/gson/src/test/java/com/google/gson/internal/JavaVersionTest.java +++ b/gson/src/test/java/com/google/gson/internal/JavaVersionTest.java @@ -15,7 +15,8 @@ */ package com.google.gson.internal; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -29,7 +30,7 @@ public class JavaVersionTest { @Test public void testGetMajorJavaVersion() { - JavaVersion.getMajorJavaVersion(); + assertTrue(JavaVersion.getMajorJavaVersion() >= 7); // Gson currently requires at least Java 7 } @Test diff --git a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java index 22715830..0b08d32e 100644 --- a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java +++ b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java @@ -213,6 +213,7 @@ public final class LinkedTreeMapTest extends TestCase { assertEquals(Collections.singletonMap("a", 1), deserialized); } + @SuppressWarnings("varargs") @SafeVarargs private final void assertIterationOrder(Iterable actual, T... expected) { ArrayList actualList = new ArrayList<>(); diff --git a/pom.xml b/pom.xml index c60a4b21..93da69b6 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,14 @@ 3.10.1 ${javaVersion} + true + true + true + + + -Xlint:all,-options + [11,)