Skip to content

Commit e8cdabf

Browse files
authored
Fix typeArguments array not being cloned when resolving ParameterizedType with changed owner (#2706)
1 parent 3621e51 commit e8cdabf

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

gson/src/main/java/com/google/gson/internal/$Gson$Types.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -392,23 +392,24 @@ private static Type resolve(
392392
ParameterizedType original = (ParameterizedType) toResolve;
393393
Type ownerType = original.getOwnerType();
394394
Type newOwnerType = resolve(context, contextRawType, ownerType, visitedTypeVariables);
395-
boolean changed = !equal(newOwnerType, ownerType);
395+
boolean ownerChanged = !equal(newOwnerType, ownerType);
396396

397397
Type[] args = original.getActualTypeArguments();
398+
boolean argsChanged = false;
398399
for (int t = 0, length = args.length; t < length; t++) {
399400
Type resolvedTypeArgument =
400401
resolve(context, contextRawType, args[t], visitedTypeVariables);
401402
if (!equal(resolvedTypeArgument, args[t])) {
402-
if (!changed) {
403+
if (!argsChanged) {
403404
args = args.clone();
404-
changed = true;
405+
argsChanged = true;
405406
}
406407
args[t] = resolvedTypeArgument;
407408
}
408409
}
409410

410411
toResolve =
411-
changed
412+
ownerChanged || argsChanged
412413
? newParameterizedTypeWithOwner(newOwnerType, original.getRawType(), args)
413414
: original;
414415
break;

0 commit comments

Comments
 (0)