diff --git a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java index 6ccdaa3eb5..8bef78afce 100644 --- a/gson/src/main/java/com/google/gson/internal/$Gson$Types.java +++ b/gson/src/main/java/com/google/gson/internal/$Gson$Types.java @@ -392,23 +392,24 @@ private static Type resolve( ParameterizedType original = (ParameterizedType) toResolve; Type ownerType = original.getOwnerType(); Type newOwnerType = resolve(context, contextRawType, ownerType, visitedTypeVariables); - boolean changed = !equal(newOwnerType, ownerType); + boolean ownerChanged = !equal(newOwnerType, ownerType); Type[] args = original.getActualTypeArguments(); + boolean argsChanged = false; for (int t = 0, length = args.length; t < length; t++) { Type resolvedTypeArgument = resolve(context, contextRawType, args[t], visitedTypeVariables); if (!equal(resolvedTypeArgument, args[t])) { - if (!changed) { + if (!argsChanged) { args = args.clone(); - changed = true; + argsChanged = true; } args[t] = resolvedTypeArgument; } } toResolve = - changed + ownerChanged || argsChanged ? newParameterizedTypeWithOwner(newOwnerType, original.getRawType(), args) : original; break;