Skip to content

Commit 4474650

Browse files
Oleksandr Dzhychkowakingrufus
authored andcommitted
fix: apply configuration for source sets and targets that are added after the plugin is applied
Use `DomainObjectCollection.all` instead of `Iterable<T>.forEach`. `all` executes the given function also against any objects subsequently added objects
1 parent 7901898 commit 4474650

File tree

4 files changed

+119
-6
lines changed

4 files changed

+119
-6
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## [Unreleased]
99

10+
- fix: apply configuration for source sets and targets that are added after the plugin is
11+
applied [#732](https://github.com/JLLeitschuh/ktlint-gradle/pull/732)
12+
1013
## [12.0.2] - 2023-12-01
1114

1215
- remove KtLintIdea Plugin [#726](https://github.com/JLLeitschuh/ktlint-gradle/pull/726).

plugin/src/main/kotlin/org/jlleitschuh/gradle/ktlint/KtlintPlugin.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ open class KtlintPlugin : Plugin<Project> {
3939
private fun PluginHolder.applyKtlintMultiplatform(): (Plugin<in Any>) -> Unit = {
4040
val multiplatformExtension = target.extensions.getByType(KotlinMultiplatformExtension::class.java)
4141

42-
multiplatformExtension.sourceSets.forEach { sourceSet ->
42+
multiplatformExtension.sourceSets.all(fun(sourceSet) {
4343
val checkTask = createCheckTask(
4444
this,
4545
sourceSet.name,
@@ -68,18 +68,18 @@ open class KtlintPlugin : Plugin<Project> {
6868
)
6969

7070
addGenerateReportsTaskToProjectMetaFormatTask(generateReportsFormatTask)
71-
}
71+
})
7272

73-
multiplatformExtension.targets.forEach { kotlinTarget ->
73+
multiplatformExtension.targets.all(fun(kotlinTarget) {
7474
if (kotlinTarget.platformType == KotlinPlatformType.androidJvm) {
7575
applyKtLintToAndroid()
7676
}
77-
}
77+
})
7878
}
7979

8080
private fun PluginHolder.applyKtLint(): (Plugin<in Any>) -> Unit = {
8181
target.extensions.configure(KotlinProjectExtension::class.java) {
82-
sourceSets.forEach { sourceSet ->
82+
sourceSets.all(fun(sourceSet) {
8383
val kotlinSourceDirectories = sourceSet.kotlin.sourceDirectories
8484
val checkTask = createCheckTask(
8585
this@applyKtLint,
@@ -109,7 +109,7 @@ open class KtlintPlugin : Plugin<Project> {
109109
)
110110

111111
addGenerateReportsTaskToProjectMetaFormatTask(generateReportsFormatTask)
112-
}
112+
})
113113
}
114114
}
115115

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.jlleitschuh.gradle.ktlint
2+
3+
import org.assertj.core.api.Assertions.assertThat
4+
import org.gradle.util.GradleVersion
5+
import org.jlleitschuh.gradle.ktlint.tasks.GenerateReportsTask
6+
import org.jlleitschuh.gradle.ktlint.testdsl.CommonTest
7+
import org.jlleitschuh.gradle.ktlint.testdsl.GradleTestVersions
8+
import org.jlleitschuh.gradle.ktlint.testdsl.build
9+
import org.jlleitschuh.gradle.ktlint.testdsl.project
10+
import org.jlleitschuh.gradle.ktlint.testdsl.projectSetup
11+
import org.junit.jupiter.api.DisplayName
12+
import java.io.File
13+
14+
/**
15+
* Contains all tests related to "org.jetbrains.kotlin.multiplatform" plugin support.
16+
*/
17+
@GradleTestVersions
18+
class KotlinMultiplatformPluginTests : AbstractPluginTest() {
19+
private fun multiplatformProjectSetup(gradleVersion: GradleVersion): (File) -> Unit = {
20+
projectSetup("multiplatform", gradleVersion).invoke(it)
21+
22+
//language=Groovy
23+
it.resolve("build.gradle").appendText(
24+
"""
25+
|
26+
|kotlin {
27+
| js {
28+
| browser()
29+
| }
30+
| jvm()
31+
|}
32+
""".trimMargin()
33+
)
34+
}
35+
36+
@DisplayName("Should add check on all sources")
37+
@CommonTest
38+
fun addCheckTasks(gradleVersion: GradleVersion) {
39+
project(gradleVersion, projectSetup = multiplatformProjectSetup(gradleVersion)) {
40+
build("-m", CHECK_PARENT_TASK_NAME) {
41+
val ktlintTasks = output.lineSequence().toList()
42+
43+
assertThat(ktlintTasks).anySatisfy {
44+
assertThat(it).contains(
45+
GenerateReportsTask.generateNameForSourceSets(
46+
"commonMain",
47+
GenerateReportsTask.LintType.CHECK
48+
)
49+
)
50+
}
51+
assertThat(ktlintTasks).anySatisfy {
52+
assertThat(it).contains(
53+
GenerateReportsTask.generateNameForSourceSets(
54+
"JsMain",
55+
GenerateReportsTask.LintType.CHECK
56+
)
57+
)
58+
}
59+
assertThat(ktlintTasks).anySatisfy {
60+
assertThat(it).contains(
61+
GenerateReportsTask.generateNameForSourceSets(
62+
"JvmMain",
63+
GenerateReportsTask.LintType.CHECK
64+
)
65+
)
66+
}
67+
}
68+
}
69+
}
70+
}

plugin/src/test/kotlin/org/jlleitschuh/gradle/ktlint/KtlintPluginTest.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.jlleitschuh.gradle.ktlint.testdsl.TestProject.Companion.FAIL_SOURCE_F
1212
import org.jlleitschuh.gradle.ktlint.testdsl.build
1313
import org.jlleitschuh.gradle.ktlint.testdsl.buildAndFail
1414
import org.jlleitschuh.gradle.ktlint.testdsl.project
15+
import org.jlleitschuh.gradle.ktlint.testdsl.projectSetup
1516
import org.junit.jupiter.api.DisplayName
1617
import org.junit.jupiter.api.condition.EnabledOnOs
1718
import org.junit.jupiter.api.condition.OS
@@ -689,4 +690,43 @@ class KtlintPluginTest : AbstractPluginTest() {
689690
}
690691
}
691692
}
693+
694+
@DisplayName("Should add check on additional sources")
695+
@CommonTest
696+
fun checkAdditionalSources(gradleVersion: GradleVersion) {
697+
fun projectSetup(file: File) {
698+
projectSetup("jvm", gradleVersion).invoke(file)
699+
700+
//language=Groovy
701+
file.resolve("build.gradle").appendText(
702+
"""
703+
|
704+
|sourceSets {
705+
| additionalSources {
706+
| kotlin {
707+
| srcDir 'src/additionalSources/kotlin'
708+
| }
709+
| }
710+
|}
711+
""".trimMargin()
712+
)
713+
}
714+
715+
val additionalSourcesSourceSetCheckTaskName = GenerateReportsTask.generateNameForSourceSets(
716+
"additionalSources",
717+
GenerateReportsTask.LintType.CHECK
718+
)
719+
720+
project(gradleVersion, projectSetup = ::projectSetup) {
721+
build("-m", CHECK_PARENT_TASK_NAME) {
722+
val ktlintTasks = output.lineSequence().toList()
723+
assertThat(ktlintTasks).anySatisfy {
724+
assertThat(it).contains(mainSourceSetCheckTaskName)
725+
}
726+
assertThat(ktlintTasks).anySatisfy {
727+
assertThat(it).contains(additionalSourcesSourceSetCheckTaskName)
728+
}
729+
}
730+
}
731+
}
692732
}

0 commit comments

Comments
 (0)