final Integer[] typeParameters = method.getClassTypeParameters();
if (ArrayUtil.isNull(typeParameters))
{
return type;
}
final ParameterizedName lastName = ArrayUtil.last(type.getParameterizedTypeName());
TypeParameter[] classParameters = Arrays.copyOf(lastName.getParameters(), lastName.getParameters().length);
for (int i = 0; i < typeParameters.length; i++)
{
final Integer classIndex = typeParameters[i];
if (classIndex != null)
{
classParameters[classIndex] = new SimpleTypeParameter(TypeParameter.Kind.EXACT,
parameters.getParameterTypes()[i]);
}
}
ParameterizedName[] name = new ParameterizedName[type.getParameterizedTypeName().length];
System.arraycopy(type.getParameterizedTypeName(), 0, name, 0, name.length - 1);
name[name.length - 1] = new SimpleParameterizedName(lastName.getName(), classParameters);
return new SimpleJavaType(name, type.getArrayDepth());
}