blob: 15a2cb5c1e38394529755c3d6d4c3ba4094dfdff [file] [log] [blame]
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
object UnusedSourceSetsChecker {
const val WARNING_PREFIX_ONE =
"The Kotlin source set"
const val WARNING_PREFIX_MANY =
"The following Kotlin source sets were"
const val WARNING_INTRO = "configured but not added to any Kotlin compilation"
const val WARNING_BOTTOM_LINE =
"You can add a source set to a target's compilation by connecting it with the compilation's default source set using 'dependsOn'.\n" +
"See https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#connecting-source-sets"
private fun reportUnusedSourceSets(project: Project, sourceSets: Set<KotlinSourceSet>) {
require(sourceSets.isNotEmpty())
val message = when (sourceSets.size) {
1 -> "$WARNING_PREFIX_ONE ${sourceSets.single().name} was $WARNING_INTRO. $WARNING_BOTTOM_LINE"
else -> {
val list = sourceSets.joinToString("\n", "\n", "\n") { " * ${it.name}" }
"$WARNING_PREFIX_MANY $WARNING_INTRO:$list$WARNING_BOTTOM_LINE"
}
}
project.logger.warn("\n" + message) // make sure the message stands out
}
fun checkSourceSets(project: Project) {
// TODO once Android compilations are configured eagerly, move this to afterEvaluate { ... } instead of taskGraph.whenReady { ... }
project.gradle.taskGraph.whenReady { _ ->
val compilationsBySourceSet = CompilationSourceSetUtil.compilationsBySourceSets(project)
val unusedSourceSets = project.kotlinExtension.sourceSets.filter {
compilationsBySourceSet[it]?.isEmpty() ?: true
}
if (unusedSourceSets.isNotEmpty()) {
reportUnusedSourceSets(project, unusedSourceSets.toSet())
}
}
}
}