From 38e1ed7c78707c324ccc3cb588b0fa3a9916c572 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Wed, 11 Feb 2026 18:19:34 +0530 Subject: [PATCH 1/8] Preserving Parameter Names --- .../build/gradle/templates/buildGradle.rocker.raw | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw index a1b84c18580..91564365a2b 100644 --- a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw +++ b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw @@ -142,7 +142,20 @@ assets { } -// https://github.com/apache/grails-core/issues/15321 tasks.withType(GroovyCompile).configureEach { + // encoding needs to be the same since it's different across platforms + groovyOptions.encoding = 'UTF_8' + // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. + groovyOptions.parameters = true + // encoding needs to be the same since it's different across platforms + options.encoding = 'UTF_8' + // https://github.com/apache/grails-core/issues/15321 groovyOptions.optimizationOptions.indy = false } + +tasks.withType(JavaCompile).configureEach { + // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. + options.compilerArgs.add('-parameters') + // encoding needs to be the same since it's different across platforms + options.encoding = 'UTF_8' +} From 127f01e4375400fe2acda65483f843c7aa736339 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Wed, 11 Feb 2026 20:38:20 +0530 Subject: [PATCH 2/8] updated skeleton build.gradle --- grails-profiles/base/skeleton/build.gradle | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/grails-profiles/base/skeleton/build.gradle b/grails-profiles/base/skeleton/build.gradle index 99627b224f1..3dbf52b2aa3 100644 --- a/grails-profiles/base/skeleton/build.gradle +++ b/grails-profiles/base/skeleton/build.gradle @@ -27,7 +27,20 @@ tasks.withType(Test).configureEach { useJUnitPlatform() } -// https://github.com/apache/grails-core/issues/15321 tasks.withType(GroovyCompile).configureEach { + // encoding needs to be the same since it's different across platforms + groovyOptions.encoding = 'UTF_8' + // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. + groovyOptions.parameters = true + // encoding needs to be the same since it's different across platforms + options.encoding = 'UTF_8' + // https://github.com/apache/grails-core/issues/15321 groovyOptions.optimizationOptions.indy = false } + +tasks.withType(JavaCompile).configureEach { + // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. + options.compilerArgs.add('-parameters') + // encoding needs to be the same since it's different across platforms + options.encoding = 'UTF_8' +} From 7661d1cf8e3bcd65e6043f9920813dd4bb015a41 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Sat, 28 Feb 2026 19:27:43 +0530 Subject: [PATCH 3/8] removed hardcoded UTF_8 encoding as not all files are UTF-8 encoded and tests are failing --- .../feature/build/gradle/templates/buildGradle.rocker.raw | 6 ------ grails-profiles/base/skeleton/build.gradle | 6 ------ 2 files changed, 12 deletions(-) diff --git a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw index 2c68771f469..9ef0f5f4ae8 100644 --- a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw +++ b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw @@ -142,12 +142,8 @@ assets { } tasks.withType(GroovyCompile).configureEach { - // encoding needs to be the same since it's different across platforms - groovyOptions.encoding = 'UTF_8' // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. groovyOptions.parameters = true - // encoding needs to be the same since it's different across platforms - options.encoding = 'UTF_8' // https://github.com/apache/grails-core/issues/15321 groovyOptions.optimizationOptions.indy = false } @@ -155,6 +151,4 @@ tasks.withType(GroovyCompile).configureEach { tasks.withType(JavaCompile).configureEach { // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. options.compilerArgs.add('-parameters') - // encoding needs to be the same since it's different across platforms - options.encoding = 'UTF_8' } diff --git a/grails-profiles/base/skeleton/build.gradle b/grails-profiles/base/skeleton/build.gradle index 3dbf52b2aa3..b8ce5f2d532 100644 --- a/grails-profiles/base/skeleton/build.gradle +++ b/grails-profiles/base/skeleton/build.gradle @@ -28,12 +28,8 @@ tasks.withType(Test).configureEach { } tasks.withType(GroovyCompile).configureEach { - // encoding needs to be the same since it's different across platforms - groovyOptions.encoding = 'UTF_8' // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. groovyOptions.parameters = true - // encoding needs to be the same since it's different across platforms - options.encoding = 'UTF_8' // https://github.com/apache/grails-core/issues/15321 groovyOptions.optimizationOptions.indy = false } @@ -41,6 +37,4 @@ tasks.withType(GroovyCompile).configureEach { tasks.withType(JavaCompile).configureEach { // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. options.compilerArgs.add('-parameters') - // encoding needs to be the same since it's different across platforms - options.encoding = 'UTF_8' } From 1a83ae0e488eca0e96e867d4c42adb4a9ffd4159 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Sat, 28 Feb 2026 23:16:07 +0530 Subject: [PATCH 4/8] Added preserve parameter in grails-gradle-plugin --- .../gradle/plugin/core/GrailsExtension.groovy | 13 +++++++ .../plugin/core/GrailsGradlePlugin.groovy | 6 ++- .../GrailsGradlePreserveParametersSpec.groovy | 38 +++++++++++++++++++ .../preserve-params-default/build.gradle | 11 ++++++ .../preserve-params-default/gradle.properties | 1 + .../grails-app/conf/application.yml | 0 .../preserve-params-default/settings.gradle | 1 + .../preserve-params-disabled/build.gradle | 15 ++++++++ .../gradle.properties | 1 + .../grails-app/conf/application.yml | 0 .../preserve-params-disabled/settings.gradle | 1 + .../preserve-params-enabled/build.gradle | 15 ++++++++ .../preserve-params-enabled/gradle.properties | 1 + .../grails-app/conf/application.yml | 0 .../preserve-params-enabled/settings.gradle | 1 + 15 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsGradlePreserveParametersSpec.groovy create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/build.gradle create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/gradle.properties create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/grails-app/conf/application.yml create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/settings.gradle create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/build.gradle create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/gradle.properties create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/grails-app/conf/application.yml create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/settings.gradle create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/build.gradle create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/gradle.properties create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/grails-app/conf/application.yml create mode 100644 grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/settings.gradle diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy index c216885913d..fcb6f240255 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy @@ -44,6 +44,7 @@ class GrailsExtension { this.project = project this.pluginDefiner = new PluginDefiner(project) this.indy = project.objects.property(Boolean).convention(false) + this.preserveParameterNames = project.objects.property(Boolean).convention(true) } /** @@ -106,6 +107,18 @@ class GrailsExtension { this.indy.set(enabled) } + /** + * Preserve method parameter names in .class files (enables better IDE code completion for method parameters, + * reflection-based tools, bean introspection, etc.). + * Corresponds to groovyc `-parameters`. + * Default: true (See #13028) + */ + final Property preserveParameterNames + + void setPreserveParameterNames(boolean enabled) { + this.preserveParameterNames.set(enabled) + } + DependencyHandler getPlugins() { if (pluginDefiner == null) { pluginDefiner = new PluginDefiner(project) diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index bdfcc62c318..f09e812b317 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -229,14 +229,18 @@ class GrailsGradlePlugin implements Plugin { // Configure indy and log status after evaluation so user's grails { } block has been applied project.afterEvaluate { boolean indyEnabled = grailsExtension?.indy?.getOrElse(false) ?: false + boolean preserveParameterNames = grailsExtension?.preserveParameterNames != null + ? grailsExtension.preserveParameterNames.getOrElse(true) : true project.tasks.withType(GroovyCompile).configureEach { GroovyCompile c -> c.groovyOptions.optimizationOptions.indy = indyEnabled + c.groovyOptions.parameters = preserveParameterNames } if (!indyEnabled) { project.logger.info('Grails: Groovy invokedynamic (indy) is disabled to improve performance (see issue #15293).') project.logger.info(' To enable invokedynamic: grails { indy = true } in build.gradle') } - } + project.logger.info("Grails: Parameter name preservation is ${preserveParameterNames ? 'enabled' : 'disabled'} (-parameters flag). " + + "To change: grails { preserveParameterNames = ${!preserveParameterNames} } in build.gradle (see #13028)") } } protected Closure getGroovyCompilerScript(GroovyCompile compile, Project project) { diff --git a/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsGradlePreserveParametersSpec.groovy b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsGradlePreserveParametersSpec.groovy new file mode 100644 index 00000000000..0ac98bfeea7 --- /dev/null +++ b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/GrailsGradlePreserveParametersSpec.groovy @@ -0,0 +1,38 @@ +package org.grails.gradle.plugin.core + +class GrailsGradlePreserveParametersSpec extends GradleSpecification { + + def "Grails extension is created with default preserveParameterNames = true"() { + given: + setupTestResourceProject('preserve-params-default') + + when: + def result = executeTask('inspectPreserveParam') + + then: + result.output.contains("HAS_PRESERVE_PARAM_ENABLED=true") + } + + def "preserveParameterNames can be configured to false via grails block"() { + given: + setupTestResourceProject('preserve-params-disabled') + + when: + def result = executeTask('inspectPreserveParam') + + then: + result.output.contains("HAS_PRESERVE_PARAM_ENABLED=false") + } + + def "GroovyCompile tasks get parameters = true when preserveParameterNames is enabled"() { + given: + setupTestResourceProject('preserve-params-enabled') + + when: + def result = executeTask('inspectPreserveParam') + + then: + result.output.contains("HAS_PRESERVE_PARAM_ENABLED=true") + } + +} diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/build.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/build.gradle new file mode 100644 index 00000000000..7a1ad930db1 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'org.apache.grails.gradle.grails-app' +} + +tasks.register('inspectPreserveParam') { + doLast { + def compileTasks = tasks.withType(GroovyCompile) + def paramsEnabled = compileTasks.every { it.groovyOptions.parameters } + println "HAS_PRESERVE_PARAM_ENABLED=${paramsEnabled}" + } +} diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/gradle.properties b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/gradle.properties new file mode 100644 index 00000000000..35c332fb874 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/gradle.properties @@ -0,0 +1 @@ +grailsVersion=__PROJECT_VERSION__ diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/grails-app/conf/application.yml b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/grails-app/conf/application.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/settings.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/settings.gradle new file mode 100644 index 00000000000..5c9b3b13f44 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-default/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'test-preserve-params-default' diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/build.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/build.gradle new file mode 100644 index 00000000000..6f0bc7d0fe6 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.apache.grails.gradle.grails-app' +} + +grails { + preserveParameterNames = false +} + +tasks.register('inspectPreserveParam') { + doLast { + def compileTasks = tasks.withType(GroovyCompile) + def paramsEnabled = compileTasks.every { it.groovyOptions.parameters } + println "HAS_PRESERVE_PARAM_ENABLED=${paramsEnabled}" + } +} diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/gradle.properties b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/gradle.properties new file mode 100644 index 00000000000..35c332fb874 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/gradle.properties @@ -0,0 +1 @@ +grailsVersion=__PROJECT_VERSION__ diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/grails-app/conf/application.yml b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/grails-app/conf/application.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/settings.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/settings.gradle new file mode 100644 index 00000000000..4abc2d63994 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-disabled/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'test-preserve-params-disabled' diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/build.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/build.gradle new file mode 100644 index 00000000000..499c5af8226 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'org.apache.grails.gradle.grails-app' +} + +grails { + preserveParameterNames = true +} + +tasks.register('inspectPreserveParam') { + doLast { + def compileTasks = tasks.withType(GroovyCompile) + def paramsEnabled = compileTasks.every { it.groovyOptions.parameters } + println "HAS_PRESERVE_PARAM_ENABLED=${paramsEnabled}" + } +} diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/gradle.properties b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/gradle.properties new file mode 100644 index 00000000000..35c332fb874 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/gradle.properties @@ -0,0 +1 @@ +grailsVersion=__PROJECT_VERSION__ diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/grails-app/conf/application.yml b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/grails-app/conf/application.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/settings.gradle b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/settings.gradle new file mode 100644 index 00000000000..03a5cd09a44 --- /dev/null +++ b/grails-gradle/plugins/src/test/resources/test-projects/preserve-params-enabled/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'test-preserve-params-enabled' From 88586a020aa094206ae298b1ca939ba1f99a51ee Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Sat, 28 Feb 2026 23:18:52 +0530 Subject: [PATCH 5/8] reverted previous changes in build.gradle --- .../build/gradle/templates/buildGradle.rocker.raw | 11 ----------- grails-profiles/base/skeleton/build.gradle | 11 ----------- 2 files changed, 22 deletions(-) diff --git a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw index 9ef0f5f4ae8..495addb16ff 100644 --- a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw +++ b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/build/gradle/templates/buildGradle.rocker.raw @@ -141,14 +141,3 @@ assets { } -tasks.withType(GroovyCompile).configureEach { - // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. - groovyOptions.parameters = true - // https://github.com/apache/grails-core/issues/15321 - groovyOptions.optimizationOptions.indy = false -} - -tasks.withType(JavaCompile).configureEach { - // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. - options.compilerArgs.add('-parameters') -} diff --git a/grails-profiles/base/skeleton/build.gradle b/grails-profiles/base/skeleton/build.gradle index b8ce5f2d532..cb32eb4613e 100644 --- a/grails-profiles/base/skeleton/build.gradle +++ b/grails-profiles/base/skeleton/build.gradle @@ -27,14 +27,3 @@ tasks.withType(Test).configureEach { useJUnitPlatform() } -tasks.withType(GroovyCompile).configureEach { - // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. - groovyOptions.parameters = true - // https://github.com/apache/grails-core/issues/15321 - groovyOptions.optimizationOptions.indy = false -} - -tasks.withType(JavaCompile).configureEach { - // Preserve method parameter names in Groovy/Java classes for IDE parameter hints & bean reflection metadata. - options.compilerArgs.add('-parameters') -} From 8ec535d9f6258424d097fbb546d5045d52f810f6 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Sun, 1 Mar 2026 09:27:52 +0530 Subject: [PATCH 6/8] improved logging --- .../gradle/plugin/core/GrailsGradlePlugin.groovy | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index f09e812b317..0018e9c411c 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -231,16 +231,22 @@ class GrailsGradlePlugin implements Plugin { boolean indyEnabled = grailsExtension?.indy?.getOrElse(false) ?: false boolean preserveParameterNames = grailsExtension?.preserveParameterNames != null ? grailsExtension.preserveParameterNames.getOrElse(true) : true + project.tasks.withType(GroovyCompile).configureEach { GroovyCompile c -> c.groovyOptions.optimizationOptions.indy = indyEnabled c.groovyOptions.parameters = preserveParameterNames } + if (!indyEnabled) { project.logger.info('Grails: Groovy invokedynamic (indy) is disabled to improve performance (see issue #15293).') project.logger.info(' To enable invokedynamic: grails { indy = true } in build.gradle') } - project.logger.info("Grails: Parameter name preservation is ${preserveParameterNames ? 'enabled' : 'disabled'} (-parameters flag). " + - "To change: grails { preserveParameterNames = ${!preserveParameterNames} } in build.gradle (see #13028)") } + + if (preserveParameterNames) { + project.logger.info('Grails: Parameter name preservation is enabled (-parameters flag), refer to issue #13028.') + project.logger.info(' To disable: grails { preserveParameterNames = false } in build.gradle') + } + } } protected Closure getGroovyCompilerScript(GroovyCompile compile, Project project) { From aa0afeed230640e64ad1a943d1be286c04d67666 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Sun, 1 Mar 2026 10:50:26 +0530 Subject: [PATCH 7/8] addressed review comments --- .../grails/gradle/plugin/core/GrailsExtension.groovy | 12 ++++-------- .../gradle/plugin/core/GrailsGradlePlugin.groovy | 10 ++-------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy index fcb6f240255..6d837939f6a 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy @@ -44,7 +44,6 @@ class GrailsExtension { this.project = project this.pluginDefiner = new PluginDefiner(project) this.indy = project.objects.property(Boolean).convention(false) - this.preserveParameterNames = project.objects.property(Boolean).convention(true) } /** @@ -108,16 +107,13 @@ class GrailsExtension { } /** - * Preserve method parameter names in .class files (enables better IDE code completion for method parameters, - * reflection-based tools, bean introspection, etc.). + * Preserve method parameter names in .class files + * This would make grails to not have to specify '@qualifier' for wiring by name. + * Additionally enables better IDE code completion for method parameters, reflection-based tools, bean introspection, etc.). * Corresponds to groovyc `-parameters`. * Default: true (See #13028) */ - final Property preserveParameterNames - - void setPreserveParameterNames(boolean enabled) { - this.preserveParameterNames.set(enabled) - } + boolean preserveParameterNames = true DependencyHandler getPlugins() { if (pluginDefiner == null) { diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index 0018e9c411c..2c5e0bc4a56 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -228,9 +228,8 @@ class GrailsGradlePlugin implements Plugin { // Configure indy and log status after evaluation so user's grails { } block has been applied project.afterEvaluate { - boolean indyEnabled = grailsExtension?.indy?.getOrElse(false) ?: false - boolean preserveParameterNames = grailsExtension?.preserveParameterNames != null - ? grailsExtension.preserveParameterNames.getOrElse(true) : true + boolean indyEnabled = grailsExtension.indy?.getOrElse(false) ?: false + boolean preserveParameterNames = grailsExtension.preserveParameterNames project.tasks.withType(GroovyCompile).configureEach { GroovyCompile c -> c.groovyOptions.optimizationOptions.indy = indyEnabled @@ -241,11 +240,6 @@ class GrailsGradlePlugin implements Plugin { project.logger.info('Grails: Groovy invokedynamic (indy) is disabled to improve performance (see issue #15293).') project.logger.info(' To enable invokedynamic: grails { indy = true } in build.gradle') } - - if (preserveParameterNames) { - project.logger.info('Grails: Parameter name preservation is enabled (-parameters flag), refer to issue #13028.') - project.logger.info(' To disable: grails { preserveParameterNames = false } in build.gradle') - } } } From f231d9216cf926c4f33050a59705681509de6d28 Mon Sep 17 00:00:00 2001 From: Rahul Shishodia Date: Mon, 2 Mar 2026 18:52:32 +0530 Subject: [PATCH 8/8] addressed review comments #2 --- .../gradle/plugin/core/GrailsExtension.groovy | 13 +++++++------ .../gradle/plugin/core/GrailsGradlePlugin.groovy | 7 +++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy index 6d837939f6a..aac436e0396 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsExtension.groovy @@ -44,6 +44,7 @@ class GrailsExtension { this.project = project this.pluginDefiner = new PluginDefiner(project) this.indy = project.objects.property(Boolean).convention(false) + this.preserveParameterNames = project.objects.property(Boolean).convention(true) } /** @@ -107,13 +108,13 @@ class GrailsExtension { } /** - * Preserve method parameter names in .class files - * This would make grails to not have to specify '@qualifier' for wiring by name. - * Additionally enables better IDE code completion for method parameters, reflection-based tools, bean introspection, etc.). - * Corresponds to groovyc `-parameters`. - * Default: true (See #13028) + * Keep class file parameter names so autowire by name can be supported without additional annotations such as '@qualifier'. */ - boolean preserveParameterNames = true + final Property preserveParameterNames + + void setPreserveParameterNames(boolean enabled) { + this.preserveParameterNames.set(enabled) + } DependencyHandler getPlugins() { if (pluginDefiner == null) { diff --git a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index 2c5e0bc4a56..98cec0c55f7 100644 --- a/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -229,11 +229,14 @@ class GrailsGradlePlugin implements Plugin { // Configure indy and log status after evaluation so user's grails { } block has been applied project.afterEvaluate { boolean indyEnabled = grailsExtension.indy?.getOrElse(false) ?: false - boolean preserveParameterNames = grailsExtension.preserveParameterNames + boolean preserveParameterNames = grailsExtension.preserveParameterNames?.getOrElse(true) project.tasks.withType(GroovyCompile).configureEach { GroovyCompile c -> c.groovyOptions.optimizationOptions.indy = indyEnabled - c.groovyOptions.parameters = preserveParameterNames + + if (preserveParameterNames) { + c.groovyOptions.parameters = preserveParameterNames + } } if (!indyEnabled) {