[mpp] Migrate AndroidSourceSetLayout checks to the new infra
This commit is contained in:
committed by
Space Team
parent
4e479cb54b
commit
bb3dc145e5
+52
@@ -6,7 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.WARNING
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
||||||
|
|
||||||
@InternalKotlinGradlePluginApi // used in integration tests
|
@InternalKotlinGradlePluginApi // used in integration tests
|
||||||
object KotlinToolingDiagnostics {
|
object KotlinToolingDiagnostics {
|
||||||
@@ -75,4 +78,53 @@ object KotlinToolingDiagnostics {
|
|||||||
return build(cause + "\n" + details)
|
return build(cause + "\n" + details)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object PromoteAndroidSourceSetLayoutV2Warning : ToolingDiagnosticFactory(WARNING) {
|
||||||
|
operator fun invoke() = build(
|
||||||
|
"""
|
||||||
|
${multiplatformAndroidSourceSetLayoutV1.name} is deprecated. Use ${multiplatformAndroidSourceSetLayoutV2.name} instead.
|
||||||
|
To enable ${multiplatformAndroidSourceSetLayoutV2.name}: put the following in your gradle.properties:
|
||||||
|
${PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION}=2
|
||||||
|
|
||||||
|
To suppress this warning: put the following in your gradle.properties:
|
||||||
|
${PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION_1_NO_WARN}=true
|
||||||
|
|
||||||
|
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
object AgpRequirementNotMetForAndroidSourceSetLayoutV2 : ToolingDiagnosticFactory(WARNING) {
|
||||||
|
operator fun invoke(minimumRequiredAgpVersion: String, currentAgpVersion: String) = build(
|
||||||
|
"""
|
||||||
|
${multiplatformAndroidSourceSetLayoutV2.name} requires Android Gradle Plugin Version >= $minimumRequiredAgpVersion.
|
||||||
|
Found $currentAgpVersion
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
object AndroidStyleSourceDirUsageWarning : ToolingDiagnosticFactory(WARNING) {
|
||||||
|
operator fun invoke(androidStyleSourceDirInUse: String, kotlinStyleSourceDirToUse: String) = build(
|
||||||
|
"""
|
||||||
|
Usage of 'Android Style' source directory $androidStyleSourceDirInUse is deprecated.
|
||||||
|
Use $kotlinStyleSourceDirToUse instead.
|
||||||
|
|
||||||
|
To suppress this warning: put the following in your gradle.properties:
|
||||||
|
${PropertiesProvider.PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN}=true
|
||||||
|
|
||||||
|
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
object SourceSetLayoutV1StyleDirUsageWarning : ToolingDiagnosticFactory(WARNING) {
|
||||||
|
operator fun invoke(v1StyleSourceDirInUse: String, currentLayoutName: String, v2StyleSourceDirToUse: String) = build(
|
||||||
|
"""
|
||||||
|
Found used source directory $v1StyleSourceDirInUse
|
||||||
|
This source directory was supported by: ${multiplatformAndroidSourceSetLayoutV1.name}
|
||||||
|
Current KotlinAndroidSourceSetLayout: $currentLayoutName
|
||||||
|
New source directory is: $v2StyleSourceDirToUse
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -10,8 +10,8 @@ import org.gradle.api.logging.Logger
|
|||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.KotlinAndroidSourceSetLayoutChecker
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.getOrCreate
|
import org.jetbrains.kotlin.gradle.utils.getOrCreate
|
||||||
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ internal class KotlinAndroidSourceSetFactory(
|
|||||||
private val target: KotlinAndroidTarget,
|
private val target: KotlinAndroidTarget,
|
||||||
private val kotlin: KotlinProjectExtension,
|
private val kotlin: KotlinProjectExtension,
|
||||||
private val layout: KotlinAndroidSourceSetLayout,
|
private val layout: KotlinAndroidSourceSetLayout,
|
||||||
private val diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
private val diagnosticsCollector: KotlinToolingDiagnosticsCollector
|
||||||
) {
|
) {
|
||||||
private val configuredKotlinSourceSets = mutableSetOf<KotlinSourceSet>()
|
private val configuredKotlinSourceSets = mutableSetOf<KotlinSourceSet>()
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ internal class KotlinAndroidSourceSetFactory(
|
|||||||
layout.sourceSetConfigurator.configure(target, kotlinSourceSet, androidSourceSet)
|
layout.sourceSetConfigurator.configure(target, kotlinSourceSet, androidSourceSet)
|
||||||
target.project.runProjectConfigurationHealthCheck {
|
target.project.runProjectConfigurationHealthCheck {
|
||||||
val layout = this@KotlinAndroidSourceSetFactory.layout
|
val layout = this@KotlinAndroidSourceSetFactory.layout
|
||||||
layout.checker.checkCreatedSourceSet(diagnosticReporter, target, layout, kotlinSourceSet, androidSourceSet)
|
layout.checker.checkCreatedSourceSet(diagnosticsCollector, target, layout, kotlinSourceSet, androidSourceSet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return kotlinSourceSet
|
return kotlinSourceSet
|
||||||
|
|||||||
+8
-9
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.gradle.plugin.sources.android
|
|||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.KotlinAndroidSourceSetLayoutChecker
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||||
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
||||||
@@ -23,12 +23,13 @@ internal object KotlinAndroidSourceSets {
|
|||||||
) {
|
) {
|
||||||
logger.debug("Applying ${KotlinAndroidSourceSetLayout::class.java.simpleName}: ${layout.name}")
|
logger.debug("Applying ${KotlinAndroidSourceSetLayout::class.java.simpleName}: ${layout.name}")
|
||||||
|
|
||||||
val android = target.project.androidExtension
|
val project = target.project
|
||||||
val diagnosticReporter = KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter.create(target.project, logger, layout)
|
val android = project.androidExtension
|
||||||
val factory = KotlinAndroidSourceSetFactory(target, target.project.kotlinExtension, layout, diagnosticReporter)
|
val diagnosticsCollector = project.kotlinToolingDiagnosticsCollector
|
||||||
|
val factory = KotlinAndroidSourceSetFactory(target, project.kotlinExtension, layout, diagnosticsCollector)
|
||||||
|
|
||||||
target.project.runProjectConfigurationHealthCheck {
|
project.runProjectConfigurationHealthCheck {
|
||||||
layout.checker.checkBeforeLayoutApplied(diagnosticReporter, target, layout)
|
layout.checker.checkBeforeLayoutApplied(diagnosticsCollector, target, layout)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -46,7 +47,7 @@ internal object KotlinAndroidSourceSets {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Hook into Android's variant creation: This is invoked in 'afterEvaluate' */
|
/* Hook into Android's variant creation: This is invoked in 'afterEvaluate' */
|
||||||
target.project.forAllAndroidVariants { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
variant.sourceSets.forEach { sourceProvider ->
|
variant.sourceSets.forEach { sourceProvider ->
|
||||||
val androidSourceSet = android.sourceSets.findByName(sourceProvider.name) ?: return@forEach
|
val androidSourceSet = android.sourceSets.findByName(sourceProvider.name) ?: return@forEach
|
||||||
|
|
||||||
@@ -60,5 +61,3 @@ internal object KotlinAndroidSourceSets {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+7
-39
@@ -6,38 +6,20 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
||||||
|
|
||||||
import com.android.build.gradle.api.AndroidSourceSet
|
import com.android.build.gradle.api.AndroidSourceSet
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.logging.Logger
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
||||||
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
|
|
||||||
|
|
||||||
internal interface KotlinAndroidSourceSetLayoutChecker {
|
internal interface KotlinAndroidSourceSetLayoutChecker {
|
||||||
open class ProjectMisconfiguredException(message: String) : Exception(message)
|
|
||||||
|
|
||||||
interface DiagnosticReporter {
|
|
||||||
fun error(diagnostic: Diagnostic): Nothing
|
|
||||||
fun warning(diagnostic: Diagnostic)
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun create(project: Project, logger: Logger, layout: KotlinAndroidSourceSetLayout): DiagnosticReporter =
|
|
||||||
DiagnosticReporterImpl(project, logger, layout)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Diagnostic {
|
|
||||||
val message: String
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkBeforeLayoutApplied(
|
fun checkBeforeLayoutApplied(
|
||||||
diagnosticReporter: DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout
|
layout: KotlinAndroidSourceSetLayout
|
||||||
) = Unit
|
) = Unit
|
||||||
|
|
||||||
fun checkCreatedSourceSet(
|
fun checkCreatedSourceSet(
|
||||||
diagnosticReporter: DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout,
|
layout: KotlinAndroidSourceSetLayout,
|
||||||
kotlinSourceSet: KotlinSourceSet,
|
kotlinSourceSet: KotlinSourceSet,
|
||||||
@@ -45,20 +27,6 @@ internal interface KotlinAndroidSourceSetLayoutChecker {
|
|||||||
) = Unit
|
) = Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DiagnosticReporterImpl(
|
|
||||||
private val project: Project,
|
|
||||||
private val logger: Logger,
|
|
||||||
private val layout: KotlinAndroidSourceSetLayout
|
|
||||||
) : KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter {
|
|
||||||
override fun error(diagnostic: KotlinAndroidSourceSetLayoutChecker.Diagnostic): Nothing {
|
|
||||||
throw KotlinAndroidSourceSetLayoutChecker.ProjectMisconfiguredException("${layout.name}: ${diagnostic.message}")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun warning(diagnostic: KotlinAndroidSourceSetLayoutChecker.Diagnostic) {
|
|
||||||
SingleWarningPerBuild.show(project, logger, "w: ${layout.name}: ${diagnostic.message}\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Composite Implementation */
|
/* Composite Implementation */
|
||||||
|
|
||||||
internal fun KotlinAndroidSourceSetLayoutChecker(
|
internal fun KotlinAndroidSourceSetLayoutChecker(
|
||||||
@@ -72,22 +40,22 @@ private class CompositeKotlinAndroidSourceSetLayoutChecker(
|
|||||||
) : KotlinAndroidSourceSetLayoutChecker {
|
) : KotlinAndroidSourceSetLayoutChecker {
|
||||||
|
|
||||||
override fun checkBeforeLayoutApplied(
|
override fun checkBeforeLayoutApplied(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout
|
layout: KotlinAndroidSourceSetLayout
|
||||||
) {
|
) {
|
||||||
checkers.forEach { checker -> checker.checkBeforeLayoutApplied(diagnosticReporter, target, layout) }
|
checkers.forEach { checker -> checker.checkBeforeLayoutApplied(diagnosticsCollector, target, layout) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun checkCreatedSourceSet(
|
override fun checkCreatedSourceSet(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout,
|
layout: KotlinAndroidSourceSetLayout,
|
||||||
kotlinSourceSet: KotlinSourceSet,
|
kotlinSourceSet: KotlinSourceSet,
|
||||||
androidSourceSet: AndroidSourceSet
|
androidSourceSet: AndroidSourceSet
|
||||||
) {
|
) {
|
||||||
checkers.forEach { checker ->
|
checkers.forEach { checker ->
|
||||||
checker.checkCreatedSourceSet(diagnosticReporter, target, layout, kotlinSourceSet, androidSourceSet)
|
checker.checkCreatedSourceSet(diagnosticsCollector, target, layout, kotlinSourceSet, androidSourceSet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-21
@@ -6,42 +6,27 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Promotes MultiplatformAndroidSourceSetLayoutV2 when requirements are met
|
* Promotes MultiplatformAndroidSourceSetLayoutV2 when requirements are met
|
||||||
*/
|
*/
|
||||||
internal object MultiplatformLayoutV1PromoteV2Checker : KotlinAndroidSourceSetLayoutChecker {
|
internal object MultiplatformLayoutV1PromoteV2Checker : KotlinAndroidSourceSetLayoutChecker {
|
||||||
override fun checkBeforeLayoutApplied(
|
override fun checkBeforeLayoutApplied(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout
|
layout: KotlinAndroidSourceSetLayout
|
||||||
) {
|
) {
|
||||||
if (target.project.kotlinPropertiesProvider.ignoreMppAndroidSourceSetLayoutVersion) return
|
if (target.project.kotlinPropertiesProvider.ignoreMppAndroidSourceSetLayoutVersion) return
|
||||||
runCatching {
|
runCatching {
|
||||||
if (MultiplatformLayoutV2AgpRequirementChecker.isAgpRequirementMet()) {
|
if (MultiplatformLayoutV2AgpRequirementChecker.isAgpRequirementMet()) {
|
||||||
diagnosticReporter.warning(PromoteV2LayoutDiagnostic)
|
diagnosticsCollector.reportOncePerGradleBuild(
|
||||||
|
target.project, KotlinToolingDiagnostics.PromoteAndroidSourceSetLayoutV2Warning()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object PromoteV2LayoutDiagnostic : KotlinAndroidSourceSetLayoutChecker.Diagnostic {
|
|
||||||
override val message: String
|
|
||||||
get() = """
|
|
||||||
${multiplatformAndroidSourceSetLayoutV1.name} is deprecated. Use ${multiplatformAndroidSourceSetLayoutV2.name} instead.
|
|
||||||
To enable ${multiplatformAndroidSourceSetLayoutV2.name}: put the following in your gradle.properties:
|
|
||||||
${PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION}=2
|
|
||||||
|
|
||||||
To suppress this warning: put the following in your gradle.properties:
|
|
||||||
${PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION_1_NO_WARN}=true
|
|
||||||
|
|
||||||
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
override fun toString(): String = "PromoteV2LayoutDiagnostic"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-14
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
|||||||
|
|
||||||
import com.android.Version
|
import com.android.Version
|
||||||
import org.jetbrains.kotlin.gradle.plugin.AndroidGradlePluginVersion
|
import org.jetbrains.kotlin.gradle.plugin.AndroidGradlePluginVersion
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.isAtLeast
|
import org.jetbrains.kotlin.gradle.plugin.isAtLeast
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
||||||
@@ -16,13 +18,17 @@ internal object MultiplatformLayoutV2AgpRequirementChecker : KotlinAndroidSource
|
|||||||
internal val minimumRequiredAgpVersion = AndroidGradlePluginVersion(7, 0, 0)
|
internal val minimumRequiredAgpVersion = AndroidGradlePluginVersion(7, 0, 0)
|
||||||
|
|
||||||
override fun checkBeforeLayoutApplied(
|
override fun checkBeforeLayoutApplied(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout
|
layout: KotlinAndroidSourceSetLayout
|
||||||
) {
|
) {
|
||||||
if (!isAgpRequirementMet()) {
|
if (!isAgpRequirementMet()) {
|
||||||
diagnosticReporter.error(
|
diagnosticsCollector.reportOncePerGradleBuild(
|
||||||
AgpRequirementNotMetDiagnostic(minimumRequiredAgpVersion.toString(), Version.ANDROID_GRADLE_PLUGIN_VERSION)
|
target.project,
|
||||||
|
KotlinToolingDiagnostics.AgpRequirementNotMetForAndroidSourceSetLayoutV2(
|
||||||
|
minimumRequiredAgpVersion.toString(),
|
||||||
|
Version.ANDROID_GRADLE_PLUGIN_VERSION
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,15 +36,4 @@ internal object MultiplatformLayoutV2AgpRequirementChecker : KotlinAndroidSource
|
|||||||
internal fun isAgpRequirementMet(): Boolean {
|
internal fun isAgpRequirementMet(): Boolean {
|
||||||
return AndroidGradlePluginVersion.currentOrNull.isAtLeast(minimumRequiredAgpVersion)
|
return AndroidGradlePluginVersion.currentOrNull.isAtLeast(minimumRequiredAgpVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal data class AgpRequirementNotMetDiagnostic(
|
|
||||||
val minimumRequiredAgpVersion: String,
|
|
||||||
val currentAgpVersion: String
|
|
||||||
) : KotlinAndroidSourceSetLayoutChecker.Diagnostic {
|
|
||||||
override val message: String
|
|
||||||
get() = """
|
|
||||||
requires Android Gradle Plugin Version >= $minimumRequiredAgpVersion.
|
|
||||||
Found $currentAgpVersion
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-21
@@ -6,13 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
||||||
|
|
||||||
import com.android.build.gradle.api.AndroidSourceSet
|
import com.android.build.gradle.api.AndroidSourceSet
|
||||||
import org.gradle.api.logging.Logging
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will detect usage of "Android Style" source directories (like 'src/main/kotlin') and emit a warning
|
* Will detect usage of "Android Style" source directories (like 'src/main/kotlin') and emit a warning
|
||||||
@@ -20,33 +19,24 @@ import java.io.File
|
|||||||
internal object MultiplatformLayoutV2AndroidStyleSourceDirUsageChecker : KotlinAndroidSourceSetLayoutChecker {
|
internal object MultiplatformLayoutV2AndroidStyleSourceDirUsageChecker : KotlinAndroidSourceSetLayoutChecker {
|
||||||
|
|
||||||
override fun checkCreatedSourceSet(
|
override fun checkCreatedSourceSet(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout,
|
layout: KotlinAndroidSourceSetLayout,
|
||||||
kotlinSourceSet: KotlinSourceSet,
|
kotlinSourceSet: KotlinSourceSet,
|
||||||
androidSourceSet: AndroidSourceSet
|
androidSourceSet: AndroidSourceSet
|
||||||
) {
|
) {
|
||||||
if (target.project.kotlinPropertiesProvider.ignoreMppAndroidSourceSetLayoutV2AndroidStyleDirs) return
|
if (target.project.kotlinPropertiesProvider.ignoreMppAndroidSourceSetLayoutV2AndroidStyleDirs) return
|
||||||
|
val projectRoot = target.project.rootDir
|
||||||
val androidStyleSourceDir = target.project.file("src/${androidSourceSet.name}/kotlin")
|
val androidStyleSourceDir = target.project.file("src/${androidSourceSet.name}/kotlin")
|
||||||
if (androidStyleSourceDir in kotlinSourceSet.kotlin.srcDirs && androidStyleSourceDir.exists()) {
|
if (androidStyleSourceDir in kotlinSourceSet.kotlin.srcDirs && androidStyleSourceDir.exists()) {
|
||||||
val kotlinStyleSourceDirToUse = target.project.file("src/${kotlinSourceSet.name}/kotlin")
|
val kotlinStyleSourceDirToUse = target.project.file("src/${kotlinSourceSet.name}/kotlin")
|
||||||
diagnosticReporter.warning(AndroidStyleSourceDirUsageDiagnostic(androidStyleSourceDir, kotlinStyleSourceDirToUse))
|
diagnosticsCollector.report(
|
||||||
|
target.project,
|
||||||
|
KotlinToolingDiagnostics.AndroidStyleSourceDirUsageWarning(
|
||||||
|
androidStyleSourceDir.relativeTo(projectRoot).toString(),
|
||||||
|
kotlinStyleSourceDirToUse.relativeTo(projectRoot).toString(),
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class AndroidStyleSourceDirUsageDiagnostic(
|
|
||||||
val androidStyleSourceDirInUse: File,
|
|
||||||
val kotlinStyleSourceDirToUse: File
|
|
||||||
) : KotlinAndroidSourceSetLayoutChecker.Diagnostic {
|
|
||||||
override val message: String
|
|
||||||
get() = """
|
|
||||||
Usage of 'Android Style' source directory $androidStyleSourceDirInUse is deprecated.
|
|
||||||
Use $kotlinStyleSourceDirToUse instead.
|
|
||||||
|
|
||||||
To suppress this warning: put the following in your gradle.properties:
|
|
||||||
${PropertyNames.KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN}=true
|
|
||||||
|
|
||||||
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-22
@@ -6,22 +6,25 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
package org.jetbrains.kotlin.gradle.plugin.sources.android.checker
|
||||||
|
|
||||||
import com.android.build.gradle.api.AndroidSourceSet
|
import com.android.build.gradle.api.AndroidSourceSet
|
||||||
import org.gradle.api.logging.Logging
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.KotlinAndroidSourceSetLayout
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.androidSourceSetInfo
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.androidSourceSetInfo
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||||
import java.io.File
|
import kotlin.io.path.ExperimentalPathApi
|
||||||
|
import kotlin.io.path.relativeTo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detects and warns about usage of source directories from multiplatform layout version 1
|
* Detects and warns about usage of source directories from multiplatform layout version 1
|
||||||
*/
|
*/
|
||||||
internal object MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker : KotlinAndroidSourceSetLayoutChecker {
|
internal object MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker : KotlinAndroidSourceSetLayoutChecker {
|
||||||
|
|
||||||
|
@OptIn(ExperimentalPathApi::class)
|
||||||
override fun checkCreatedSourceSet(
|
override fun checkCreatedSourceSet(
|
||||||
diagnosticReporter: KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter,
|
diagnosticsCollector: KotlinToolingDiagnosticsCollector,
|
||||||
target: KotlinAndroidTarget,
|
target: KotlinAndroidTarget,
|
||||||
layout: KotlinAndroidSourceSetLayout,
|
layout: KotlinAndroidSourceSetLayout,
|
||||||
kotlinSourceSet: KotlinSourceSet,
|
kotlinSourceSet: KotlinSourceSet,
|
||||||
@@ -41,29 +44,18 @@ internal object MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChe
|
|||||||
*/
|
*/
|
||||||
if (target.project.androidExtension.sourceSets.findByName(v1kotlinSourceSetName) != null) return
|
if (target.project.androidExtension.sourceSets.findByName(v1kotlinSourceSetName) != null) return
|
||||||
|
|
||||||
|
val rootDirPath = target.project.rootDir.toPath()
|
||||||
val v1KotlinSourceDir = target.project.file("src/$v1kotlinSourceSetName/kotlin")
|
val v1KotlinSourceDir = target.project.file("src/$v1kotlinSourceSetName/kotlin")
|
||||||
if (v1KotlinSourceDir.exists()) {
|
if (v1KotlinSourceDir.exists()) {
|
||||||
diagnosticReporter.warning(
|
val v2SourceDirToUse = target.project.file("src/${kotlinSourceSet.name}/kotlin")
|
||||||
V1StyleSourceDirUsageDiagnostic(
|
diagnosticsCollector.report(
|
||||||
layout = layout,
|
target.project,
|
||||||
v1StyleSourceDirInUse = v1KotlinSourceDir,
|
KotlinToolingDiagnostics.SourceSetLayoutV1StyleDirUsageWarning(
|
||||||
v2StyleSourceDirToUse = target.project.file("src/${kotlinSourceSet.name}/kotlin")
|
v1KotlinSourceDir.toPath().relativeTo(rootDirPath).toString(),
|
||||||
|
layout.name,
|
||||||
|
v2SourceDirToUse.toPath().relativeTo(rootDirPath).toString()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class V1StyleSourceDirUsageDiagnostic(
|
|
||||||
private val layout: KotlinAndroidSourceSetLayout,
|
|
||||||
val v1StyleSourceDirInUse: File,
|
|
||||||
val v2StyleSourceDirToUse: File
|
|
||||||
) : KotlinAndroidSourceSetLayoutChecker.Diagnostic {
|
|
||||||
override val message: String
|
|
||||||
get() = """
|
|
||||||
Found used source directory $v1StyleSourceDirInUse
|
|
||||||
This source directory was supported by: ${multiplatformAndroidSourceSetLayoutV1.name}
|
|
||||||
Current KotlinAndroidSourceSetLayout: ${layout.name}
|
|
||||||
New source directory is: $v2StyleSourceDirToUse
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-47
@@ -12,19 +12,14 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.MultiplatformLayoutV2AndroidStyleSourceDirUsageChecker.AndroidStyleSourceDirUsageDiagnostic
|
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.V1StyleSourceDirUsageDiagnostic
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.findAndroidSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.findAndroidSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
|
||||||
import org.jetbrains.kotlin.gradle.util.*
|
import org.jetbrains.kotlin.gradle.util.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertEquals
|
|
||||||
import kotlin.test.fail
|
|
||||||
|
|
||||||
class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
||||||
|
|
||||||
private val diagnosticsReporter = TestDiagnosticsReporter()
|
|
||||||
|
|
||||||
private fun buildMinimalAndroidMultiplatformProject(): ProjectInternal = buildProjectWithMPP {
|
private fun buildMinimalAndroidMultiplatformProject(): ProjectInternal = buildProjectWithMPP {
|
||||||
setMultiplatformAndroidSourceSetLayoutVersion(2)
|
setMultiplatformAndroidSourceSetLayoutVersion(2)
|
||||||
plugins.apply(LibraryPlugin::class.java)
|
plugins.apply(LibraryPlugin::class.java)
|
||||||
@@ -36,14 +31,12 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Project.checkCreatedSourceSets(
|
private fun Project.checkCreatedSourceSets() {
|
||||||
diagnosticsReporter: TestDiagnosticsReporter = this@MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest.diagnosticsReporter
|
|
||||||
) {
|
|
||||||
/* Invoke checkers on all source sets */
|
/* Invoke checkers on all source sets */
|
||||||
project.multiplatformExtension.sourceSets.forEach { kotlinSourceSet ->
|
project.multiplatformExtension.sourceSets.forEach { kotlinSourceSet ->
|
||||||
val androidSourceSet = project.findAndroidSourceSet(kotlinSourceSet) ?: return@forEach
|
val androidSourceSet = project.findAndroidSourceSet(kotlinSourceSet) ?: return@forEach
|
||||||
multiplatformAndroidSourceSetLayoutV2.checker.checkCreatedSourceSet(
|
multiplatformAndroidSourceSetLayoutV2.checker.checkCreatedSourceSet(
|
||||||
diagnosticReporter = diagnosticsReporter,
|
diagnosticsCollector = project.kotlinToolingDiagnosticsCollector,
|
||||||
target = project.multiplatformExtension.androidTarget(),
|
target = project.multiplatformExtension.androidTarget(),
|
||||||
layout = multiplatformAndroidSourceSetLayoutV2,
|
layout = multiplatformAndroidSourceSetLayoutV2,
|
||||||
kotlinSourceSet = kotlinSourceSet,
|
kotlinSourceSet = kotlinSourceSet,
|
||||||
@@ -63,10 +56,7 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
|||||||
|
|
||||||
/* Invoke checkers on all source sets */
|
/* Invoke checkers on all source sets */
|
||||||
project.checkCreatedSourceSets()
|
project.checkCreatedSourceSets()
|
||||||
|
project.checkDiagnostics("kt53709AndroidTest_kotlinInUse")
|
||||||
val diagnostic = assertIsInstance<AndroidStyleSourceDirUsageDiagnostic>(diagnosticsReporter.assertSingleWarning())
|
|
||||||
assertEquals(androidTestKotlinSourceDir, diagnostic.androidStyleSourceDirInUse)
|
|
||||||
assertEquals(project.file("src/androidInstrumentedTest/kotlin"), diagnostic.kotlinStyleSourceDirToUse)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -80,25 +70,7 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
|||||||
project.evaluate()
|
project.evaluate()
|
||||||
|
|
||||||
project.checkCreatedSourceSets()
|
project.checkCreatedSourceSets()
|
||||||
|
project.checkDiagnostics("androidStyleSourceDirUsage")
|
||||||
val warnings = diagnosticsReporter.warnings
|
|
||||||
if (warnings.size != 2) fail("Expected exactly two warnings emitted. Found $warnings")
|
|
||||||
|
|
||||||
val androidMainWarning = warnings.filterIsInstance<AndroidStyleSourceDirUsageDiagnostic>()
|
|
||||||
.find { warning -> warning.androidStyleSourceDirInUse == androidStyleMain }
|
|
||||||
?: fail("Missing warning for '$androidStyleMain'. Found $warnings")
|
|
||||||
|
|
||||||
assertEquals(
|
|
||||||
project.file("src/androidMain/kotlin"), androidMainWarning.kotlinStyleSourceDirToUse
|
|
||||||
)
|
|
||||||
|
|
||||||
val androidUnitTestWarning = warnings.filterIsInstance<AndroidStyleSourceDirUsageDiagnostic>()
|
|
||||||
.find { warning -> warning.androidStyleSourceDirInUse == androidStyleUnitTest }
|
|
||||||
?: fail("Missing warning for '$androidStyleUnitTest'. Found $warnings")
|
|
||||||
|
|
||||||
assertEquals(
|
|
||||||
project.file("src/androidUnitTest/kotlin"), androidUnitTestWarning.kotlinStyleSourceDirToUse
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -115,9 +87,7 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
|||||||
project.evaluate()
|
project.evaluate()
|
||||||
|
|
||||||
project.checkCreatedSourceSets()
|
project.checkCreatedSourceSets()
|
||||||
|
project.checkDiagnostics("androidStyleSourceDirUsageNoWarn")
|
||||||
val warnings = diagnosticsReporter.warnings
|
|
||||||
if (warnings.isNotEmpty()) fail("Expected no warnings emitted. Found $warnings")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -127,15 +97,6 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest {
|
|||||||
v1StyleInstrumentedTest.mkdirs()
|
v1StyleInstrumentedTest.mkdirs()
|
||||||
project.evaluate()
|
project.evaluate()
|
||||||
project.checkCreatedSourceSets()
|
project.checkCreatedSourceSets()
|
||||||
|
project.checkDiagnostics("v1LayoutStyleSourceDirUsage")
|
||||||
val warning = assertIsInstance<V1StyleSourceDirUsageDiagnostic>(diagnosticsReporter.assertSingleWarning())
|
|
||||||
|
|
||||||
assertEquals(
|
|
||||||
v1StyleInstrumentedTest, warning.v1StyleSourceDirInUse,
|
|
||||||
)
|
|
||||||
|
|
||||||
assertEquals(
|
|
||||||
project.file("src/androidInstrumentedTest/kotlin"), warning.v2StyleSourceDirToUse
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2022 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.unitTests.sources.android
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.KotlinAndroidSourceSetLayoutChecker
|
|
||||||
import kotlin.test.fail
|
|
||||||
|
|
||||||
internal class TestDiagnosticsReporter : KotlinAndroidSourceSetLayoutChecker.DiagnosticReporter {
|
|
||||||
|
|
||||||
class ErrorDiagnosticException(diagnostic: KotlinAndroidSourceSetLayoutChecker.Diagnostic) :
|
|
||||||
KotlinAndroidSourceSetLayoutChecker.ProjectMisconfiguredException(diagnostic.message)
|
|
||||||
|
|
||||||
private val _errors = mutableListOf<KotlinAndroidSourceSetLayoutChecker.Diagnostic>()
|
|
||||||
|
|
||||||
private val _warnings = mutableListOf<KotlinAndroidSourceSetLayoutChecker.Diagnostic>()
|
|
||||||
|
|
||||||
val errors get() = _errors.toList()
|
|
||||||
|
|
||||||
val warnings get() = _warnings.toList()
|
|
||||||
|
|
||||||
override fun error(diagnostic: KotlinAndroidSourceSetLayoutChecker.Diagnostic): Nothing {
|
|
||||||
_errors.add(diagnostic)
|
|
||||||
throw ErrorDiagnosticException(diagnostic)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun warning(diagnostic: KotlinAndroidSourceSetLayoutChecker.Diagnostic) {
|
|
||||||
_warnings.add(diagnostic)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun TestDiagnosticsReporter.assertSingleWarning(): KotlinAndroidSourceSetLayoutChecker.Diagnostic {
|
|
||||||
if (errors.isNotEmpty()) fail("Expected just a single warning, but found errors: $errors")
|
|
||||||
if (warnings.isEmpty()) fail("Expected a single warning, but found none!")
|
|
||||||
if (warnings.size > 1) fail("Expected a single warning, but found multiple: $warnings")
|
|
||||||
return warnings.first()
|
|
||||||
}
|
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
[AndroidStyleSourceDirUsageWarning | WARNING] Usage of 'Android Style' source directory src/main/kotlin is deprecated.
|
||||||
|
Use src/androidMain/kotlin instead.
|
||||||
|
|
||||||
|
To suppress this warning: put the following in your gradle.properties:
|
||||||
|
kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn=true
|
||||||
|
|
||||||
|
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
||||||
|
----
|
||||||
|
[AndroidStyleSourceDirUsageWarning | WARNING] Usage of 'Android Style' source directory src/test/kotlin is deprecated.
|
||||||
|
Use src/androidUnitTest/kotlin instead.
|
||||||
|
|
||||||
|
To suppress this warning: put the following in your gradle.properties:
|
||||||
|
kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn=true
|
||||||
|
|
||||||
|
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
[AndroidStyleSourceDirUsageWarning | WARNING] Usage of 'Android Style' source directory src/androidTest/kotlin is deprecated.
|
||||||
|
Use src/androidInstrumentedTest/kotlin instead.
|
||||||
|
|
||||||
|
To suppress this warning: put the following in your gradle.properties:
|
||||||
|
kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn=true
|
||||||
|
|
||||||
|
Learn more: https://kotlinlang.org/docs/whatsnew18.html#kotlin-multiplatform-a-new-android-source-set-layout
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
[SourceSetLayoutV1StyleDirUsageWarning | WARNING] Found used source directory src/androidAndroidTest/kotlin
|
||||||
|
This source directory was supported by: Multiplatform/Android-V1-SourceSetLayout
|
||||||
|
Current KotlinAndroidSourceSetLayout: Multiplatform/Android-V2-SourceSetLayout
|
||||||
|
New source directory is: src/androidInstrumentedTest/kotlin
|
||||||
Reference in New Issue
Block a user