diffplug / diffplug/spotless

Gradle 8.x: can not configure SQL format in `withinBlocksRegex`

Open
#2,054 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
5.6k
Forks
559
Avg merge
1d 13h
Merged PRs (30d)
34

Description

I'm using Gradle 8.6 and spotless 6.25.0 on macOS Sonoma 14.3.1

I was trying to format some SQL within another source file, but I just can not register the sql format. I tried the following:
```kotlin
spotless {
format("jsonnet") {
target("**/*.jsonnet", "**/*.libsonnet")
trimTrailingWhitespace()
indentWithSpaces()
withinBlocksRegex("sql", "(?s)|||\\v.*|||") {
sql { dbeaver() }
}
}
}
```

And it fails with:
```
Caused by: org.gradle.api.internal.AbstractMutationGuard$IllegalMutationException: DefaultTaskContainer#register(String, Class, Action) on task set cannot be executed in the current context.
at org.gradle.api.internal.AbstractMutationGuard.createIllegalStateException(AbstractMutationGuard.java:39)
at org.gradle.api.internal.AbstractMutationGuard.assertMutationAllowed(AbstractMutationGuard.java:27)
at org.gradle.api.internal.DefaultDomainObjectCollection.assertMutable(DefaultDomainObjectCollection.java:440)
at org.gradle.api.internal.tasks.DefaultTaskContainer.register(DefaultTaskContainer.java:381)
at com.diffplug.gradle.spotless.SpotlessExtensionImpl.createFormatTasks(SpotlessExtensionImpl.java:56)
at com.diffplug.gradle.spotless.SpotlessExtension.maybeCreate(SpotlessExtension.java:273)
at com.diffplug.gradle.spotless.SpotlessExtension.format(SpotlessExtension.java:257)
at com.diffplug.gradle.spotless.SpotlessExtension.sql(SpotlessExtension.java:168)
at Build_logic_jsonnet_sql_spotless_gradle$2$1$1.execute(build-logic.jsonnet-sql-spotless.gradle.kts:14)
at Build_logic_jsonnet_sql_spotless_gradle$2$1$1.execute(build-logic.jsonnet-sql-spotless.gradle.kts:13)
at com.diffplug.gradle.spotless.FormatExtension.withinBlocksHelper(FormatExtension.java:1018)
at com.diffplug.gradle.spotless.FormatExtension.withinBlocksRegex(FormatExtension.java:1010)
at com.diffplug.gradle.spotless.FormatExtension.withinBlocksRegex(FormatExtension.java:1000)
at Build_logic_jsonnet_sql_spotless_gradle$2$1.execute(build-logic.jsonnet-sql-spotless.gradle.kts:13)
at Build_logic_jsonnet_sql_spotless_gradle$2$1.execute(build-logic.jsonnet-sql-spotless.gradle.kts:9)
at com.diffplug.gradle.spotless.SpotlessExtensionImpl.lambda$createFormatTasks$6(SpotlessExtensionImpl.java:67)
at org.gradle.api.internal.DefaultMutationGuard$1.execute(DefaultMutationGuard.java:45)
at org.gradle.api.internal.DefaultMutationGuard$1.execute(DefaultMutationGuard.java:45)
at org.gradle.internal.code.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:122)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:110)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:107)
at org.gradle.internal.ImmutableActionSet$SetWithManyActions.execute(ImmutableActionSet.java:329)
at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:262)
at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:124)
at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:256)
at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.tryCreate(DefaultNamedDomainObjectCollection.java:1005)
... 170 more
```

~~Instead of the `sql { ... }` I tried e.g. `googleJavaFormat()` and it works without this failure, so I assume that this is a bug~~
It also doesn't work with `googleJavaFormat`

After some more experiments I found that this issue is likely related to gradle 8.x
The configuration apparently works with gradle 7.6.4

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.