code: public static Class<?> getRawArrayComponentType(List<Type> context, Type componentType) {
      if (componentType instanceof TypeVariable<?>) {
        componentType = Types.resolveTypeVariable(context, (TypeVariable<?>) componentType);
      }
      if (componentType instanceof GenericArrayType) {
        Class<?> raw = getRawArrayComponentType(context, Types.getArrayComponentType(componentType));
        return Array.newInstance(raw, 0).getClass();
      }
      if (componentType instanceof Class<?>) {
        return (Class<?>) componentType;
      }
      if (componentType instanceof ParameterizedType) {
        return Types.getRawClass((ParameterizedType) componentType);
      }
      Preconditions.checkArgument(
          componentType == null, "wildcard type is not supported: %s", componentType);
      return Object.class;
    }
docs: Returns the raw array component type to use -- for example for the first parameter of {@link
  Array#newInstance(Class, int)} -- for the given component type.
  
  @param context context list, ordering from least specific to most specific type context, for
  example container class and then its field
  @param componentType array component type or {@code null} for {@code Object.class} result
  @return raw array component type