Arrow-function BC wrappers drop by-reference argument mutations
## Problem
`DeprecationHelper::backwardsCompatibleCall()` calls its callables with no arguments, so drupal-rector's generated wrappers close over the caller's arguments. `AbstractDrupalCoreRector::createBcCallOnExpr()` wrapped the converted call in **arrow functions** (`fn() => ...`), which capture **by value**. For any replacement that takes an argument **by reference** and mutates it, that mutation is silently lost in the rewritten code.
Affected conversions include:
- `template_preprocess_*(&$variables)` → `Drupal\Core\Theme\ThemePreprocess` / `DatePreprocess` / etc.
- form `*_process` / `*_validate` / `*_builder` callbacks taking `&$form`
- `views_add_contextual_links(&$render_element)`
- `content_translation_*` configuration element callbacks taking `&$form`
### Real-world impact
Running the rector against webform produced a patch whose `template_preprocess_html()` / `template_preprocess_page()` rewrites dropped the `&$variables` mutation, causing render/form PHPUnit failures (e.g. *Undefined array key "html_attributes"*) that do not occur on the unpatched module.
Blast radius across the latest contrib analysis run: ~19 modules carried the broken arrow-wrapped by-reference conversion.
## Fix
`createBcCallOnExpr()` now detects by-reference parameters (by reflecting the replacement service method, with a best-effort fallback to the deprecated function) and emits a long closure that captures the affected local variable by reference — `function () use (&$var) { ... }` — for both the new and old branches, instead of an arrow function. A closure wrapping a `void` target emits a bare expression statement rather than `return <expr>;` to avoid PHPStan's `function.void`; value-returning targets keep `return`. `DeprecationHelperRemoveRector` unwraps both forms.
## Patch
Fixed in palantirnet/drupal-rector#398 (GitHub is the canonical development repo): https://github.com/palantirnet/drupal-rector/pull/398
issue