-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathintellij.kt
74 lines (64 loc) · 2.02 KB
/
intellij.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package buildsrc.utils
import java.io.File
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.ProjectLayout
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.provider.ValueSource
import org.gradle.api.provider.ValueSourceParameters
import org.gradle.kotlin.dsl.*
import org.gradle.plugins.ide.idea.model.IdeaModule
/**
* Exclude directories containing
*
* - generated Gradle code,
* - IDE files,
* - Gradle config,
*
* so they don't clog up search results.
*/
fun IdeaModule.excludeProjectConfigurationDirs(
layout: ProjectLayout,
providers: ProviderFactory,
) {
val excludedDirs = providers.of(IdeaExcludedDirectoriesSource::class) {
parameters.projectDir.set(layout.projectDirectory)
}
excludeDirs.addAll(excludedDirs.get())
}
// We have to use a ValueSource to find the files, otherwise Gradle
// considers _all files_ an input for configuration cache 🙄
internal abstract class IdeaExcludedDirectoriesSource
: ValueSource<Set<File>, IdeaExcludedDirectoriesSource.Parameters> {
interface Parameters : ValueSourceParameters {
val projectDir: DirectoryProperty
}
override fun obtain(): Set<File> {
val projectDir = parameters.projectDir.get().asFile
val excludedDirs = setOf(
".git",
".gradle",
".idea",
".kotlin",
)
val generatedSrcDirs = listOf(
"kotlin-dsl-accessors",
"kotlin-dsl-external-plugin-spec-builders",
"kotlin-dsl-plugins",
)
val generatedDirs = projectDir
.walk()
.onEnter { it.name !in excludedDirs && it.parentFile.name !in generatedSrcDirs }
.filter { it.isDirectory }
.filter { it.parentFile.name in generatedSrcDirs }
.flatMap { file ->
file.walk().maxDepth(1).filter { it.isDirectory }.toList()
}
.toSet()
// can't use buildSet {} https://github.com/gradle/gradle/issues/28325
return mutableSetOf<File>().apply {
addAll(generatedDirs)
add(projectDir.resolve(".idea"))
add(projectDir.resolve("gradle/wrapper"))
}
}
}