Skip to content

Use KotlinTypeUtils.isKotlinUnit to match Kotlin void return types#971

Merged
timtebeek merged 1 commit intomainfrom
tim/fix-kotlin-test-methods-unit-match
Apr 16, 2026
Merged

Use KotlinTypeUtils.isKotlinUnit to match Kotlin void return types#971
timtebeek merged 1 commit intomainfrom
tim/fix-kotlin-test-methods-unit-match

Conversation

@timtebeek
Copy link
Copy Markdown
Member

Summary

  • Follow-up to Fix RemoveTryCatchFailBlocks failing when removing blocks within lambda expressions #970, which disabled doNotChangeAlreadyUnitTestMethods with comment "flaky on CI but I don't know why".
  • Root cause: as of rewrite 8.79.4 (openrewrite/rewrite#7364), the Kotlin parser maps non-nullable kotlin.Unit to JavaType.Primitive.Void. TypeUtils.isOfClassType(type, "kotlin.Unit") returns false for a primitive, so the recipe no longer skips already-Unit methods and rewrites them unnecessarily — tripping the single-cycle stability check on CI. Locally, stale rewrite-kotlin snapshots still carry the pre-change behaviour, which is why the failure was CI-only.
  • CI failureKotlinTestMethodsShouldReturnUnitTest > doNotChangeAlreadyUnitTestMethods() FAILED: Expected recipe to complete in 0 cycle, but took 1 cycle.

What this PR does

  • Switch TypeUtils.isOfClassType(type, "kotlin.Unit")KotlinTypeUtils.isKotlinUnit(type) (helper introduced in rewrite#7364 specifically for this transition — accepts either Primitive.Void or the kotlin.Unit class form).
  • Re-enable doNotChangeAlreadyUnitTestMethods.

Test plan

  • ./gradlew test --tests KotlinTestMethodsShouldReturnUnitTest passes on CI against rewrite 8.79.4+

Follow-up to #970, which disabled `doNotChangeAlreadyUnitTestMethods` with
comment "flaky on CI but I don't know why".

Root cause: as of rewrite 8.79.4 (openrewrite/rewrite#7364), the Kotlin
parser maps non-nullable `kotlin.Unit` to JVM `JavaType.Primitive.Void`.
`TypeUtils.isOfClassType(type, "kotlin.Unit")` returns false for a
primitive, so the recipe no longer skips already-Unit methods and rewrites
them unnecessarily — tripping the single-cycle stability check on CI.
Locally, stale `rewrite-kotlin` snapshots still carry the pre-change
behaviour, which is why the failure was CI-only.

Use `KotlinTypeUtils.isKotlinUnit` (introduced in the same PR #7364)
which accepts either `JavaType.Primitive.Void` or a `kotlin.Unit` class
reference, and re-enable the disabled test.
@github-project-automation github-project-automation Bot moved this to In Progress in OpenRewrite Apr 16, 2026
@timtebeek timtebeek merged commit 83d1f44 into main Apr 16, 2026
1 check passed
@timtebeek timtebeek deleted the tim/fix-kotlin-test-methods-unit-match branch April 16, 2026 21:59
@github-project-automation github-project-automation Bot moved this from In Progress to Done in OpenRewrite Apr 16, 2026
mergify Bot added a commit to robfrank/linklift that referenced this pull request May 3, 2026
…rom 3.30.0 to 3.35.2 [skip ci]

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

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

> 3.35.2
> ------
>
> What's Changed
> --------------
>
> * OpenRewrite v8.81.0: <openrewrite/rewrite@v8.81.0...main>
>
> **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.35.1...v3.35.2>
>
> 3.35.1
> ------
>
> What's Changed
> --------------
>
> * Fix `UpdateMockWebServerDispatcher` classpath lookup by [`@​knutwannheden`](https://github.com/knutwannheden) in [openrewrite/rewrite-testing-frameworks#975](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/975)
>
> **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.35.0...v3.35.1>
>
> 3.35.0
> ------
>
> What's Changed
> --------------
>
> * Skip FieldAccess arguments in AssertThrowsOnLastStatement by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#965](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/965)
> * Add MigrateToKafkaNative recipe for Testcontainers ([#568](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/568)) by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#967](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/967)
> * Fix ClassCastException in RemoveTimesZeroAndOne by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#969](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/969)
> * Fix RemoveTryCatchFailBlocks failing when removing blocks within lambda expressions by [`@​sambsnyd`](https://github.com/sambsnyd) in [openrewrite/rewrite-testing-frameworks#970](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/970)
> * Use KotlinTypeUtils.isKotlinUnit to match Kotlin void return types by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#971](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/971)
> * Fix MockWebServer Dispatcher return type and RecordedRequest renames by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#972](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/972)
> * Add [`@​MockitoSettings`](https://github.com/MockitoSettings)(strictness = Strictness.WARN) for Mockito migration by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#966](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/966)
>
> **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.34.0...v3.35.0>
>
> 3.34.0
> ------
>
> What's Changed
> --------------
>
> * Remove empty if blocks after initMocks/openMocks cleanup by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#952](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/952)
> * Extend SimplifyMockitoVerifyWhenGiven for more S6068 cases by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#953](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/953)
> * Add RemoveDoNothingForDefaultMocks to Mockito1to3Migration by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#956](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/956)
> * Skip private method stubbing in PowerMockitoDoStubbingToMockito by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#957](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/957)
> * Fix AssertToAssertionsTest expectations for static imports by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#958](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/958)
> * Add ThenThrowCheckedExceptionToRuntimeException recipe by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#954](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/954)
> * Fix AnyToNullable removing any() import when untyped any() still used by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#960](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/960)
> * Rename implicit [`@​MethodSource`](https://github.com/MethodSource) methods in RemoveTestPrefix by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#961](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/961)
> * Add UpgradeWiremockDependencyVersion recipe by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#963](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/963)
> * Support intermediate methods in SimplifyChainedAssertJAssertion by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#962](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/962)
> * Add MigrateToOracleFree recipe for Testcontainers by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#964](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/964)
>
> **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.33.0...v3.34.0>
>
> 3.33.0
> ------
>
> What's Changed
> --------------
>
> * OpenRewrite recipe best practices by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#949](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/949)
> * Add RemoveDoNothingForDefaultMocks recipe by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#947](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/947)
> * Add PowerMockitoDoStubbingToMockito recipe by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#948](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/948)
> * Remove [`@​SuppressStaticInitializationFor`](https://github.com/SuppressStaticInitializationFor) during PowerMockito migration by [`@​bmuschko`](https://github.com/bmuschko) in [openrewrite/rewrite-testing-frameworks#946](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/946)

... (truncated)


Commits

* [`1302589`](openrewrite/rewrite-testing-frameworks@1302589) Make declarative recipes singletons
* [`92de89a`](openrewrite/rewrite-testing-frameworks@92de89a) Fix UpdateMockWebServerDispatcher classpath lookup ([#975](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/975))
* [`64260b8`](openrewrite/rewrite-testing-frameworks@64260b8) Extract documentation examples from tests
* [`e09430b`](openrewrite/rewrite-testing-frameworks@e09430b) Add [`@​MockitoSettings`](https://github.com/MockitoSettings)(strictness = Strictness.WARN) for Mockito migration ([#966](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/966))
* [`f041383`](openrewrite/rewrite-testing-frameworks@f041383) Fix MockWebServer Dispatcher return type and RecordedRequest renames ([#972](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/972))
* [`13f0a17`](openrewrite/rewrite-testing-frameworks@13f0a17) OpenRewrite recipe best practices
* [`83d1f44`](openrewrite/rewrite-testing-frameworks@83d1f44) Use KotlinTypeUtils.isKotlinUnit to match Kotlin void return types ([#971](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/971))
* [`675b57d`](openrewrite/rewrite-testing-frameworks@675b57d) Fix RemoveTryCatchFailBlocks failing when removing blocks within lambda expre...
* [`ea72478`](openrewrite/rewrite-testing-frameworks@ea72478) Fix ClassCastException in RemoveTimesZeroAndOne ([#969](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/969))
* [`58bcc12`](openrewrite/rewrite-testing-frameworks@58bcc12) Add MigrateToKafkaNative recipe for Testcontainers ([#568](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/568)) ([#967](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/967))
* Additional commits viewable in [compare view](openrewrite/rewrite-testing-frameworks@v3.30.0...v3.35.2)
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.

1 participant