Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
3.7, 3.8
-
None
Description
TypeUtils.isAssignable returns a wrong result when checking whether a ParameterizedType is assignable to a GenericArrayType that has the same ParameterizedType as component type.
For example:
ParameterizedType componentType = TypeUtils.parameterize(java.lang.reflect.Constructor.class, java.awt.Insets.class); GenericArrayType arrayType = TypeUtils.genericArrayType(componentType);
In this case,
TypeUtils.isAssignable(arrayType, componentType)
returns true, but this should be false (the component type should not be assignable to the array type - the Java compiler complains about this).
It seem that the problem is that the method:
private static boolean isAssignable(final Type type, final ParameterizedType toParameterizedType, final Map<TypeVariable<?>, Type> typeVarAssigns)
only compares the type parameters, since method getTypeArguments retrieves the component type using getGenericComponentType. There seems to be no check whether an array type is being assigned to a non-array in the first place.