[Gradle] Introduce KotlinToolingDiagnostics.DependencyDoesNotPhysicallyExist

Instead of silently ignoring the non-existing classpath entries, emit a warning to indicate possible project misconfiguration.
^KT-62101 Fixed
This commit is contained in:
Alexander.Likhachev
2024-02-08 20:31:42 +01:00
committed by Space Team
parent 5d98758645
commit c2e0c8b2e9
3 changed files with 18 additions and 2 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
@@ -26,7 +27,9 @@ class GeneralClasspathSnapshotIT : KGPBaseTest() {
} }
""".trimIndent() """.trimIndent()
) )
build("compileKotlin") build("compileKotlin") {
assertHasDiagnostic(KotlinToolingDiagnostics.DependencyDoesNotPhysicallyExist)
}
} }
} }
} }
@@ -71,7 +71,10 @@ abstract class BuildToolsApiClasspathEntrySnapshotTransform : TransformAction<Bu
checkVersionConsistency() checkVersionConsistency()
} }
val classpathEntryInputDirOrJar = inputArtifact.get().asFile val classpathEntryInputDirOrJar = inputArtifact.get().asFile
if (!classpathEntryInputDirOrJar.exists()) return if (!classpathEntryInputDirOrJar.exists()) {
reportDiagnostic(KotlinToolingDiagnostics.DependencyDoesNotPhysicallyExist(classpathEntryInputDirOrJar))
return
}
val snapshotOutputFile = outputs.file(classpathEntryInputDirOrJar.name.replace('.', '_') + "-snapshot.bin") val snapshotOutputFile = outputs.file(classpathEntryInputDirOrJar.name.replace('.', '_') + "-snapshot.bin")
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.* import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic.Severity.*
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1 import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2 import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
import java.io.File
@InternalKotlinGradlePluginApi // used in integration tests @InternalKotlinGradlePluginApi // used in integration tests
object KotlinToolingDiagnostics { object KotlinToolingDiagnostics {
@@ -702,6 +703,15 @@ object KotlinToolingDiagnostics {
""".trimIndent() """.trimIndent()
) )
} }
object DependencyDoesNotPhysicallyExist : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(dependency: File) = build(
"""
Unable to find the dependency at the location '${dependency.absolutePath}'.
Please make sure that the dependency exists at the specified location or ensure that dependency declarations are correct in your project.
""".trimIndent()
)
}
} }
private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String { private fun String.indentLines(nSpaces: Int = 4, skipFirstLine: Boolean = true): String {