You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by ja...@apache.org on 2026/03/20 20:05:23 UTC
(grails-core) 02/07: Merge remote-tracking branch 'origin/8.0.x' into spring-boot-4
This is an automated email from the ASF dual-hosted git repository.
jamesfredley pushed a commit to branch spring-boot-4
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit fb217b99bac2bb9e2f987a44f0176f9508028c43
Merge: f1a881e9be cee6619f4a
Author: James Fredley <ja...@users.noreply.github.com>
AuthorDate: Fri Mar 20 15:33:20 2026 -0400
Merge remote-tracking branch 'origin/8.0.x' into spring-boot-4
# Conflicts:
# dependencies.gradle
# grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
# grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigurationSpec.groovy
# grails-data-mongodb/boot-plugin/src/test/groovy/org/grails/datastore/gorm/mongodb/boot/autoconfigure/MongoDbGormAutoConfigureWithGeoSpacialSpec.groovy
.agents/skills/grails-developer/SKILL.md | 885 +++++++++++++++
.agents/skills/groovy-developer/SKILL.md | 521 +++++++++
.agents/skills/java-developer/SKILL.md | 286 +++++
.claude/skills/grails-developer/SKILL.md | 1 +
.claude/skills/groovy-developer/SKILL.md | 1 +
.claude/skills/java-developer/SKILL.md | 1 +
.clinerules | 1 +
.cursorrules | 1 +
.github/workflows/codeql.yml | 4 +-
.github/workflows/codestyle.yml | 69 +-
.github/workflows/forge-deploy-next.yml | 12 +-
.github/workflows/forge-deploy-prev-snapshot.yml | 12 +-
.github/workflows/forge-deploy-prev.yml | 12 +-
.github/workflows/forge-deploy-release.yml | 12 +-
.github/workflows/forge-deploy-snapshot.yml | 12 +-
.github/workflows/gradle.yml | 168 ++-
.github/workflows/groovy-joint-workflow.yml | 21 +-
.github/workflows/rat.yml | 8 +-
.github/workflows/release-close.yml | 96 ++
.github/workflows/release-notes.yml | 10 +-
.github/workflows/release-publish-docs.yml | 79 ++
.github/workflows/release.yml | 51 +-
.idea/codeStyles/Project.xml | 6 +
.mailmap | 933 ----------------
.sdkmanrc | 7 +-
.windsurfrules | 1 +
AGENTS.md | 268 +++++
CLAUDE.md | 1 +
GEMINI.md | 1 +
INSTALL | 4 +
README.md | 2 +-
RELEASE.md | 2 +-
build-logic/docs-core/build.gradle | 8 +-
.../gradle/tasks/bom/CoordinateHolder.groovy | 2 +-
.../tasks/bom/CoordinateVersionHolder.groovy | 10 +
.../tasks/bom/ExtractDependenciesTask.groovy | 24 +-
.../gradle/tasks/bom/PropertyNameCalculator.groovy | 28 +-
.../gradle/wrapper/gradle-wrapper.properties | 4 +-
build-logic/plugins/build.gradle | 16 +
.../buildsrc/GrailsCodeStyleExtension.groovy | 62 ++
.../grails/buildsrc/GrailsCodeStylePlugin.groovy | 190 ++++
.../grails/buildsrc/GrailsGroovydocPlugin.groovy | 54 +
.../buildsrc/GrailsRepoSettingsPlugin.groovy | 113 ++
.../buildsrc/GroovydocEnhancerExtension.groovy | 108 ++
.../grails/buildsrc/GroovydocEnhancerPlugin.groovy | 180 +++
.../org/apache/grails/buildsrc/SbomPlugin.groovy | 8 +
.../checkstyle/checkstyle-suppressions.xml | 0
.../checkstyle/checkstyle.xml | 0
.../codenarc/codenarc.groovy | 0
build-logic/settings.gradle | 19 +-
build.gradle | 38 +-
buildSrc/build.gradle | 2 +-
buildSrc/settings.gradle | 73 +-
dependencies.gradle | 43 +-
etc/bin/Dockerfile | 3 +-
etc/bin/test-reproducible-builds.sh | 5 +
etc/bin/verify.sh | 49 +-
gradle.properties | 8 +-
gradle/code-style-config.gradle | 69 --
gradle/docs-dependencies.gradle | 58 +-
gradle/functional-test-config.gradle | 1 +
gradle/grails-data-tck-config.gradle | 4 +-
gradle/grails-extension-gradle-config.gradle | 7 +
gradle/publish-root-config.gradle | 3 +
gradle/test-config.gradle | 23 +-
gradle/wrapper/gradle-wrapper.properties | 4 +-
grails-async/core/build.gradle | 2 +-
grails-async/gpars/build.gradle | 2 +-
grails-async/plugin/build.gradle | 2 +-
grails-async/rxjava/build.gradle | 2 +-
grails-async/rxjava2/build.gradle | 2 +-
grails-async/rxjava3/build.gradle | 2 +-
grails-bom/build.gradle | 58 +-
grails-bootstrap/build.gradle | 2 +-
.../codegen/model/AbstractMemberDefinition.groovy | 225 ++++
.../codegen/model/DomainFieldModifier.groovy | 391 +++++++
.../grails/codegen/model/FieldDefinition.groovy | 156 +++
.../grails/codegen/model/PropertyDefinition.groovy | 119 ++
.../codegen/model/DomainFieldModifierSpec.groovy | 502 +++++++++
.../codegen/model/FieldDefinitionSpec.groovy | 162 +++
.../codegen/model/PropertyDefinitionSpec.groovy | 364 ++++++
grails-cache/build.gradle | 2 +-
grails-codecs-core/build.gradle | 2 +-
grails-codecs/build.gradle | 2 +-
grails-common/build.gradle | 2 +-
grails-console/build.gradle | 3 +-
.../GrailsApplicationContextCommandRunner.groovy | 34 +-
.../ui/script/GrailsApplicationScriptRunner.groovy | 9 +-
...railsApplicationContextCommandRunnerSpec.groovy | 136 +++
.../GrailsApplicationScriptRunnerSpec.groovy | 54 +
grails-controllers/build.gradle | 2 +-
grails-converters/build.gradle | 2 +-
.../src/main/groovy/grails/web/JSONBuilder.groovy | 2 +-
grails-core/build.gradle | 2 +-
.../main/groovy/grails/core/GrailsApplication.java | 6 +-
.../grails/dev/commands/ApplicationCommand.groovy | 41 +-
grails-core/src/main/groovy/grails/util/Mixin.java | 2 +-
.../groovy/grails/util/MixinTargetAware.groovy | 2 +-
.../grails/validation/ConstraintsEvaluator.java | 2 +-
.../injection/ApplicationClassInjector.groovy | 46 +-
.../injection/ArtefactTypeAstTransformation.java | 2 +-
.../compiler/injection/MixinTransformation.java | 2 +-
.../grails/boot/DevelopmentModeWatchSpec.groovy | 4 +-
...aceHolderConfigurerCorePluginRuntimeSpec.groovy | 2 +
.../injection/ApplicationClassInjectorSpec.groovy | 100 ++
.../compiler/injection/GrailsASTUtilsTests.groovy | 9 +-
.../injection/GrailsArtefactTransformerSpec.groovy | 6 +-
.../config/NavigableMapSpringProfilesSpec.groovy | 2 +
.../config/YamlPropertySourceLoaderSpec.groovy | 8 +-
.../org/grails/plugins/GrailsPluginTests.groovy | 9 +-
grails-core/src/test/resources/application.yml | 4 +-
.../src/test/resources/foo-plugin-environments.yml | 4 +-
grails-data-docs/stage/build.gradle | 10 +-
.../grails-app/conf/application.yml | 8 +-
.../groovy/myapp/BarIntegrationSpec.groovy | 3 +-
.../groovy/myapp/FooIntegrationSpec.groovy | 3 +-
grails-data-graphql/gradle.properties | 2 +-
grails-data-graphql/settings.gradle | 2 +-
grails-data-hibernate5/boot-plugin/build.gradle | 2 +-
grails-data-hibernate5/core/build.gradle | 2 +-
.../grails/orm/HibernateCriteriaBuilder.java | 27 +
.../AbstractHibernateGormStaticApi.groovy | 2 +-
.../grails/orm/hibernate/cfg/PropertyConfig.groovy | 5 +-
.../query/AbstractHibernateCriteriaBuilder.java | 102 +-
.../hibernate/query/AbstractHibernateQuery.java | 105 +-
.../mapping/HibernateMappingBuilderTests.groovy | 13 +-
.../gorm/tests/BasicCollectionInQuerySpec.groovy | 167 +++
.../gorm/tests/DetachedCriteriaJoinSpec.groovy | 124 ++-
...hedCriteriaProjectionNullAssociationSpec.groovy | 136 +++
.../grails/gorm/tests/WhereQueryBugFixSpec.groovy | 106 ++
.../WhereQueryOldIssueVerificationSpec.groovy | 371 +++++++
.../tests/compositeid/CompositeIdCriteria.groovy | 80 ++
.../MultiTenancyBidirectionalManyToManySpec.groovy | 2 +
.../core/GrailsDataHibernate5TckManager.groovy | 91 +-
.../orm/hibernate/ExistsCrossJoinSpec.groovy | 122 ++
.../DataServiceDatasourceInheritanceSpec.groovy | 239 ++++
.../DataServiceMultiDataSourceSpec.groovy | 460 ++++++++
...ataServiceMultiTenantMultiDataSourceSpec.groovy | 287 +++++
.../MultipleDataSourceConnectionsSpec.groovy | 72 +-
.../connections/SchemaMultiTenantSpec.groovy | 3 +
.../hibernate/connections/SingleTenantSpec.groovy | 3 +
.../WhereQueryMultiDataSourceSpec.groovy | 179 +++
grails-data-hibernate5/dbmigration/README.md | 26 +-
grails-data-hibernate5/dbmigration/build.gradle | 20 +-
grails-data-hibernate5/docs/build.gradle | 26 +-
.../asciidoc/gettingStarted/outsideGrails.adoc | 2 +-
.../multipleDataSources/dataSourceNamespaces.adoc | 2 +
.../docs/asciidoc/multipleDataSources/index.adoc | 4 +
.../docs/src/docs/asciidoc/services/index.adoc | 5 +
.../asciidoc/services/multipleDataSources.adoc | 262 +++++
grails-data-hibernate5/grails-plugin/build.gradle | 3 +-
.../GrailsOpenSessionInViewInterceptor.java | 137 ++-
.../support/MultiDataSourceSessionSpec.groovy | 193 ++++
grails-data-mongodb/boot-plugin/build.gradle | 2 +-
.../MongoDbGormAutoConfigurationSpec.groovy | 1 +
...ngoDbGormAutoConfigureWithGeoSpacialSpec.groovy | 1 +
.../src/test/resources/docker-java.properties | 2 +
grails-data-mongodb/bson/build.gradle | 2 +-
grails-data-mongodb/core/build.gradle | 2 +-
.../main/groovy/grails/mongodb/MongoEntity.groovy | 2 +-
.../mongodb/api/MongoInstanceOperations.groovy | 5 +-
.../datastore/gorm/mongo/api/MongoStaticApi.groovy | 2 +-
.../MongoDbDataStoreSpringInitializerSpec.groovy | 24 +-
.../mongo/core/GrailsDataMongoTckManager.groovy | 81 ++
.../connections/MongoConnectionSourcesSpec.groovy | 7 +
.../gorm/mongo/connections/MultiTenancySpec.groovy | 5 +-
.../connections/SchemaBasedMultiTenancySpec.groovy | 5 +-
.../mongo/connections/SingleTenancySpec.groovy | 5 +-
.../MongoStaticApiMultiTenancySpec.groovy | 5 +-
grails-data-mongodb/docs/build.gradle | 26 +-
grails-data-mongodb/ext/build.gradle | 2 +-
grails-data-mongodb/grails-plugin/build.gradle | 2 +-
grails-data-mongodb/gson-templates/build.gradle | 2 +-
.../Neo4jAutoConfigurationSpec.groovy | 2 +
grails-data-neo4j/docs/build.gradle | 17 +
.../grails-app/assets/javascripts/application.js | 2 +-
.../grails-app/assets/javascripts/application.js | 2 +-
grails-data-neo4j/gradle.properties | 2 +-
.../tests/multitenancy/MultiTenancySpec.groovy | 4 +
.../tests/multitenancy/SingleTenancySpec.groovy | 2 +
grails-data-neo4j/settings.gradle | 4 +-
grails-data-simple/build.gradle | 2 +-
grails-databinding-core/build.gradle | 2 +-
grails-databinding/build.gradle | 2 +-
grails-datamapping-async/build.gradle | 2 +-
.../database/DatabasePerTenantSpec.groovy | 3 +-
.../MultiTenantServiceTransformSpec.groovy | 2 +
.../partitioned/PartitionMultiTenancySpec.groovy | 3 +-
.../multitenancy/schema/SchemaPerTenantSpec.groovy | 6 +-
.../gorm/tests/CurrentTenantTransformSpec.groovy | 6 +-
.../gorm/tests/DeepValidateWithSaveSpec.groovy | 46 +-
.../gorm/tests/MultipleDataSourceSpec.groovy | 67 +-
.../grails/gorm/tests/TenantServiceSpec.groovy | 7 +-
.../grails/gorm/tests/WhereMethodSpec.groovy | 151 +++
.../gorm/SaveWithFailOnErrorDefaultSpec.groovy | 50 +-
grails-datamapping-core/build.gradle | 3 +-
.../groovy/grails/gorm/DetachedCriteria.groovy | 22 +-
.../org/grails/datastore/gorm/GormEnhancer.groovy | 30 +-
.../org/grails/datastore/gorm/GormEntity.groovy | 4 +-
.../datastore/gorm/finders/CountByFinder.java | 1 +
.../datastore/gorm/jdbc/DataSourceBuilder.java | 64 +-
.../jdbc/connections/DataSourceSettings.groovy | 2 +-
.../datastore/gorm/query/NamedCriteriaProxy.groovy | 2 +-
.../gorm/query/NamedQueriesBuilder.groovy | 2 +
.../query/criteria/AbstractDetachedCriteria.groovy | 4 +
.../transform/DetachedCriteriaTransformer.java | 99 +-
...stractDetachedCriteriaServiceImplementor.groovy | 13 +-
.../implementers/AbstractSaveImplementer.groovy | 6 +-
.../implementers/AbstractWhereImplementer.groovy | 8 +-
.../services/implementers/DeleteImplementer.groovy | 11 +-
.../implementers/FindAndDeleteImplementer.groovy | 32 +-
.../services/implementers/SaveImplementer.groovy | 19 +-
.../implementers/UpdateOneImplementer.groovy | 2 +-
.../transform/ServiceTransformation.groovy | 187 +++-
.../CompileStaticServiceInjectionSpec.groovy | 356 ++++++
.../ConnectionRoutingServiceTransformSpec.groovy | 596 ++++++++++
.../services/WhereConnectionRoutingSpec.groovy | 211 ++++
.../gorm/GormEnhancerAllQualifiersSpec.groovy | 236 ++++
.../gorm/jdbc/DataSourceBuilderSpec.groovy | 927 ++++++++++++++++
.../criteria/DetachedCriteriaCloneSpec.groovy | 123 ++
grails-datamapping-rx/build.gradle | 2 +-
grails-datamapping-support/build.gradle | 2 +-
grails-datamapping-tck/build.gradle | 2 +-
.../testing/tck/base/GrailsDataTckManager.groovy | 32 +
.../tck/domains/DataServiceRoutingMetric.groovy | 42 +
.../domains/DataServiceRoutingMetricService.groovy | 39 +
.../tck/domains/DataServiceRoutingProduct.groovy | 40 +
.../DataServiceRoutingProductDataService.groovy | 41 +
.../DataServiceRoutingProductService.groovy | 43 +
.../testing/tck/domains/WhereRoutingItem.groovy | 43 +
.../tck/domains/WhereRoutingItemService.groovy | 37 +
.../tck/tests/CrossLayerMultiDataSourceSpec.groovy | 148 +++
...CrossLayerMultiTenantMultiDataSourceSpec.groovy | 132 +++
.../tests/DataServiceConnectionRoutingSpec.groovy | 288 +++++
...aServiceMultiTenantConnectionRoutingSpec.groovy | 153 +++
.../tck/tests/DomainMultiDataSourceSpec.groovy | 180 +++
.../DomainMultiTenantMultiDataSourceSpec.groovy | 168 +++
.../tests/WhereQueryConnectionRoutingSpec.groovy | 136 +++
grails-datamapping-validation/build.gradle | 2 +-
.../grails/gorm/validation/Constrained.groovy | 10 +-
.../validation/DefaultConstrainedProperty.groovy | 51 +-
.../grails/gorm/validation/DisplayType.groovy | 81 ++
.../grails/gorm/validation/DisplayTypeSpec.groovy | 151 +++
grails-datasource/build.gradle | 2 +-
grails-datastore-async/build.gradle | 2 +-
grails-datastore-core/build.gradle | 2 +-
...atastoreServiceMethodInvokingFactoryBean.groovy | 102 +-
.../grails/datastore/mapping/config/Entity.groovy | 8 +-
.../datastore/mapping/core/AbstractSession.java | 2 +-
.../dirty/checking/DirtyCheckingSupport.groovy | 2 +-
.../mapping/query/jpa/JpaQueryBuilder.java | 53 +
...toreServiceMethodInvokingFactoryBeanSpec.groovy | 174 +++
grails-datastore-web/build.gradle | 2 +-
grails-doc/build.gradle | 14 +-
grails-doc/src/en/guide/GORM/quickStartGuide.adoc | 4 +-
.../en/guide/GORM/quickStartGuide/basicCRUD.adoc | 16 +-
grails-doc/src/en/guide/REST/domainResources.adoc | 15 +
grails-doc/src/en/guide/REST/hypermedia/hal.adoc | 13 +
.../src/en/guide/REST/versioningResources.adoc | 13 +
.../{contributing.adoc => bestPractices.adoc} | 2 +-
.../en/guide/bestPractices/codeAnalysisGroovy.adoc | 159 +++
.../guide/cache/cacheUsage/cacheConfiguration.adoc | 2 +-
grails-doc/src/en/guide/commandLine.adoc | 2 +-
.../guide/commandLine/creatingCustomCommands.adoc | 2 +-
.../dataSource/automaticDatabaseMigration.adoc | 15 +-
.../guide/conf/dataSource/multipleDatasources.adoc | 302 ++++-
grails-doc/src/en/guide/conf/docengine.adoc | 23 +-
grails-doc/src/en/guide/conf/environments.adoc | 33 +-
grails-doc/src/en/guide/contributing.adoc | 2 +-
grails-doc/src/en/guide/index.adoc | 6 +-
.../guide/plugins/artefactApi/customArtefacts.adoc | 2 +-
.../src/en/guide/profiles/pluginProfile.adoc | 2 +-
.../src/en/guide/profiles/profileProfile.adoc | 2 +-
.../en/guide/profiles/restAPIPluginProfile.adoc | 2 +-
.../src/en/guide/profiles/restAPIProfile.adoc | 2 +-
.../src/en/guide/profiles/webPluginProfile.adoc | 2 +-
grails-doc/src/en/guide/profiles/webProfile.adoc | 2 +-
grails-doc/src/en/guide/reference.adoc | 4 +-
grails-doc/src/en/guide/security/codecs.adoc | 10 +
.../src/en/guide/security/xssPrevention.adoc | 34 +
.../transactionsMultiDataSource.adoc | 4 +
.../spring/propertyPlaceholderConfiguration.adoc | 9 +
.../src/en/guide/testing/integrationTesting.adoc | 179 +++
.../en/guide/theWebLayer/contentNegotiation.adoc | 42 +
.../guide/theWebLayer/controllers/dataBinding.adoc | 56 +-
.../gsp/GSPBasics/variablesAndScopes.adoc | 8 +-
.../gsp/taglibs/taglibVariablesAndScopes.adoc | 8 +-
.../interceptors/interceptorOrdering.adoc | 9 +
.../urlmappings/customizingUrlFormat.adoc | 11 +
grails-doc/src/en/guide/toc.yml | 3 +
.../src/en/guide/upgrading/upgrading60x.adoc | 124 ++-
grails-doc/src/en/ref/Constraints.adoc | 51 +-
grails-doc/src/en/ref/Constraints/nullable.adoc | 14 +
grails-doc/src/en/ref/Controllers/withFormat.adoc | 16 +
.../src/en/ref/Database Mapping/insertable.adoc | 4 +-
.../{updateable.adoc => updatable.adoc} | 10 +-
grails-doc/src/en/ref/Domain Classes/save.adoc | 14 +
grails-doc/src/en/ref/Plug-ins/dataSource.adoc | 13 +
.../src/en/ref/Servlet API/servletContext.adoc | 2 +-
.../src/en/ref/Tag Libraries/actionName.adoc | 13 +-
.../src/en/ref/Tag Libraries/controllerName.adoc | 14 +-
grails-doc/src/en/ref/Tag Libraries/flash.adoc | 11 +-
grails-doc/src/en/ref/Tag Libraries/pageScope.adoc | 5 +-
grails-doc/src/en/ref/Tag Libraries/params.adoc | 26 +-
grails-doc/src/en/ref/Tag Libraries/request.adoc | 16 +-
grails-doc/src/en/ref/Tag Libraries/response.adoc | 13 +-
.../src/en/ref/Tag Libraries/servletContext.adoc | 20 +-
grails-doc/src/en/ref/Tag Libraries/session.adoc | 27 +-
grails-domain-class/build.gradle | 2 +-
.../GrailsDomainClassAutoConfiguration.groovy | 1 +
.../domain/support/ConstraintEvaluatorAdapter.java | 1 +
.../grails/persistence/DomainClassTraitSpec.groovy | 6 +
grails-encoder/build.gradle | 2 +-
grails-events/compat/build.gradle | 2 +-
.../src/main/groovy/grails/artefact/Service.groovy | 2 +-
.../src/main/groovy/grails/events/Events.groovy | 2 +-
.../compat/src/main/groovy/reactor/bus/Bus.java | 2 +-
.../compat/src/main/groovy/reactor/bus/Event.java | 2 +-
.../src/main/groovy/reactor/bus/EventBus.groovy | 2 +-
.../reactor/bus/registry/Registration.groovy | 2 +-
.../reactor/bus/registry/Subscription.groovy | 2 +-
.../main/groovy/reactor/bus/selector/Selector.java | 2 +-
.../src/main/groovy/reactor/fn/Consumer.java | 2 +-
.../spring/context/annotation/Consumer.groovy | 1 +
.../spring/context/annotation/Selector.groovy | 1 +
grails-events/core/build.gradle | 2 +-
grails-events/gpars/build.gradle | 2 +-
grails-events/plugin/build.gradle | 2 +-
grails-events/rxjava/build.gradle | 2 +-
grails-events/rxjava2/build.gradle | 2 +-
grails-events/rxjava3/build.gradle | 2 +-
grails-events/spring/build.gradle | 2 +-
grails-events/transforms/build.gradle | 2 +-
grails-fields/build.gradle | 2 +-
.../plugin/formfields/FormFieldsTagLib.groovy | 33 +-
.../plugin/formfields/BeanPropertyAccessor.groovy | 2 +-
.../formfields/BeanPropertyAccessorImpl.groovy | 2 +
.../DelegatingBeanPropertyAccessorImpl.groovy | 2 +-
.../plugin/formfields/PropertyPathAccessor.groovy | 1 +
.../scaffolding/model/DomainModelService.groovy | 1 +
.../model/DomainModelServiceImpl.groovy | 58 +-
.../scaffolding/model/property/Constrained.groovy | 20 +
.../formfields/DefaultInputRenderingSpec.groovy | 22 +
.../model/DomainModelServiceSpec.groovy | 6 +-
grails-forge/buildSrc/build.gradle | 1 -
grails-forge/buildSrc/settings.gradle | 67 +-
...uppressions.xml => checkstyle-suppressions.xml} | 0
grails-forge/config/checkstyle/checkstyle.xml | 2 +-
grails-forge/gradle.properties | 5 +-
grails-forge/gradle/code-style-config.gradle | 42 +-
grails-forge/gradle/doc-config.gradle | 30 +-
grails-forge/gradle/test-config.gradle | 10 -
.../gradle/wrapper/gradle-wrapper.properties | 4 +-
.../analytics/postgres/AnalyticsController.java | 8 +-
.../forge/analytics/postgres/Application.java | 14 +-
.../analytics/postgres/FeatureRepository.java | 4 +-
.../postgres/StoreGeneratedProjectStatsSpec.groovy | 10 +-
.../grails/forge/api/ApplicationController.java | 2 +-
...estFramework.java => DevelopmentReloading.java} | 23 +-
...meworkDTO.java => DevelopmentReloadingDTO.java} | 64 +-
.../org/grails/forge/api/SelectOptionsDTO.java | 28 +-
.../forge/api/analytics/GenerationListener.java | 2 +-
.../forge/api/create/AbstractCreateController.java | 6 +-
.../api/create/github/GitHubCreateController.java | 12 +-
.../api/create/github/GitHubCreateOperation.java | 6 +-
.../api/create/github/GitHubCreateService.java | 6 +-
.../forge/api/create/zip/ZipCreateController.java | 22 +-
.../forge/api/create/zip/ZipCreateOperation.java | 6 +-
.../org/grails/forge/api/diff/DiffController.java | 12 +-
.../org/grails/forge/api/diff/DiffOperations.java | 8 +-
...java => DevelopmentReloadingSelectOptions.java} | 14 +-
.../forge/api/preview/PreviewController.java | 10 +-
.../forge/api/preview/PreviewOperations.java | 6 +-
.../src/main/resources/select_options.properties | 2 +-
.../org/grails/forge/api/CreateClient.groovy | 12 +-
.../groovy/org/grails/forge/api/DiffClient.groovy | 8 +-
.../grails/forge/api/FeatureControllerSpec.groovy | 22 +-
.../org/grails/forge/api/PreviewClient.groovy | 4 +-
.../forge/api/ZipCreateControllerSpec.groovy | 4 +-
grails-forge/grails-forge-cli/build.gradle | 5 +
.../java/org/grails/forge/cli/Application.java | 4 +-
.../java/org/grails/forge/cli/CodeGenConfig.java | 19 +-
.../forge/cli/command/AddPropertyCommand.java | 181 +++
.../grails/forge/cli/command/CreateCommand.java | 8 +-
...es.java => DevelopmentReloadingCandidates.java} | 8 +-
...ter.java => DevelopmentReloadingConverter.java} | 14 +-
.../CodeGenConfigDevelopmentReloadingSpec.groovy | 288 +++++
.../org/grails/forge/cli/CommandFixture.groovy | 5 +-
.../groovy/org/grails/forge/cli/CommandSpec.groovy | 2 +-
.../java/org/grails/forge/analytics/Generated.java | 10 +-
.../grails/forge/application/ContextFactory.java | 10 +-
.../generator/DefaultProjectGenerator.java | 2 +-
.../application/generator/GeneratorContext.java | 15 +-
.../build/gradle/DefaultGradleRepository.java | 59 +-
.../forge/build/gradle/GradleConfiguration.java | 6 +-
.../forge/build/gradle/GradleDependency.java | 10 +-
.../forge/build/gradle/GradleRepository.java | 51 +-
.../gradle/VersionType.java} | 9 +-
...st.java => HasDefaultDevelopmentReloading.java} | 6 +-
.../grails/forge/defaults/LanguageDefaults.java | 14 +-
.../java/org/grails/forge/diff/FeatureDiffer.java | 2 +-
.../org/grails/forge/feature/FeatureContext.java | 32 +-
.../java/org/grails/forge/feature/Features.java | 12 +-
.../forge/feature/assetPipeline/AssetPipeline.java | 59 +-
.../build/gradle/templates/buildGradle.rocker.raw | 4 +-
.../templates/gradleWrapperProperties.rocker.raw | 3 +-
.../java/org/grails/forge/feature/cli.rocker.raw | 6 +-
.../forge/feature/database/TestContainers.java | 27 +-
.../GrailsMicronautValidator.java} | 18 +-
.../org/grails/forge/feature/reloading/Jrebel.java | 16 +
.../forge/feature/reloading/ReloadingFeature.java | 11 +-
.../feature/reloading/SpringBootDevTools.java | 31 +-
.../feature/spring/SpringBootUndertowFeature.java | 4 +
.../feature/spring/SpringBootVirtualThreads.java | 6 +-
.../org/grails/forge/feature/test/AssertJ.java | 68 --
.../forge/feature/test/GebWithTestcontainers.java | 8 +-
.../feature/test/GebWithWebDriverBinaries.java | 6 +-
.../org/grails/forge/feature/test/Hamcrest.java | 68 --
.../forge/feature/test/HamcrestValidator.java | 44 -
.../java/org/grails/forge/feature/test/Junit.java | 70 --
.../org/grails/forge/feature/test/Mockito.java | 2 +-
.../forge/feature/test/MockitoValidator.java | 2 +-
.../java/org/grails/forge/feature/test/Spock.java | 17 +-
.../org/grails/forge/feature/test/TestFeature.java | 71 --
.../feature/test/template/javaJunit.rocker.raw | 49 -
.../options/DefaultTestRockerModelProvider.java | 10 +-
.../forge/options/DevelopmentReloading.java} | 27 +-
.../org/grails/forge/options/FeatureFilter.java | 12 +-
.../java/org/grails/forge/options/JdkVersion.java | 5 +-
.../java/org/grails/forge/options/Language.java | 2 +-
.../java/org/grails/forge/options/Options.java | 48 +-
.../org/grails/forge/options/TestFramework.java | 46 +-
.../forge/options/TestRockerModelProvider.java | 9 +-
.../resources/assets/images/advancedgrails.svg | 6 +-
.../assets/images/apple-touch-icon-retina.png | Bin 7038 -> 0 bytes
.../resources/assets/images/apple-touch-icon.png | Bin 3077 -> 0 bytes
.../src/main/resources/assets/images/community.svg | 9 +
.../main/resources/assets/images/documentation.svg | 4 +-
.../src/main/resources/assets/images/favicon.ico | Bin 5558 -> 27198 bytes
.../assets/images/grails-cupsonly-logo-white.svg | 26 -
.../src/main/resources/assets/images/groovy.svg | 1 +
.../src/main/resources/assets/images/java.svg | 1 +
.../src/main/resources/assets/images/slack.svg | 18 -
.../main/resources/assets/images/spring-boot.svg | 20 +
.../src/main/resources/assets/images/spring.svg | 1 +
.../resources/assets/javascripts/application.js | 4 +-
.../main/resources/assets/javascripts/welcome.js | 116 ++
.../resources/assets/stylesheets/application.css | 4 +-
.../main/resources/assets/stylesheets/welcome.css | 63 ++
.../src/main/resources/gsp/index.gsp | 397 +++++--
.../src/main/resources/gsp/main.gsp | 113 +-
.../grails-forge-core/src/main/resources/pom.xml | 6 +
.../groovy/org/grails/forge/BuildBuilder.groovy | 14 +-
.../dependencies/GradleConfigurationSpec.groovy | 3 +-
.../GradleDependencyComparatorSpec.groovy | 3 +-
.../grails/forge/build/gradle/GradleSpec.groovy | 13 +-
.../feature/asciidoctor/AsciidoctorSpec.groovy | 5 +-
.../feature/assetPipeline/AssetPipelineSpec.groovy | 45 +-
.../feature/database/HibernateGormSpec.groovy | 5 +-
.../feature/database/TestContainersSpec.groovy | 22 +-
.../workflows/PlainGithubWorkflowSpec.groovy | 5 +-
.../forge/feature/grails/GrailsBaseSpec.groovy | 11 +-
.../feature/grails/GrailsDefaultPluginsSpec.groovy | 5 +-
.../feature/grails/GrailsGradlePluginSpec.groovy | 5 +-
.../grailsProfiles/GrailsProfilesSpec.groovy | 5 +-
.../feature/grailsWrapper/GrailsWrapperSpec.groovy | 3 +-
.../feature/lang/GrailsApplicationSpec.groovy | 7 +-
.../forge/feature/logging/LogbackSpec.groovy | 4 +-
.../migration/DatabaseMigrationPluginSpec.groovy | 5 +-
.../forge/feature/other/ShadePluginSpec.groovy | 3 +-
.../reloading/SpringBootDevToolsSpec.groovy | 38 +-
.../forge/feature/spring/SpringBootSpec.groovy | 19 +-
.../spring/SpringBootVirtualThreadsSpec.groovy | 7 +-
.../feature/spring/SpringResourcesSpec.groovy | 3 +-
.../feature/test/GebWithTestcontainersSpec.groovy | 5 +-
.../test/GebWithWebDriverBinariesSpec.groovy | 11 +-
.../org/grails/forge/feature/test/JUnitSpec.groovy | 39 -
.../grails/forge/feature/view/GrailsGspSpec.groovy | 9 +-
.../forge/feature/view/json/ViewJsonSpec.groovy | 7 +-
.../forge/feature/view/json/ViewMarkupSpec.groovy | 4 +-
.../grails/forge/feature/web/GrailsWebSpec.groovy | 5 +-
.../org/grails/forge/fixture/ContextFixture.groovy | 3 +-
.../grails/forge/options/TestFrameworkSpec.groovy | 13 +-
.../options/TestRockerModelProviderSpec.groovy | 12 +-
grails-forge/settings.gradle | 79 +-
.../org/grails/forge/utils/CommandSpec.groovy | 7 +-
grails-geb/README.md | 4 +-
grails-geb/build.gradle | 2 +-
.../src/main/templates/FunctionalSpec.groovy | 19 +-
.../plugin/geb/WebDriverContainerHolder.groovy | 4 +-
.../geb/serviceloader/ServiceRegistry.groovy | 2 +-
grails-gradle/buildSrc/settings.gradle | 64 +-
grails-gradle/common/build.gradle | 2 +-
grails-gradle/gradle/code-style-config.gradle | 61 -
grails-gradle/gradle/docs-config.gradle | 18 +-
grails-gradle/gradle/test-config.gradle | 9 +-
.../gradle/wrapper/gradle-wrapper.properties | 4 +-
grails-gradle/model/build.gradle | 2 +-
.../src/main/groovy/grails/util/Metadata.groovy | 4 +-
grails-gradle/plugins/build.gradle | 19 +-
.../gradle/plugin/core/GrailsExtension.groovy | 14 +
.../gradle/plugin/core/GrailsGradlePlugin.groovy | 223 +++-
.../gradle/plugin/web/GrailsWebGradlePlugin.groovy | 40 +-
.../gradle/plugin/core/GradleSpecification.groovy | 134 +++
.../core/GrailsGradlePluginJavaCompatSpec.groovy | 109 ++
.../core/GrailsGradlePluginToolchainSpec.groovy | 136 +++
.../fork-settings-custom/build.gradle | 18 +
.../fork-settings-custom/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../fork-settings-custom/settings.gradle | 1 +
.../fork-settings-defaults/build.gradle | 18 +
.../fork-settings-defaults/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../fork-settings-defaults/settings.gradle | 1 +
.../java-compat-no-toolchain/build.gradle | 21 +
.../java-compat-no-toolchain/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../java-compat-no-toolchain/settings.gradle | 1 +
.../java-compat-toolchain-23/build.gradle | 29 +
.../java-compat-toolchain-23/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../java-compat-toolchain-23/settings.gradle | 1 +
.../java-compat-toolchain-24/build.gradle | 29 +
.../java-compat-toolchain-24/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../java-compat-toolchain-24/settings.gradle | 1 +
.../java-compat-toolchain-current/build.gradle | 27 +
.../gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../java-compat-toolchain-current/settings.gradle | 1 +
.../no-toolchain-javaexec/build.gradle | 19 +
.../no-toolchain-javaexec/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../no-toolchain-javaexec/settings.gradle | 1 +
.../test-projects/no-toolchain-web/build.gradle | 9 +
.../no-toolchain-web/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../test-projects/no-toolchain-web/settings.gradle | 1 +
.../test-projects/toolchain-command/build.gradle | 25 +
.../toolchain-command/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../toolchain-command/settings.gradle | 1 +
.../test-projects/toolchain-javaexec/build.gradle | 26 +
.../toolchain-javaexec/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../toolchain-javaexec/settings.gradle | 1 +
.../test-projects/toolchain-override/build.gradle | 30 +
.../toolchain-override/gradle.properties | 1 +
.../grails-app/conf/application.yml | 0
.../toolchain-override/settings.gradle | 1 +
.../test-projects/toolchain-test/build.gradle | 21 +
.../test-projects/toolchain-test/gradle.properties | 1 +
.../toolchain-test/grails-app/conf/application.yml | 0
.../test-projects/toolchain-test/settings.gradle | 1 +
grails-gradle/settings.gradle | 70 +-
grails-gradle/tasks/build.gradle | 2 +-
grails-gsp/core/build.gradle | 2 +-
.../org/grails/gsp/compiler/GroovyPageParser.java | 13 +-
grails-gsp/grails-layout/build.gradle | 2 +-
grails-gsp/grails-sitemesh3/build.gradle | 2 +-
grails-gsp/grails-taglib/build.gradle | 2 +-
.../grails/core/gsp/DefaultGrailsTagLibClass.java | 17 +
.../core/gsp/DefaultGrailsTagLibClassSpec.groovy | 108 ++
grails-gsp/grails-web-gsp-taglib/build.gradle | 2 +-
grails-gsp/grails-web-gsp/build.gradle | 2 +-
grails-gsp/grails-web-jsp/build.gradle | 2 +-
grails-gsp/grails-web-taglib/build.gradle | 2 +-
grails-gsp/plugin/build.gradle | 8 +-
.../plugins/web/taglib/ApplicationTagLib.groovy | 3 +-
.../grails/plugins/web/taglib/FormTagLib.groovy | 2 +-
.../mapping/RestfulReverseUrlRenderingTests.groovy | 21 +
.../groovy/org/grails/web/pages/ParseSpec.groovy | 31 +
.../web/taglib/AbstractGrailsTagTests.groovy | 7 +
.../org/grails/web/taglib/FormTagLibTests.groovy | 28 +
grails-i18n/build.gradle | 2 +-
grails-interceptors/build.gradle | 2 +-
.../web/interceptors/UrlMappingMatcherSpec.groovy | 7 +-
grails-logging/build.gradle | 2 +-
grails-micronaut/build.gradle | 3 +-
.../micronaut/GrailsMicronautGrailsPlugin.groovy | 36 +-
grails-mimetypes/build.gradle | 2 +-
.../web/mime/HttpServletRequestExtension.groovy | 14 +-
.../web/mime/HttpServletResponseExtension.groovy | 2 +-
.../groovy/grails/web/mime/MimeUtilitySpec.groovy | 11 +
.../web/mime/MimeTypesConfigurationSpec.groovy | 11 +
.../grails/web/mime/AcceptHeaderParserSpec.groovy | 5 +
.../mvc/RequestAndResponseMimeTypesApiSpec.groovy | 7 +
grails-profiles/base/commands/add-property.groovy | 132 +++
grails-profiles/base/features/geb2/feature.yml | 2 +-
grails-profiles/base/profile.yml | 2 +
grails-profiles/base/skeleton/build.gradle | 15 +-
.../gradle/wrapper/gradle-wrapper.properties | 4 +-
.../gradle/wrapper/gradle-wrapper.properties | 4 +-
.../grails-app/assets/images/advancedgrails.svg | 6 +-
.../assets/images/apple-touch-icon-retina.png | Bin 7038 -> 0 bytes
.../grails-app/assets/images/apple-touch-icon.png | Bin 3077 -> 0 bytes
.../grails-app/assets/images/community.svg | 9 +
.../grails-app/assets/images/documentation.svg | 4 +-
.../skeleton/grails-app/assets/images/favicon.ico | Bin 5558 -> 27198 bytes
.../assets/images/grails-cupsonly-logo-white.svg | 26 -
.../skeleton/grails-app/assets/images/groovy.svg | 1 +
.../web/skeleton/grails-app/assets/images/java.svg | 1 +
.../skeleton/grails-app/assets/images/slack.svg | 18 -
.../grails-app/assets/images/spring-boot.svg | 20 +
.../skeleton/grails-app/assets/images/spring.svg | 1 +
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/javascripts/welcome.js | 115 ++
.../grails-app/assets/stylesheets/application.css | 4 +-
.../grails-app/assets/stylesheets/welcome.css | 63 ++
.../web/skeleton/grails-app/views/index.gsp | 397 +++++--
.../web/skeleton/grails-app/views/layouts/main.gsp | 113 +-
grails-rest-transforms/build.gradle | 2 +-
.../rest/render/DefaultRendererRegistrySpec.groovy | 11 +
.../web/rest/render/VndErrorRenderingSpec.groovy | 8 +
.../web/rest/render/hal/HalJsonRendererSpec.groovy | 10 +
.../web/rest/render/html/HtmlRendererSpec.groovy | 10 +
.../web/rest/render/json/JsonRendererSpec.groovy | 2 +
grails-scaffolding/build.gradle | 2 +-
grails-services/build.gradle | 2 +-
grails-shell-cli/build.gradle | 10 +-
.../cli/compiler/grape/AetherGrapeEngine.java | 2 +-
.../compiler/grape/AetherGrapeEngineFactory.java | 2 +-
.../grails/cli/profile/ProfileRepoConfig.groovy | 14 +-
.../cli/profile/commands/CreateAppCommand.groovy | 204 +++-
.../profile/commands/CreateAppCommandSpec.groovy | 4 +-
grails-spring/build.gradle | 2 +-
.../grails/spring/GrailsApplicationContext.java | 13 +
grails-test-core/build.gradle | 2 +-
grails-test-examples/app1/build.gradle | 3 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../functionaltests/BookController.groovy | 11 +-
.../controllers/functionaltests/UrlMappings.groovy | 62 ++
.../async/AsyncTestController.groovy | 304 +++++
.../binding/AdvancedDataBindingController.groovy | 306 +++++
.../caching/CacheTestController.groovy | 131 +++
.../codecs/CodecTestController.groovy | 281 +++++
.../commanddi/CommandDIController.groovy | 406 +++++++
.../contentneg/ContentNegotiationController.groovy | 168 +++
.../functionaltests/cors/CorsTestController.groovy | 113 ++
.../ErrorHandlingTestController.groovy | 215 ++++
.../fileupload/FileUploadTestController.groovy | 241 ++++
.../functionaltests/flow/FlowController.groovy | 245 ++++
.../flow/FlowTargetController.groovy | 43 +-
.../functionaltests/i18n/I18nTestController.groovy | 226 ++++
.../interceptors/ActionExcludeInterceptor.groovy | 35 +-
.../interceptors/AdvancedMatchingController.groovy | 107 ++
.../AttributeSettingInterceptor.groovy | 28 +-
.../interceptors/BlockingInterceptor.groovy | 42 +-
.../ConditionalMatchInterceptor.groovy | 52 +
.../interceptors/FirstInterceptor.groovy | 38 +-
.../HttpMethodMatchingInterceptor.groovy} | 24 +-
.../interceptors/InterceptorTestController.groovy | 172 +++
.../interceptors/MultipleRulesInterceptor.groovy | 35 +-
.../NamespaceMatchingInterceptor.groovy} | 24 +-
.../interceptors/SecondInterceptor.groovy | 38 +-
.../interceptors/SessionInterceptor.groovy | 36 +-
.../interceptors/ThirdInterceptor.groovy | 38 +-
.../interceptors/TimingInterceptor.groovy | 37 +-
.../RequestResponseTestController.groovy | 270 +++++
.../springevents/SpringEventController.groovy | 148 +++
.../taglib/TagLibTestController.groovy | 326 ++++++
.../urlmappings/UrlMappingsTestController.groovy | 167 +++
.../domain/functionaltests/binding/Address.groovy} | 25 +-
.../functionaltests/binding/Contributor.groovy} | 21 +-
.../domain/functionaltests/binding/Employee.groovy | 43 +-
.../domain/functionaltests/binding/Project.groovy} | 24 +-
.../domain/functionaltests/binding/Team.groovy} | 22 +-
.../functionaltests/binding/TeamMember.groovy} | 24 +-
.../functionaltests/constraints/Appointment.groovy | 109 ++
.../functionaltests/constraints/PaymentInfo.groovy | 178 +++
.../functionaltests/constraints/Product.groovy | 76 ++
.../constraints/Registration.groovy | 158 +++
.../functionaltests/events/AuditedEntity.groovy | 108 ++
.../functionaltests/events/StatefulEntity.groovy | 81 ++
.../functionaltests/events/VetoableEntity.groovy | 67 ++
.../domain/functionaltests/gorm/Author.groovy} | 40 +-
.../domain/functionaltests/gorm/GormBook.groovy | 70 ++
.../functionaltests/services/InventoryItem.groovy} | 25 +-
.../app1/grails-app/i18n/messages.properties | 9 +
.../app1/grails-app/i18n/messages_de.properties | 9 +
.../app1/grails-app/i18n/messages_fr.properties | 9 +
.../caching/CacheTestService.groovy | 133 +++
.../commanddi/NotificationService.groovy | 88 ++
.../commanddi/PricingService.groovy | 77 ++
.../commanddi/ValidationHelperService.groovy | 80 ++
.../services/AsyncProcessingService.groovy | 122 ++
.../services/InventoryService.groovy | 204 ++++
.../functionaltests/services/OrderService.groovy | 118 ++
.../springevents/EventListenerService.groovy | 169 +++
.../springevents/EventPublisherService.groovy | 78 ++
.../functionaltests/taglib/CustomTagLib.groovy | 341 ++++++
.../grails-app/views/contentNegotiation/error.gsp | 29 +
.../grails-app/views/contentNegotiation/index.gsp | 34 +
.../views/tagLibTest/_simpleTemplate.gsp | 19 +
.../grails-app/views/tagLibTest/testAlertTag.gsp | 20 +
.../grails-app/views/tagLibTest/testAppInfoTag.gsp | 20 +
.../grails-app/views/tagLibTest/testBadgeTag.gsp | 20 +
.../views/tagLibTest/testBuiltInCheckBox.gsp | 20 +
.../views/tagLibTest/testBuiltInCollect.gsp | 20 +
.../views/tagLibTest/testBuiltInCookie.gsp | 20 +
.../views/tagLibTest/testBuiltInCreateLink.gsp | 21 +
.../views/tagLibTest/testBuiltInEach.gsp | 21 +
.../views/tagLibTest/testBuiltInFieldValue.gsp | 20 +
.../views/tagLibTest/testBuiltInFindAll.gsp | 20 +
.../views/tagLibTest/testBuiltInForm.gsp | 23 +
.../views/tagLibTest/testBuiltInFormatDate.gsp | 21 +
.../views/tagLibTest/testBuiltInFormatNumber.gsp | 21 +
.../views/tagLibTest/testBuiltInHeader.gsp | 20 +
.../views/tagLibTest/testBuiltInHiddenField.gsp | 20 +
.../grails-app/views/tagLibTest/testBuiltInIf.gsp | 24 +
.../views/tagLibTest/testBuiltInInclude.gsp | 20 +
.../views/tagLibTest/testBuiltInJoin.gsp | 20 +
.../views/tagLibTest/testBuiltInLink.gsp | 22 +
.../views/tagLibTest/testBuiltInMessage.gsp | 20 +
.../views/tagLibTest/testBuiltInPaginate.gsp | 20 +
.../views/tagLibTest/testBuiltInPasswordField.gsp | 20 +
.../views/tagLibTest/testBuiltInRadio.gsp | 22 +
.../views/tagLibTest/testBuiltInRender.gsp | 20 +
.../views/tagLibTest/testBuiltInResource.gsp | 20 +
.../views/tagLibTest/testBuiltInSelect.gsp | 20 +
.../grails-app/views/tagLibTest/testBuiltInSet.gsp | 23 +
.../views/tagLibTest/testBuiltInSortableColumn.gsp | 26 +
.../views/tagLibTest/testBuiltInTextArea.gsp | 20 +
.../views/tagLibTest/testBuiltInTextField.gsp | 20 +
.../views/tagLibTest/testBuiltInUploadForm.gsp | 23 +
.../views/tagLibTest/testBuiltInWhile.gsp | 21 +
.../views/tagLibTest/testConditionalTags.gsp | 21 +
.../views/tagLibTest/testCssClassTag.gsp | 20 +
.../views/tagLibTest/testDefinitionListTag.gsp | 20 +
.../views/tagLibTest/testEncodingTags.gsp | 22 +
.../views/tagLibTest/testFormattedTag.gsp | 20 +
.../grails-app/views/tagLibTest/testHelloTag.gsp | 20 +
.../grails-app/views/tagLibTest/testIterateTag.gsp | 20 +
.../grails-app/views/tagLibTest/testJoinTag.gsp | 20 +
.../grails-app/views/tagLibTest/testListTag.gsp | 20 +
.../grails-app/views/tagLibTest/testNestedTags.gsp | 22 +
.../grails-app/views/tagLibTest/testPanelTag.gsp | 20 +
.../views/tagLibTest/testProgressTag.gsp | 20 +
.../grails-app/views/tagLibTest/testRawTag.gsp | 20 +
.../grails-app/views/tagLibTest/testRepeatTag.gsp | 20 +
.../views/tagLibTest/testRequestInfoTag.gsp | 20 +
.../views/tagLibTest/testSessionValueTag.gsp | 20 +
.../grails-app/views/tagLibTest/testSetVarTag.gsp | 20 +
.../views/tagLibTest/testTagsWithModel.gsp | 26 +
.../grails-app/views/tagLibTest/testWrapperTag.gsp | 20 +
.../groovy/functionaltests/AtResourceSpec.groovy | 27 +-
.../functionaltests/BookFunctionalSpec.groovy | 47 +-
.../BookRestfulControllerSpec.groovy | 36 +-
.../groovy/functionaltests/HomeSpec.groovy | 37 +-
.../groovy/functionaltests/LoadAfterSpec.groovy | 10 +-
.../functionaltests/MiscFunctionalSpec.groovy | 28 +-
.../functionaltests/async/AsyncPromiseSpec.groovy | 337 ++++++
.../binding/AdvancedDataBindingSpec.groovy | 445 ++++++++
.../functionaltests/caching/CachingSpec.groovy | 357 ++++++
.../codecs/SecurityCodecsSpec.groovy | 374 +++++++
.../commanddi/CommandObjectDISpec.groovy | 325 ++++++
.../constraints/ConstraintValidationSpec.groovy | 996 +++++++++++++++++
.../contentneg/ContentNegotiationSpec.groovy | 310 ++++++
.../functionaltests/cors/CorsAdvancedSpec.groovy | 253 +++++
.../errorhandling/ErrorHandlingSpec.groovy | 166 +++
.../functionaltests/events/DomainEventsSpec.groovy | 574 ++++++++++
.../fileupload/FileUploadSpec.groovy | 321 ++++++
.../flow/FlashChainForwardSpec.groovy | 305 +++++
.../functionaltests/gorm/GormAdvancedSpec.groovy | 719 ++++++++++++
.../i18n/InternationalizationSpec.groovy | 375 +++++++
.../InterceptorAdvancedMatchingSpec.groovy | 241 ++++
.../interceptors/InterceptorOrderingSpec.groovy | 264 +++++
.../layout/LayoutFunctionalSpec.groovy | 27 +-
.../layout/LayoutWithTemplateSpec.groovy | 13 +-
.../functionaltests/pages/BarListPage.groovy} | 16 +-
.../groovy/functionaltests/pages/BookPages.groovy | 62 ++
.../pages/ConventionLayoutPage.groovy} | 17 +-
.../functionaltests/pages/FooLayoutPage.groovy} | 17 +-
.../pages/FooLayoutSnippetPage.groovy} | 17 +-
.../functionaltests/pages/FooListPage.groovy} | 16 +-
.../groovy/functionaltests/pages/HomePage.groovy} | 20 +-
.../functionaltests/pages/LoginAuthPage.groovy} | 17 +-
.../groovy/functionaltests/pages/MiscPages.groovy} | 27 +-
.../functionaltests/pages/PartialPage.groovy} | 17 +-
.../requestresponse/RequestResponseSpec.groovy | 325 ++++++
.../scaffolding/BarFunctionalSpec.groovy | 14 +-
.../scaffolding/FooFunctionalSpec.groovy | 14 +-
.../services/ServiceIntegrationSpec.groovy | 379 +++++++
.../springevents/SpringEventsSpec.groovy | 293 +++++
.../functionaltests/taglib/TagLibSpec.groovy | 720 ++++++++++++
.../urlmappings/UrlMappingsSpec.groovy | 265 +++++
.../springevents/CustomApplicationEvent.groovy | 34 +-
.../springevents/PriorityEvent.groovy | 25 +-
.../springevents/UserActionEvent.groovy | 34 +-
.../functionaltests/BookControllerSpec.groovy | 10 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../groovy/app2/NotFoundHandlerSpec.groovy | 22 +-
.../groovy/app2/pages/FooPages.groovy} | 23 +-
.../groovy/app3/LoadAfterSpec.groovy | 9 +-
.../groovy/app3/pages/LoginAuthPage.groovy} | 16 +-
.../async-events-pubsub-demo/build.gradle | 4 +-
.../services/pubsub/demo/TotalService.groovy | 12 +-
.../groovy/pubsub/demo/AsyncEventsSpec.groovy | 203 ++++
.../groovy/pubsub/demo/PubSubSpec.groovy | 37 +-
.../groovy/pubsub/demo/TaskControllerSpec.groovy | 34 +-
.../main/groovy/pubsub/demo/BookSubscriber.groovy | 16 +-
grails-test-examples/cache/build.gradle | 6 +-
.../com/demo/AdvancedCachingController.groovy | 123 ++
.../controllers/com/demo/UrlMappings.groovy | 54 +
.../com/demo/AdvancedCachingService.groovy | 158 +++
.../com/demo/AdvancedCachingIntegrationSpec.groovy | 204 ++++
.../com/demo/AdvancedCachingServiceSpec.groovy | 316 ++++++
.../{gorm => database-cleanup}/build.gradle | 28 +-
.../grails-app/conf/application.yml | 44 +-
.../database-cleanup/grails-app/conf/logback.xml | 26 +-
.../controllers/dbcleanup}/UrlMappings.groovy | 2 +-
.../grails-app/domain/dbcleanup/Author.groovy | 16 +-
.../grails-app/domain/dbcleanup}/Book.groovy | 13 +-
.../grails-app/init/dbcleanup/Application.groovy} | 17 +-
.../database-cleanup/grails-app/views/error.gsp | 27 +
.../groovy/dbcleanup/ClassLevelCleanupSpec.groovy | 74 ++
.../groovy/dbcleanup/MethodLevelCleanupSpec.groovy | 87 ++
.../datasources/OsivBookController.groovy} | 24 +-
.../controllers/datasources/UrlMappings.groovy | 13 +-
.../datasources/grails-app/domain/ds2/Book.groovy | 2 +
.../domain/ds2/{Book.groovy => Chapter.groovy} | 4 +-
.../datasources/grails-app/views/osivBook/show.gsp | 29 +
.../CrossDatasourceTransactionSpec.groovy | 284 +++++
.../functionaltests/DatasourceSwitchingSpec.groovy | 456 ++++++++
.../functionaltests/MultipleDataSourcesSpec.groovy | 13 +-
.../functionaltests/OsivGspRenderingSpec.groovy} | 18 +-
.../functionaltests/pages/OsivBookPage.groovy} | 13 +-
grails-test-examples/demo33/build.gradle | 2 +
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../groovy/demo/JsonControllerSpec.groovy | 26 +-
.../groovy/exploded/LoadAfterSpec.groovy | 9 +-
.../groovy/exploded/pages/LoginAuthPage.groovy} | 15 +-
.../test/app/ConfigurationPrioritySpec.groovy | 249 +++++
.../test/app/EnvironmentConfigurationSpec.groovy | 223 ++++
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
grails-test-examples/geb/grails-cli.yml | 2 +-
grails-test-examples/gorm/build.gradle | 5 +-
.../controllers/gorm/AuthorController.groovy | 10 +-
.../gorm/BookController.groovy} | 17 +-
.../controllers/gorm}/UrlMappings.groovy | 2 +-
.../grails-app/domain/gorm/AuditedEntity.groovy | 148 +++
.../grails-app/domain/gorm/Author.groovy} | 29 +-
.../gorm/grails-app/domain/gorm/Book.groovy | 33 +-
.../grails-app/i18n/messages.properties | 1 +
.../gorm/AuthorDataService.groovy} | 20 +-
.../services/gorm/BookDataService.groovy | 151 +++
.../services/gorm/CompileStaticBookService.groovy | 89 ++
.../services/gorm/TransactionTestService.groovy | 187 ++++
.../gorm/WhereQueryVariableScopeService.groovy | 86 ++
.../gorm/grails-app/views/error.gsp | 48 +
.../gorm/grails-app/views/index.gsp | 32 +
.../gorm/grails-app/views/notFound.gsp | 28 +
.../groovy/gorm/BindingOutsideRequestSpec.groovy | 5 +
...OutsideRequestSpec.groovy => ExistsSpec.groovy} | 53 +-
.../groovy/gorm/FieldsValidationSpec.groovy | 552 +++++++++
.../groovy/gorm/GormCascadeOperationsSpec.groovy | 357 ++++++
.../groovy/gorm/GormCriteriaQueriesSpec.groovy | 614 ++++++++++
.../groovy/gorm/GormDataServicesSpec.groovy | 421 +++++++
.../groovy/gorm/GormEventsSpec.groovy | 377 +++++++
.../groovy/gorm/GormWhereQueryAdvancedSpec.groovy | 420 +++++++
.../groovy/gorm/ScaffoldingFunctionalSpec.groovy | 293 +++++
.../groovy/gorm/TransactionPropagationSpec.groovy | 268 +++++
...TransactionalWhereQueryVariableScopeSpec.groovy | 109 ++
.../integration-test/groovy/gorm/UserSpec.groovy | 33 +-
.../groovy/gorm/ValidationConstraintsSpec.groovy | 496 +++++++++
.../groovy/gorm/pages/AuthorPages.groovy | 75 ++
.../groovy/gorm/pages/BookPages.groovy | 79 ++
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../example/grails/layout/TagLibController.groovy | 95 ++
.../grails-app/views/tagLib/_partial.gsp | 21 +
.../grails-app/views/tagLib/collectTag.gsp | 29 +
.../grails-app/views/tagLib/createLinkTag.gsp | 30 +
.../gsp-layout/grails-app/views/tagLib/eachTag.gsp | 33 +
.../gsp-layout/grails-app/views/tagLib/elseTag.gsp | 33 +
.../grails-app/views/tagLib/encodeTags.gsp | 30 +
.../gsp-layout/grails-app/views/tagLib/formTag.gsp | 50 +
.../grails-app/views/tagLib/formatTags.gsp | 30 +
.../gsp-layout/grails-app/views/tagLib/ifTag.gsp | 31 +
.../gsp-layout/grails-app/views/tagLib/index.gsp | 32 +
.../gsp-layout/grails-app/views/tagLib/joinTag.gsp | 30 +
.../gsp-layout/grails-app/views/tagLib/linkTag.gsp | 30 +
.../grails-app/views/tagLib/renderTag.gsp | 31 +
.../gsp-layout/grails-app/views/tagLib/setTag.gsp | 35 +
.../gsp-layout/grails-forge-cli.yml | 2 +-
.../integration-test/groovy/GspTagLibSpec.groovy | 275 +++++
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../gsp-sitemesh3/grails-forge-cli.yml | 2 +-
.../gsp-spring-boot/script/.sdkmanrc | 4 +-
.../build.gradle | 25 +-
.../grails-app/conf/application.yml | 58 +
.../grails-app/conf/logback.xml | 26 +-
.../grails-app/domain/example/Product.groovy} | 21 +-
.../grails-app/init/example/Application.groovy} | 19 +-
.../example/InheritedProductService.groovy} | 24 +-
.../services/example/ProductService.groovy | 58 +
.../DataServiceDatasourceInheritanceSpec.groovy | 112 ++
.../DataServiceMultiDataSourceSpec.groovy | 180 +++
.../grails-app/assets/javascripts/application.js | 2 +-
.../controllers/example/BookController.groovy | 8 +-
.../groovy/example/DatabasePerTenantSpec.groovy | 6 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../functional/tests/BookController.groovy | 8 +-
.../functional/tests/BookControllerSpec.groovy | 24 +-
.../functional/tests/pages/BookPages.groovy} | 40 +-
.../functional/tests/BookControllerUnitSpec.groovy | 10 +-
.../grails-multiple-datasources/build.gradle | 4 +
.../datasources/SecondaryBookController.groovy | 78 ++
.../controllers/datasources}/UrlMappings.groovy | 11 +-
.../MultiDataSourceWithSessionSpec.groovy | 74 ++
.../build.gradle | 25 +-
.../grails-app/conf/application.yml | 62 ++
.../grails-app/conf/logback.xml | 26 +-
.../grails-app/domain/example/Metric.groovy} | 25 +-
.../grails-app/init/example/Application.groovy} | 16 +-
.../services/example/MetricService.groovy | 65 ++
.../MultiTenantMultiDataSourceSpec.groovy | 183 +++
.../grails-app/assets/javascripts/application.js | 2 +-
.../controllers/example/BookController.groovy | 8 +-
.../example/PartitionedMultiTenancySpec.groovy | 6 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../schemapertenant/BookController.groovy | 8 +-
.../schemapertenant/SchemaPerTenantSpec.groovy | 5 +-
.../hibernate5/issue450/build.gradle | 3 +-
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../groovy/example/BookControllerSpec.groovy | 27 +-
.../grails-app/assets/javascripts/application.js | 2 +-
grails-test-examples/issue-11102/build.gradle | 6 +-
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../groovy/issue11102/HttpClientCommonSpec.groovy | 45 -
.../groovy/issue11102/TestControllerSpec.groovy | 27 +-
grails-test-examples/issue-11767/build.gradle | 7 +-
.../groovy/issue11767/app/ConfigLoadingSpec.groovy | 37 +-
grails-test-examples/issue-15228/build.gradle | 3 +-
.../issue11767/app/GsonViewRespondSpec.groovy | 58 +-
grails-test-examples/issue-views-182/build.gradle | 3 +-
.../groovy/views182/CustomErrorSpec.groovy | 27 +-
.../groovy/views182/HttpClientCommonSpec.groovy | 46 -
.../build.gradle | 18 +-
.../grails-app/conf/application.yml | 35 +-
.../micronautgroovyonly}/UrlMappings.groovy | 3 +-
.../init/micronautgroovyonly/Application.groovy | 20 +-
.../BeanInjectionService.groovy | 44 +-
.../micronautgroovyonly/TestService.groovy | 11 +-
.../BeanInjectionServiceSpec.groovy} | 41 +-
.../MicronautContextSpec.groovy | 83 ++
.../MicronautQualifierSpec.groovy | 97 ++
.../main/groovy/bean/injection/AppConfig.groovy} | 17 +-
.../bean/injection/FactoryCreatedService.groovy | 10 +-
.../main/groovy/bean/injection/NamedService.groovy | 7 +-
.../bean/injection/PrimaryNamedService.groovy} | 16 +-
.../main/groovy/bean/injection/Qualified.groovy} | 19 +-
.../bean/injection/QualifiedNamedService.groovy} | 16 +-
.../bean/injection/RegularNamedService.groovy} | 17 +-
.../groovy/bean/injection/ServiceFactory.groovy | 24 +-
.../bean/injection/SpecialNamedService.groovy} | 17 +-
grails-test-examples/micronaut/build.gradle | 15 +-
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 2 +-
.../micronaut/grails-app/conf/application.yml | 7 +
.../micronaut/ExternalApiController.groovy | 113 ++
.../micronaut/MicronautTestController.groovy} | 41 +-
.../controllers/micronaut/UrlMappings.groovy | 15 +
.../services/micronaut/ExternalApiService.groovy | 110 ++
.../micronaut/MicronautBeanDuplicationSpec.groovy | 105 ++
.../groovy/micronaut/MicronautBeanTypesSpec.groovy | 99 ++
.../groovy/micronaut/MicronautContextSpec.groovy | 92 ++
.../MicronautDeclarativeClientSpec.groovy | 246 ++++
.../micronaut/MicronautErsatzAdvancedSpec.groovy | 557 ++++++++++
.../micronaut/MicronautErsatzPatternSpec.groovy | 444 ++++++++
.../micronaut/MicronautErsatzRoundtripSpec.groovy | 426 +++++++
.../micronaut/MicronautPluginBeanSpec.groovy | 85 ++
.../groovy/micronaut/MicronautQualifierSpec.groovy | 106 ++
.../main/groovy/bean/injection/AppConfig.groovy} | 17 +-
.../bean/injection/FactoryCreatedService.groovy | 10 +-
.../groovy/bean/injection/ServiceFactory.groovy | 24 +-
.../client/MicronautAdvancedClient.groovy | 59 +
.../client/MicronautFilteredClient.groovy} | 23 +-
.../micronaut/client/MicronautHeaderClient.groovy | 21 +-
.../micronaut/client/MicronautPathClient.groovy} | 26 +-
.../client/MicronautReactiveClient.groovy | 41 +-
.../micronaut/client/MicronautTestClient.groovy | 43 +-
.../java/bean/injection/JavaMessageProvider.java | 30 +-
.../java/bean/injection/JavaSingletonService.java | 33 +-
.../client/MicronautRetryableClient.java} | 21 +-
.../micronaut/filter/AuthTokenClientFilter.java} | 20 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../functional/tests/BookController.groovy | 8 +-
.../functional/tests/BookControllerSpec.groovy | 28 +-
.../functional/tests/pages/BookPages.groovy} | 40 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../examples/mongo/tenant/BookController.groovy | 8 +-
.../groovy/examples/mongo/tenant/BookSpec.groovy | 7 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../functional/tests/AuthorController.groovy | 8 +-
.../functional/tests/BookController.groovy | 8 +-
.../functional/tests/AuthorControllerSpec.groovy | 28 +-
.../functional/tests/BookControllerSpec.groovy | 28 +-
.../functional/tests/pages/AuthorPages.groovy} | 39 +-
.../functional/tests/pages/BookPages.groovy} | 40 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../groovy/context/ContextPathSpec.groovy | 23 +-
.../groovy/context/pages/EnvironmentPages.groovy} | 23 +-
.../groovy/namespaces/PageControllerSpec.groovy | 19 +-
.../namespaces/admin/ReportControllerSpec.groovy | 18 +-
.../namespaces/admin/pages/ReportPages.groovy} | 24 +-
.../groovy/namespaces/pages/AdminPage.groovy} | 16 +-
.../groovy/namespaces/pages/FrontendPage.groovy} | 16 +-
grails-test-examples/plugins/exploded/build.gradle | 3 +
.../groovy/exploded/PluginDependencySpec.groovy | 223 ++++
.../plugins/issue-11767/build.gradle | 6 +-
.../plugins/loadfirst/build.gradle | 3 +
.../groovy/loadfirst/PluginLifecycleSpec.groovy | 236 ++++
.../plugins/loadsecond/build.gradle | 3 +
.../groovy/loadsecond/PluginLoadOrderSpec.groovy | 222 ++++
.../build.gradle | 18 +-
.../MicronautSingletonGrailsPlugin.groovy} | 18 +-
.../plugins/micronaut/PluginMessageProvider.java | 31 +-
.../plugins/micronaut/PluginSingletonService.java | 33 +-
.../{micronaut => scaffolding-fields}/build.gradle | 26 +-
.../grails-app/conf/application.yml | 62 +-
.../scaffoldingfields/DepartmentController.groovy | 20 +-
.../scaffoldingfields/EmployeeController.groovy | 15 +-
.../scaffoldingfields/ProjectController.groovy | 15 +-
.../scaffoldingfields}/UrlMappings.groovy | 2 +-
.../domain/scaffoldingfields/Address.groovy} | 23 +-
.../domain/scaffoldingfields/Department.groovy} | 19 +-
.../domain/scaffoldingfields/Employee.groovy | 129 +++
.../domain/scaffoldingfields/Project.groovy} | 30 +-
.../grails-app/i18n/messages.properties | 1 +
.../init/scaffoldingfields/Application.groovy} | 18 +-
.../init/scaffoldingfields/BootStrap.groovy | 114 ++
.../grails-app/views/_fields/default/_wrapper.gsp | 38 +
.../views/_fields/employee/biography/_wrapper.gsp | 38 +
.../views/_fields/employee/email/_wrapper.gsp | 39 +
.../scaffoldingfields/CrudFunctionalSpec.groovy | 215 ++++
.../scaffoldingfields/CustomTemplatesSpec.groovy | 171 +++
.../groovy/scaffoldingfields/FieldTypesSpec.groovy | 248 +++++
.../groovy/scaffoldingfields/PaginationSpec.groovy | 502 +++++++++
.../RelationshipsFunctionalSpec.groovy | 534 +++++++++
.../ValidationFunctionalSpec.groovy | 861 ++++++++++++++
.../scaffoldingfields/pages/DepartmentPages.groovy | 101 ++
.../scaffoldingfields/pages/EmployeePages.groovy | 149 +++
.../scaffoldingfields/pages/ProjectPages.groovy | 105 ++
.../pages/ScaffoldCreatePage.groovy | 147 +++
.../pages/ScaffoldEditPage.groovy | 159 +++
.../pages/ScaffoldListPage.groovy | 112 ++
.../pages/ScaffoldShowPage.groovy | 106 ++
.../grails-app/assets/javascripts/application.js | 4 +-
.../grails-app/assets/stylesheets/application.css | 4 +-
.../grails-app/domain/com/example/User.groovy | 9 +-
.../com/example/UserCommunityControllerSpec.groovy | 29 +-
.../groovy/com/example/UserControllerSpec.groovy | 27 +-
...outPage.groovy => CommunityUserListPage.groovy} | 12 +-
.../groovy/com/example/pages/LoginPage.groovy | 17 +-
.../groovy/com/example/pages/LogoutPage.groovy | 15 +-
.../{LogoutPage.groovy => UserListPage.groovy} | 12 +-
.../views-functional-tests/build.gradle | 5 +-
.../grails-app/assets/javascripts/application.js | 2 +-
.../groovy/functional/tests/BookSpec.groovy | 181 +--
.../groovy/functional/tests/BulletinSpec.groovy | 26 +-
.../groovy/functional/tests/CircularSpec.groovy | 74 +-
.../groovy/functional/tests/CustomerSpec.groovy | 41 +-
.../groovy/functional/tests/EmbeddedSpec.groovy | 58 +-
.../groovy/functional/tests/HttpClientSpec.groovy | 44 -
.../groovy/functional/tests/InheritanceSpec.groovy | 38 +-
.../tests/ModelInterceptorIntSpec.groovy | 37 +-
.../functional/tests/ObjectTemplateSpec.groovy | 27 +-
.../functional/tests/PersonInheritanceSpec.groovy | 32 +-
.../groovy/functional/tests/ProductSpec.groovy | 218 ++--
.../groovy/functional/tests/ProjectSpec.groovy | 38 +-
.../groovy/functional/tests/ProxySpec.groovy | 31 +-
.../groovy/functional/tests/TeamSpec.groovy | 91 +-
.../functional/tests/TestControllerSpec.groovy | 28 +-
.../functional/tests/TestGmlControllerSpec.groovy | 32 +-
.../functional/tests/TestGsonControllerSpec.groovy | 86 +-
.../groovy/functional/tests/VehicleSpec.groovy | 61 +-
.../functional/tests/api/NamespacedBookSpec.groovy | 143 +--
grails-test-suite-base/build.gradle | 5 +-
grails-test-suite-uber/build.gradle | 85 +-
...GrailsCompileStaticCompilationErrorsSpec.groovy | 9 +
.../GrailsTypeCheckedCompilationErrorsSpec.groovy | 9 +
.../grails/persistence/EntityTransformTests.groovy | 9 +
.../groovy/grails/spring/BeanBuilderTests.groovy | 9 +
.../test/mixin/ControllerUnitTestMixinTests.groovy | 26 +
.../grails/test/mixin/RestfulControllerSpec.groovy | 11 +
.../rest/render/BaseDomainClassRendererSpec.groovy | 8 +
.../web/codecs/HTMLJSCodecIntegrationSpec.groovy | 5 +
.../DefaultGrailsApplicationAttributesTests.groovy | 6 +
.../web/servlet/FlashScopeWithErrorsTests.groovy | 5 +
.../grails/web/util/StreamCharBufferSpec.groovy | 5 +
.../org/grails/web/util/WebUtilsTests.groovy | 5 +
grails-test-suite-web/build.gradle | 2 +-
.../grails/rest/web/RespondMethodSpec.groovy | 20 +
.../org/grails/compiler/web/WithFormatSpec.groovy | 11 +
.../rest/render/xml/DefaultXmlRendererSpec.groovy | 5 +
...ngHelperDomainClassSpecialPropertiesSpec.groovy | 9 +
.../web/binding/JSONBindingToNullSpec.groovy | 23 +-
.../JsonBindingWithExceptionHandlerSpec.groovy | 24 +
.../commandobjects/CommandObjectNoDataSpec.groovy | 27 +
.../CommandObjectNullabilitySpec.groovy | 26 +
.../web/commandobjects/CommandObjectsSpec.groovy | 29 +
.../web/controllers/ContentNegotiationSpec.groovy | 16 +
.../metaclass/CollectionBindDataMethodSpec.groovy | 11 +
.../web/mime/ContentFormatControllerTests.groovy | 10 +
.../web/mime/WithFormatContentTypeSpec.groovy | 16 +
grails-testing-support-core/build.gradle | 2 +-
.../groovy/grails/testing/spock/OnceBefore.groovy | 2 -
grails-testing-support-datamapping/build.gradle | 2 +-
grails-testing-support-dbcleanup-core/README.md | 137 +++
.../build.gradle | 20 +-
.../cleanup/core/ApplicationContextResolver.groovy | 50 +
.../testing/cleanup/core/DatabaseCleaner.groovy | 91 ++
.../testing/cleanup/core/DatabaseCleanup.groovy | 127 +++
.../cleanup/core/DatabaseCleanupContext.groovy | 220 ++++
.../cleanup/core/DatabaseCleanupExtension.groovy | 235 ++++
.../cleanup/core/DatabaseCleanupInterceptor.groovy | 210 ++++
.../cleanup/core/DatabaseCleanupStats.groovy | 200 ++++
.../cleanup/core/DatasourceCleanupMapping.groovy | 156 +++
.../core/DefaultApplicationContextResolver.groovy | 67 ++
.../cleanup/core/TestContextHolderListener.groovy | 59 +
...ockframework.runtime.extension.IGlobalExtension | 1 +
.../src/main/resources/META-INF/spring.factories | 1 +
.../cleanup/core/DatabaseCleanupContextSpec.groovy | 478 ++++++++
.../core/DatabaseCleanupExtensionSpec.groovy | 446 ++++++++
.../core/DatabaseCleanupInterceptorSpec.groovy | 678 ++++++++++++
.../cleanup/core/DatabaseCleanupStatsSpec.groovy | 297 +++++
.../core/DatasourceCleanupMappingSpec.groovy | 175 +++
.../DefaultApplicationContextResolverSpec.groovy | 96 ++
grails-testing-support-dbcleanup-h2/README.md | 28 +
.../build.gradle | 30 +-
.../testing/cleanup/h2/H2DatabaseCleaner.groovy | 103 ++
.../cleanup/h2/H2DatabaseCleanupHelper.groovy | 121 ++
...che.grails.testing.cleanup.core.DatabaseCleaner | 1 +
.../cleanup/h2/H2DatabaseCleanerSpec.groovy | 229 ++++
.../cleanup/h2/H2DatabaseCleanupHelperSpec.groovy | 137 +++
.../README.md | 32 +
.../build.gradle | 38 +-
.../postgresql/PostgresDatabaseCleaner.groovy | 132 +++
.../PostgresDatabaseCleanupHelper.groovy | 100 ++
.../postgresql/PostgresContainerHolder.groovy | 66 ++
.../PostgresDatabaseCleanerFunctionalSpec.groovy | 318 ++++++
.../postgresql/PostgresDatabaseCleanerSpec.groovy | 114 ++
.../PostgresDatabaseCleanupHelperSpec.groovy | 83 ++
grails-testing-support-http-client/README.md | 201 ++++
.../build.gradle | 32 +-
.../testing/http/client/HttpClientSupport.groovy | 1169 ++++++++++++++++++++
.../testing/http/client/MultipartBody.groovy | 191 ++++
.../testing/http/client/TestHttpResponse.groovy | 994 +++++++++++++++++
.../testing/http/client/utils/JsonUtils.groovy | 276 +++++
.../testing/http/client/utils/XmlUtils.groovy | 241 ++++
.../http/client/HttpClientSupportSpec.groovy | 1165 +++++++++++++++++++
.../testing/http/client/MultipartBodySpec.groovy | 67 ++
.../http/client/TestHttpResponseSpec.groovy | 542 +++++++++
.../testing/http/client/utils/JsonUtilsSpec.groovy | 159 +++
.../testing/http/client/utils/XmlUtilsSpec.groovy | 329 ++++++
grails-testing-support-mongodb/build.gradle | 2 +-
grails-testing-support-views-gson/build.gradle | 2 +-
grails-testing-support-web/build.gradle | 2 +-
.../grails/testing/web/UrlMappingsUnitTest.groovy | 10 +
grails-url-mappings/build.gradle | 2 +-
grails-validation/build.gradle | 2 +-
.../grails/validation/ConstrainedDelegate.groovy | 7 +
.../groovy/grails/validation/Validateable.groovy | 13 +
.../CommandObjectConstraintGettersSpec.groovy | 40 +
.../DefaultASTValidateableHelperSpec.groovy | 9 +
.../validation/SerializableValidateableSpec.groovy | 24 +
.../grails/validation/ValidateableMockSpec.groovy | 24 +
.../validation/ValidateableTraitAdHocSpec.groovy | 14 +
.../grails/validation/ValidateableTraitSpec.groovy | 14 +
grails-views-core/build.gradle | 2 +-
grails-views-gson/build.gradle | 2 +-
.../plugin/json/builder/DefaultJsonGenerator.java | 542 +--------
.../grails/plugin/json/builder/JsonGenerator.java | 270 +----
.../grails/plugin/json/builder/JsonOutput.java | 268 +----
.../plugin/json/builder/StreamingJsonBuilder.java | 800 +-------------
.../json/converters/InstantJsonConverter.groovy | 3 +-
.../json/converters/LocalDateJsonConverter.groovy | 3 +-
.../converters/LocalDateTimeJsonConverter.groovy | 3 +-
.../json/converters/LocalTimeJsonConverter.groovy | 3 +-
.../converters/OffsetDateTimeJsonConverter.groovy | 3 +-
.../json/converters/OffsetTimeJsonConverter.groovy | 3 +-
.../json/converters/PeriodJsonConverter.groovy | 3 +-
.../converters/ZonedDateTimeJsonConverter.groovy | 3 +-
.../plugin/json/view/JsonViewTemplateEngine.groovy | 30 +-
.../plugin/json/view/JsonViewWritableScript.groovy | 67 +-
.../json/view/api/GrailsJsonViewHelper.groovy | 18 +-
.../plugin/json/view/api/HalViewHelper.groovy | 18 +-
.../grails/plugin/json/view/api/JsonView.groovy | 38 +-
.../internal/DefaultGrailsJsonViewHelper.groovy | 94 +-
.../view/api/internal/DefaultHalViewHelper.groovy | 134 +--
.../api/internal/DefaultJsonApiViewHelper.groovy | 11 +-
.../view/api/internal/DefaultJsonViewHelper.groovy | 3 +-
.../JsonTemplateTypeCheckingExtension.groovy | 9 +-
.../json/view/template/JsonViewTemplate.groovy | 23 +-
.../grails/plugin/json/view/api/JsonApiSpec.groovy | 21 +
grails-views-markup/build.gradle | 2 +-
grails-web-boot/build.gradle | 2 +-
grails-web-common/build.gradle | 2 +-
grails-web-core/build.gradle | 2 +-
.../context/GrailsWebApplicationContext.java | 4 +
.../web/servlet/context/GrailsConfigUtils.java | 3 +-
grails-web-databinding/build.gradle | 2 +-
grails-web-mvc/build.gradle | 2 +-
grails-web-url-mappings/build.gradle | 2 +-
.../groovy/grails/web/mapping/UrlMappingData.java | 10 +
.../grails/web/mapping/DefaultUrlMappingData.java | 8 +
.../org/grails/web/mapping/RegexUrlMapping.java | 24 +-
.../mvc/AbstractGrailsControllerUrlMappings.groovy | 12 +-
.../reporting/UrlMappingsReportCommand.groovy | 21 +-
.../resources/META-INF/services/grails.factories | 1 -
.../UrlMappingsWithGreedyExtensionSpec.groovy | 203 ++++
.../LinkGeneratorWithUrlMappingsSpec.groovy | 13 +
.../web/mapping/RestfulUrlMappingSpec.groovy | 6 +
.../mapping/UrlMappingsWithHttpMethodSpec.groovy | 6 +
.../web/mapping/mvc/EncodePathFromURISpec.groovy | 5 +
grails-wrapper/build.gradle | 2 +-
...pe.java => GrailsReleaseNotFoundException.java} | 29 +-
.../main/java/grails/init/GrailsReleaseType.java | 4 +-
.../src/main/java/grails/init/GrailsUpdater.java | 82 +-
.../src/main/java/grails/init/GrailsVersion.java | 26 +-
.../main/java/grails/init/GrailsWrapperHome.java | 31 +-
.../main/java/grails/init/GrailsWrapperRepo.java | 54 +-
.../main/java/grails/init/RootMetadataHandler.java | 2 +-
settings.gradle | 100 +-
1233 files changed, 66286 insertions(+), 9204 deletions(-)
diff --cc dependencies.gradle
index 735aa33ec9,ecbbca0f2e..cf32aed8f2
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@@ -37,8 -37,7 +37,7 @@@ ext
'jna.version' : '5.17.0',
'jquery.version' : '3.7.1',
'objenesis.version' : '3.4',
- 'gradle-spock.version' : '2.3-groovy-3.0',
- 'spring-boot.version' : '3.5.11',
+ 'spring-boot.version' : '4.0.1',
]
// Note: the name of the dependency must be the prefix of the property name so properties in the pom are resolved correctly
diff --cc grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
index 094826672f,9279072fb6..aba6d87fe8
--- a/grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
+++ b/grails-core/src/main/groovy/org/grails/compiler/injection/ApplicationClassInjector.groovy
@@@ -64,9 -64,30 +64,30 @@@ class ApplicationClassInjector implemen
public static final List<String> EXCLUDED_AUTO_CONFIGURE_CLASSES = [
'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration',
'org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration',
- 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration'
+ 'org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration'
]
+ /**
+ * Auto-configuration classes that are conditionally excluded when
+ * a specific plugin is detected on the classpath. Each entry maps a
+ * plugin class (checked via {@link ClassUtils#isPresent}) to the
+ * auto-configuration class name to exclude, with an optional system
+ * property that can disable the exclusion.
+ *
+ * <p>The system property defaults to {@code "true"} (exclusion enabled).
+ * Set it to {@code "false"} in {@code gradle.properties} to opt out:</p>
+ * <pre>
+ * systemProp.grails.autoconfigure.exclude.liquibase=false
+ * </pre>
+ */
+ static final List<Map<String, String>> CONDITIONAL_EXCLUSIONS = [
+ [
+ pluginClass: 'org.grails.plugins.databasemigration.DatabaseMigrationGrailsPlugin',
+ excludeClass: 'org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration',
+ systemProperty: 'grails.autoconfigure.exclude.liquibase'
+ ]
+ ]
+
ApplicationArtefactHandler applicationArtefactHandler = new ApplicationArtefactHandler()
private static final List<Integer> transformedInstances = []
diff --cc grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
index 8057983f69,522ae45193..a4972c5924
--- a/grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
+++ b/grails-data-hibernate5/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
@@@ -36,8 -38,10 +38,9 @@@ import org.hibernate.sql.JoinType
import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.Type;
-import org.springframework.orm.hibernate5.SessionHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;
+ import org.grails.datastore.gorm.query.criteria.AbstractDetachedCriteria;
import org.grails.datastore.mapping.model.PersistentEntity;
import org.grails.datastore.mapping.query.api.QueryableCriteria;
import org.grails.orm.hibernate.GrailsHibernateTemplate;
diff --cc grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
index 6cbf6c35c7,d8666d9414..e71e88bd59
--- a/grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
+++ b/grails-data-hibernate5/core/src/test/groovy/org/apache/grails/data/hibernate5/core/GrailsDataHibernate5TckManager.groovy
@@@ -28,12 -28,15 +28,15 @@@ import org.grails.datastore.mapping.cor
import org.grails.orm.hibernate.GrailsHibernateTransactionManager
import org.grails.orm.hibernate.HibernateDatastore
import org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration
+ import org.grails.datastore.mapping.multitenancy.MultiTenancySettings
+ import org.grails.datastore.mapping.multitenancy.resolvers.SystemPropertyTenantResolver
import org.h2.Driver
import org.hibernate.SessionFactory
+ import org.hibernate.dialect.H2Dialect
import org.springframework.beans.factory.DisposableBean
import org.springframework.context.ApplicationContext
-import org.springframework.orm.hibernate5.SessionFactoryUtils
-import org.springframework.orm.hibernate5.SessionHolder
+import org.grails.orm.hibernate.support.hibernate5.SessionFactoryUtils
+import org.grails.orm.hibernate.support.hibernate5.SessionHolder
import org.springframework.transaction.TransactionStatus
import org.springframework.transaction.support.DefaultTransactionDefinition
import org.springframework.transaction.support.TransactionSynchronizationManager
diff --cc grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
index ad2d8ebc78,701700e0f0..599181c7fa
--- a/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
+++ b/grails-data-hibernate5/core/src/test/groovy/org/grails/orm/hibernate/connections/SchemaMultiTenantSpec.groovy
@@@ -27,9 -27,10 +27,10 @@@ import org.grails.orm.hibernate.Hiberna
import org.hibernate.Session
import org.hibernate.dialect.H2Dialect
import org.hibernate.resource.jdbc.spi.JdbcSessionOwner
-import org.springframework.orm.hibernate5.SessionHolder
+import org.grails.orm.hibernate.support.hibernate5.SessionHolder
import org.springframework.transaction.support.TransactionSynchronizationManager
import spock.lang.AutoCleanup
+ import spock.util.environment.RestoreSystemProperties
import spock.lang.Shared
import spock.lang.Specification
diff --cc grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
index 719461c9ce,782e1710a6..6c7facb331
--- a/grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
+++ b/grails-data-hibernate5/grails-plugin/src/main/groovy/org/grails/plugin/hibernate/support/GrailsOpenSessionInViewInterceptor.java
@@@ -27,13 -34,18 +31,20 @@@ import org.springframework.transaction.
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.WebRequest;
+ import org.grails.datastore.mapping.core.connections.ConnectionSource;
import org.grails.orm.hibernate.AbstractHibernateDatastore;
+ import org.grails.orm.hibernate.HibernateDatastore;
+ import org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings;
+import org.grails.orm.hibernate.support.hibernate5.SessionHolder;
+import org.grails.orm.hibernate.support.hibernate5.support.OpenSessionInViewInterceptor;
/**
- * Extends the default spring OSIV and doesn't flush the session if it has been set
- * to MANUAL on the session itself.
+ * Extends the default Spring OSIV to support multiple datasources.
+ * <p>
+ * The default datasource's SessionFactory is managed by the parent class.
+ * Additional (non-default) datasource SessionFactories are managed by this
+ * subclass, which opens and closes sessions for each one alongside the
+ * default session.
*
* @author Graeme Rocher
* @since 0.5
diff --cc grails-spring/build.gradle
index 875378a531,21322cb0cd..df049dc440
--- a/grails-spring/build.gradle
+++ b/grails-spring/build.gradle
@@@ -60,11 -61,5 +61,10 @@@ dependencies
}
apply {
- from rootProject.layout.projectDirectory.file('gradle/code-style-config.gradle')
from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle')
+}
+
+// Exclude copied Spring Framework theme classes from checkstyle (deprecated legacy code from Spring 6.x)
+tasks.named('checkstyleMain') {
+ exclude '**/org/springframework/ui/**'
}