private static boolean areTypesCompatible(Class<?> @NotNull [] parameterTypes, @NotNull List<@Nullable Class<?>> argumentTypes) {
    for (int i = 0; i < argumentTypes.size(); i++) {
      Class<?> argType = argumentTypes.get(i);
      if (argType == null) continue;

      Class<?> parameterType = parameterTypes[i];
      if (!ClassUtils.isAssignable(argType, parameterType)) return false;
    }
    return true;
  }
private static boolean areTypesCompatible(Class<?> @NotNull [] parameterTypes, @NotNull List<@Nullable Class<?>> argumentTypes)