Skip to content

Box primitive casts in Whitebox.getInternalState/invokeMethod reflection#1024

Merged
MBoegers merged 1 commit into
mainfrom
MBoegers/whitebox-boxed-cast-fix
Jun 17, 2026
Merged

Box primitive casts in Whitebox.getInternalState/invokeMethod reflection#1024
MBoegers merged 1 commit into
mainfrom
MBoegers/whitebox-boxed-cast-fix

Conversation

@MBoegers

Copy link
Copy Markdown
Collaborator

What

PowerMockWhiteboxGetInternalStateToJavaReflection and PowerMockWhiteboxInvokeMethodToJavaReflection produced non-compiling output when the migrated result was assigned to a primitive-typed local:

int count = (int) countField.get(service);   // does not compile

Field.get/Method.invoke return Object, and Java forbids a direct (int) Object cast.

Fix

Cast to the wrapper; the assignment auto-unboxes:

int count = (Integer) countField.get(service);

A small boxedCastType helper on the shared WhiteboxToReflectionVisitor maps primitive keywords to their wrappers; reference-typed casts are unchanged.

Tests

Added a primitiveResultUsesBoxedCast case to each recipe's test. Existing reference-typed cases are unaffected.

Field.get and Method.invoke return Object, so a primitive-typed result
declaration emitted a `(int) object` cast, which does not compile. Cast
to the wrapper type instead; the surrounding assignment auto-unboxes.
@github-project-automation github-project-automation Bot moved this from In Progress to Ready to Review in OpenRewrite Jun 17, 2026
@MBoegers MBoegers merged commit 862bd49 into main Jun 17, 2026
2 checks passed
@MBoegers MBoegers deleted the MBoegers/whitebox-boxed-cast-fix branch June 17, 2026 07:01
@github-project-automation github-project-automation Bot moved this from Ready to Review to Done in OpenRewrite Jun 17, 2026
mergify Bot added a commit to robfrank/linklift that referenced this pull request Jun 18, 2026
…rom 3.37.0 to 3.38.0 [skip ci]

Bumps [org.openrewrite.recipe:rewrite-testing-frameworks](https://github.com/openrewrite/rewrite-testing-frameworks) from 3.37.0 to 3.38.0.
Release notes

*Sourced from [org.openrewrite.recipe:rewrite-testing-frameworks's releases](https://github.com/openrewrite/rewrite-testing-frameworks/releases).*

> 3.38.0
> ------
>
> What's Changed
> --------------
>
> * Don't add MockitoExtension during migration when unsafe ([#875](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/875)) by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1017](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1017)
> * Add junit-platform-launcher testRuntimeOnly dependency for Gradle during JUnit 6 migration by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1018](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1018)
> * Migrate removed LocalStack Service enum and getEndpointOverride in Testcontainers 2.x migration by [`@​MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1014](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1014)
> * Re-include CloseUnclosedStaticMocks in Mockito1to4Migration by [`@​steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-testing-frameworks#1019](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1019)
> * Update MockWebServer MockResponse test for nested-type render change by [`@​steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-testing-frameworks#1020](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1020)
> * Fix UsesType precondition pattern in KotlinTestMethodsShouldReturnUnit by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1022](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1022)
> * Support 4-arg Whitebox.setInternalState(target, field, value, Class) by [`@​MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1023](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1023)
> * Refactor `PowerMockWhiteboxToJavaReflection` into per-API recipes by [`@​MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1021](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1021)
> * Box primitive casts in `Whitebox.getInternalState`/`invokeMethod` reflection by [`@​MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1024](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1024)
>
> **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.37.0...v3.38.0>


Commits

* [`862bd49`](openrewrite/rewrite-testing-frameworks@862bd49) Box primitive casts in Whitebox getInternalState/invokeMethod reflection ([#1024](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1024))
* [`9e86af9`](openrewrite/rewrite-testing-frameworks@9e86af9) Refactor `PowerMockWhiteboxToJavaReflection` into per-API recipes ([#1021](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1021))
* [`30c392d`](openrewrite/rewrite-testing-frameworks@30c392d) Support 4-arg Whitebox.setInternalState(target, field, value, Class) ([#1023](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1023))
* [`c9cd3bd`](openrewrite/rewrite-testing-frameworks@c9cd3bd) Fix UsesType precondition pattern in KotlinTestMethodsShouldReturnUnit ([#1022](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1022))
* [`a602b44`](openrewrite/rewrite-testing-frameworks@a602b44) OpenRewrite recipe best practices
* [`ff368ff`](openrewrite/rewrite-testing-frameworks@ff368ff) Update UpdateMockWebServerMockResponse test for nested-type render change ([#1](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1)...
* [`45342dc`](openrewrite/rewrite-testing-frameworks@45342dc) Re-include CloseUnclosedStaticMocks in Mockito1to4Migration ([#1019](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1019))
* [`e1cb892`](openrewrite/rewrite-testing-frameworks@e1cb892) Migrate removed LocalStack `Service` enum and `getEndpointOverride` in Testco...
* [`3934d1e`](openrewrite/rewrite-testing-frameworks@3934d1e) Add junit-platform-launcher testRuntimeOnly dependency for Gradle during JUni...
* [`d5554a9`](openrewrite/rewrite-testing-frameworks@d5554a9) Don't add MockitoExtension during migration when unsafe ([#875](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/875)) ([#1017](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1017))
* Additional commits viewable in [compare view](openrewrite/rewrite-testing-frameworks@v3.37.0...v3.38.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants