Skip to content

Add mapstruct-processor to annotation processor paths when Lombok and MapStruct are used - #1175

Merged
timtebeek merged 4 commits into
mainfrom
tim/1174-mapstruct-annotation-processor
Jul 24, 2026
Merged

Add mapstruct-processor to annotation processor paths when Lombok and MapStruct are used#1175
timtebeek merged 4 commits into
mainfrom
tim/1174-mapstruct-annotation-processor

Conversation

@timtebeek

@timtebeek timtebeek commented Jul 24, 2026

Copy link
Copy Markdown
Member

Problem

When a project uses both Lombok and MapStruct, UpgradeToJava17 (via AddLombokMapstructBinding + EnableLombokAnnotationProcessor) adds the lombok-mapstruct-binding and lombok annotation processor paths, but never adds mapstruct-processor. Without it on the annotation processor path, MapStruct generates no mapper code once annotation processing is configured explicitly (required from Java 23 onward).

Fix

New recipe org.openrewrite.java.migrate.AddMapstructAnnotationProcessorPath, wired into AddLombokMapstructBinding. It:

  • discovers the resolved org.mapstruct:mapstruct version, and
  • adds a mapstruct-processor <path> to the maven-compiler-plugin annotationProcessorPaths at that same version.

It reuses the upstream org.openrewrite.maven.AddAnnotationProcessor for the actual insertion (so multi-module placement, "already configured" detection, and maven-compiler-plugin 3.12+ managed-version handling all carry over), supplying the version discovered during the scan phase. No-op when MapStruct isn't present.

Tests

  • AddLombokMapstructBindingTest: new addMapstructProcessorForMaven; existing Maven cases updated to include the new path; doesNotDuplicateMaven extended to assert idempotency for the mapstruct-processor path too. Gradle cases are unaffected (the recipe is Maven-only).
  • UpgradeToJava17Test: new addsMapstructProcessorWhenLombokAndMapstructUsedWithoutAnnotationProcessorPaths exercising the full chain from the issue — mapstruct-processor is added and tracks the upgraded MapStruct 1.6.x version.

@timtebeek
timtebeek merged commit 7c45df7 into main Jul 24, 2026
1 check passed
@timtebeek
timtebeek deleted the tim/1174-mapstruct-annotation-processor branch July 24, 2026 21:36
@github-project-automation github-project-automation Bot moved this from In Progress to Done in OpenRewrite Jul 24, 2026
mergify Bot added a commit to robfrank/linklift that referenced this pull request Aug 4, 2026
…40.0 to 3.41.0 [skip ci]

Bumps [org.openrewrite.recipe:rewrite-migrate-java](https://github.com/openrewrite/rewrite-migrate-java) from 3.40.0 to 3.41.0.
Release notes

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

> 3.41.0
> ------
>
> What's Changed
> --------------
>
> * Add Mockito Java agent surefire config in reactor modules by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1169](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1169)
> * Move Java EE 8 servlet update into separate recipe by [`@​rlsanders4`](https://github.com/rlsanders4) in [openrewrite/rewrite-migrate-java#1170](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1170)
> * Update NoGuavaRefaster expected output for upstream static-import change by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1171](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1171)
> * Set Develocity `projectId` to "openrewrite" by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1172](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1172)
> * Add `mapstruct-processor` to annotation processor paths when Lombok and MapStruct are used by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1175](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1175)
> * Fix method patterns for dead `UnsignedInts`/`UnsignedLongs` recipes by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-migrate-java#1176](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1176)
> * Migrate web.xml xsi:schemaLocation from J2EE 1.4 namespace by [`@​steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-migrate-java#1177](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1177)
> * Forward Code Genome Project publish credentials to `ci-gradle.yml` by [`@​jkschneider`](https://github.com/jkschneider) in [openrewrite/rewrite-migrate-java#1178](https://redirect.github.com/openrewrite/rewrite-migrate-java/pull/1178)
>
> **Full Changelog**: <openrewrite/rewrite-migrate-java@v3.40.0...v3.41.0>


Commits

* [`128764a`](openrewrite/rewrite-migrate-java@128764a) Forward Code Genome Project publish credentials to `ci-gradle.yml` ([#1178](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1178))
* [`39b31e8`](openrewrite/rewrite-migrate-java@39b31e8) Migrate web.xml xsi:schemaLocation from J2EE 1.4 namespace ([#1177](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1177))
* [`e7f0b34`](openrewrite/rewrite-migrate-java@e7f0b34) [Auto] SDKMAN! Java candidates as of 2026-07-27T1252
* [`e29c330`](openrewrite/rewrite-migrate-java@e29c330) Fix method patterns for dead `UnsignedInts`/`UnsignedLongs` recipes ([#1176](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1176))
* [`7c45df7`](openrewrite/rewrite-migrate-java@7c45df7) Add `mapstruct-processor` to annotation processor paths when Lombok and MapSt...
* [`ab370a9`](openrewrite/rewrite-migrate-java@ab370a9) Set Develocity `projectId` to "openrewrite" ([#1172](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1172))
* [`cddded8`](openrewrite/rewrite-migrate-java@cddded8) Move Develocity to community.develocity.cloud
* [`577446f`](openrewrite/rewrite-migrate-java@577446f) Update NoGuavaRefaster expected output for upstream static-import change ([#1171](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1171))
* [`9b7a874`](openrewrite/rewrite-migrate-java@9b7a874) [Auto] SDKMAN! Java candidates as of 2026-07-20T1212
* [`a5b7ddc`](openrewrite/rewrite-migrate-java@a5b7ddc) Move Java EE 8 servlet update into separate recipe ([#1170](https://redirect.github.com/openrewrite/rewrite-migrate-java/issues/1170))
* Additional commits viewable in [compare view](openrewrite/rewrite-migrate-java@v3.40.0...v3.41.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.

Java 17 - Lombok Annotation Processors - include mapstruct

1 participant