[Gradle] Validation for definitionFile and packageName in cinterop
^KT-62800 Fixed
This commit is contained in:
committed by
Space Team
parent
cef46a9dd1
commit
7e61f9cb42
+18
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.native
|
||||
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.jetbrains.kotlin.gradle.util.replaceText
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.condition.OS
|
||||
import kotlin.io.path.createDirectories
|
||||
@@ -95,6 +96,23 @@ class CinteropIT : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("KT-62800: validation fails if neither definitionFile nor packageName was specified")
|
||||
@GradleTest
|
||||
fun cinteropWithoutDefinitionFileAndPackageName(gradleVersion: GradleVersion) {
|
||||
nativeProject("cinterop-with-header", gradleVersion = gradleVersion) {
|
||||
buildGradleKts.replaceText("packageName(\"cinterop\")", "")
|
||||
buildAndFail(":cinteropCinteropNative") {
|
||||
assertOutputContains(
|
||||
"""
|
||||
|For the Cinterop task, either the `definitionFile` or `packageName` parameter must be specified, however, neither has been provided.
|
||||
|
|
||||
|More info here: https://kotlinlang.org/docs/multiplatform-dsl-reference.html#cinterops
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("KT-62800: check that optional .def file in cinterop works well with configuration cache")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_8_1) // Gradle supports checking file existence with configuration cache only since 8.1 version
|
||||
@GradleTest
|
||||
|
||||
+12
@@ -679,6 +679,18 @@ object KotlinToolingDiagnostics {
|
||||
}
|
||||
}
|
||||
|
||||
object CInteropRequiredParametersNotSpecifiedError : ToolingDiagnosticFactory(ERROR) {
|
||||
operator fun invoke(): ToolingDiagnostic {
|
||||
return build(
|
||||
"""
|
||||
|For the Cinterop task, either the `definitionFile` or `packageName` parameter must be specified, however, neither has been provided.
|
||||
|
|
||||
|More info here: https://kotlinlang.org/docs/multiplatform-dsl-reference.html#cinterops
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
object IncorrectNativeDependenciesWarning : ToolingDiagnosticFactory(WARNING) {
|
||||
operator fun invoke(targetName: String, compilationName: String, dependencies: List<String>) = build(
|
||||
"""
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2024 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.diagnostics.checkers
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.await
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.reportDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||
|
||||
/**
|
||||
* This class is made for checking if the required parameters for the CInteropProcess task are specified in the Gradle project.
|
||||
*/
|
||||
internal object CInteropInputChecker : KotlinGradleProjectChecker {
|
||||
|
||||
override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
|
||||
// We use "Ready for Execution" stage to ensure that any task parameters are finalized prior to execution.
|
||||
KotlinPluginLifecycle.Stage.ReadyForExecution.await()
|
||||
|
||||
project.tasks.withType(CInteropProcess::class.java).configureEach {
|
||||
if (!it.definitionFile.isPresent && it.packageName.isNullOrBlank()) {
|
||||
project.reportDiagnostic(KotlinToolingDiagnostics.CInteropRequiredParametersNotSpecifiedError())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
@@ -128,6 +128,7 @@ internal fun Project.registerKotlinPluginExtensions() {
|
||||
register(project, InternalGradlePropertiesUsageChecker)
|
||||
register(project, WasmSourceSetsNotFoundChecker)
|
||||
register(project, DuplicateSourceSetChecker)
|
||||
register(project, CInteropInputChecker)
|
||||
register(project, IncorrectNativeDependenciesChecker)
|
||||
|
||||
if (isMultiplatform) {
|
||||
|
||||
+1
@@ -1200,4 +1200,5 @@ abstract class CInteropProcess @Inject internal constructor(params: Params) :
|
||||
).run(args)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user