diff --git a/.gitignore b/.gitignore
index e871c05ad7470..f21b36a36f8f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,4 +33,5 @@ mvnd.zip*
backlog
.claude
.omc
-.oss-ai-helper-rules
\ No newline at end of file
+.oss-ai-helper-rules
+.rewrite-enabled
diff --git a/etc/scripts/regen.sh b/etc/scripts/regen.sh
index 5f4b75f2a69b0..e710691240b9d 100755
--- a/etc/scripts/regen.sh
+++ b/etc/scripts/regen.sh
@@ -25,6 +25,24 @@ cd `dirname "$0"`/../..
git clean -fdx
rm -Rf **/src/generated/
+# Enable OpenRewrite only for modules with changed Java files.
+# Maven's file-activated profile (.rewrite-enabled) checks
+# per-module, so OpenRewrite runs only where needed — no -Prewrite flag required.
+# We only need --deepen=1 (depth 1 -> 2) since we compare adjacent commits:
+# for PRs, HEAD~1 is the base branch tip (first parent of the merge commit);
+# for main builds, HEAD~1 is the previous squash-merged commit.
+if ! git rev-parse HEAD~1 >/dev/null 2>&1; then
+ git fetch --deepen=1 --quiet 2>/dev/null || true
+fi
+
+if git rev-parse HEAD~1 >/dev/null 2>&1; then
+ git diff HEAD~1 HEAD --name-only -- '*.java' ':!*/src/generated/*' \
+ | sed 's|/src/.*||' | sort -u \
+ | while read module; do
+ [ -d "$module" ] && touch "$module/.rewrite-enabled"
+ done
+fi
+
# Regenerate everything
if ./mvnw --batch-mode -Pregen -DskipTests ${MAVEN_EXTRA_ARGS} install >> build.log 2>&1; then
echo "✅ mvn -Pregen succeeded."
diff --git a/parent/pom.xml b/parent/pom.xml
index 3cc1d9705782a..2c1a4e7e22216 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -4183,6 +4183,11 @@
rewrite
+
+
+ .rewrite-enabled
+
+
diff --git a/pom.xml b/pom.xml
index bf74fe541a446..09060bbd3f5b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -261,6 +261,7 @@
${maven.multiModuleProjectDirectory}/buildingtools/src/main/resources/header.txt
+ **/.rewrite-enabled
release.properties
**/pom.xml.tag
**/pom.xml.releaseBackup