[kotlin] K2: add test for navigation to .settings gradle convention plugin

#KTIJ-34533 Fixed


Merge-request: IJ-MR-165495
Merged-by: Vlad Koshkin <Vladislav.Koshkin@jetbrains.com>

GitOrigin-RevId: f5ca4c087f3491901a97aa273f37b090d6ba7023
This commit is contained in:
Vlad Koshkin
2025-06-18 00:08:40 +00:00
committed by intellij-monorepo-bot
parent 8ca8745e00
commit 693f04cd27
10 changed files with 385 additions and 164 deletions
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.ApiStatus.Internal
class GradlePluginReference(
private val myElement: PsiElement,
private val myRange: TextRange,
private val pluginId: String
private val pluginId: String,
) : SingleTargetReference(), PsiCompletableReference {
override fun getElement(): PsiElement = myElement
@@ -30,7 +30,7 @@ class GradlePluginReference(
override fun resolveSingleTarget(): Symbol? {
val searchScope = GlobalSearchScope.projectScope(myElement.project)
val pluginFile = findPrecompiledGroovyPlugin(searchScope)
?: findPrecompiledKotlinPlugin(searchScope)
?: findPrecompiledKotlinPlugin(searchScope, myElement.containingFile.name)
?: return null
return GradlePluginSymbol(pluginFile.path, pluginId)
}
@@ -43,14 +43,15 @@ class GradlePluginReference(
* Precompiled script plugins on Kotlin could have a package declaration. If plugin ID ([pluginId]) contains dots,
* probably they split file name and packages (directories, containing a file with plugin).
*/
private fun findPrecompiledKotlinPlugin(searchScope: GlobalSearchScope): VirtualFile? {
private fun findPrecompiledKotlinPlugin(searchScope: GlobalSearchScope, sourceFileName: String): VirtualFile? {
val leftParts = pluginId.split(".").toMutableList()
var fileName = ""
var lastPart = leftParts.removeLastOrNull()
while (lastPart != null) {
if (fileName.isEmpty()) {
fileName = "${lastPart}${pluginId.fileExtension}"
} else {
fileName = "${lastPart}${getFileExtension(pluginId, sourceFileName)}"
}
else {
fileName = "$lastPart.$fileName"
}
val file = findPrecompiledPlugin(fileName, searchScope, packageParts = leftParts)
@@ -61,14 +62,24 @@ class GradlePluginReference(
}
return null
}
private val String.fileExtension: String
get() = if (this.endsWith(".settings")) ".settings.gradle.kts" else ".gradle.kts"
/*
Return build logic plugin file extension according to pluginId and the file you navigating from.
You can navigate to .settings plugin only from 'settings.gradle.kts' or 'custom.settings.gradle.kts'.
*/
private fun getFileExtension(pluginId: String, sourceFileName: String): String =
if (pluginId.endsWith(".settings")
&& (sourceFileName == "settings.gradle.kts" || sourceFileName.endsWith(".settings.gradle.kts"))) {
".settings.gradle.kts"
}
else {
".gradle.kts"
}
private fun findPrecompiledPlugin(
fileName: String,
searchScope: GlobalSearchScope,
packageParts: List<String> = emptyList()
packageParts: List<String> = emptyList(),
): VirtualFile? {
val files = FilenameIndex.getVirtualFilesByName(fileName, searchScope)
for (file in files) {
@@ -1,7 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.codeInsight.gradle
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest
import org.jetbrains.kotlin.gradle.KotlinGradleGotoDeclarationTest
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
import org.jetbrains.kotlin.idea.test.UseK1PluginMode
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleProjectTestApplication
@@ -9,4 +9,4 @@ import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradlePro
@UseK1PluginMode
@GradleProjectTestApplication
@AssertKotlinPluginMode
class K1GradleNavigationTest : AbstractKotlinGradleNavigationTest()
class K1GradleNavigationTest : KotlinGradleGotoDeclarationTest()
@@ -4,13 +4,16 @@ package org.jetbrains.kotlin.idea.k2.codeInsight.gradle
import com.intellij.testFramework.TestDataPath
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.AbstractGradleCodeInsightTest
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest.Companion.GRADLE_COMPOSITE_BUILD_FIXTURE
import org.jetbrains.kotlin.idea.base.test.TestRoot
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
import org.jetbrains.kotlin.idea.test.UseK2PluginMode
import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.plugins.gradle.frameworkSupport.GradleDsl
import org.jetbrains.plugins.gradle.testFramework.GradleTestFixtureBuilder
import org.jetbrains.plugins.gradle.testFramework.annotations.BaseGradleVersionSource
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleProjectTestApplication
import org.jetbrains.plugins.gradle.testFramework.util.withBuildFile
import org.jetbrains.plugins.gradle.testFramework.util.withSettingsFile
import org.junit.jupiter.params.ParameterizedTest
@UseK2PluginMode
@@ -26,4 +29,68 @@ class KotlinGradleCompositeBuildFindUsagesTest : AbstractGradleCodeInsightTest()
fun testPropertyFromCustomPluginUsageInBuildGradleKts(gradleVersion: GradleVersion) {
verifyFindUsages(gradleVersion, GRADLE_COMPOSITE_BUILD_FIXTURE)
}
companion object {
val GRADLE_COMPOSITE_BUILD_FIXTURE: GradleTestFixtureBuilder =
GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
includeBuild("not-build-src")
}
withBuildFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
withPlugin("some-custom-plugin")
}
withFile(
"not-build-src/src/main/kotlin/utils.kt",
"""
import org.gradle.api.Plugin
import org.gradle.api.Project
class SomeCustomPlugin: Plugin<Project> {
override fun apply(target: Project) {
// no-op
}
}
const val kotlinStdLib = "..."
""".trimIndent()
)
withSettingsFile(gradleVersion, "not-build-src", gradleDsl = GradleDsl.KOTLIN) {
addCode(
"""
pluginManagement {
repositories {
gradlePluginPortal()
}
}
""".trimIndent()
)
}
withBuildFile(gradleVersion, "not-build-src", gradleDsl = GradleDsl.KOTLIN) {
withPrefix {
code(
"""
plugins {
id("java-gradle-plugin")
`kotlin-dsl`
}
""".trimIndent()
)
}
withMavenCentral()
withPostfix {
code(
"""
gradlePlugin {
plugins.register("some-custom-plugin") {
id = "some-custom-plugin"
implementationClass = "SomeCustomPlugin"
}
}
""".trimIndent()
)
}
}
}
}
}
@@ -1,5 +1,5 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle.highlighting
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleHighlightingTest
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
@@ -0,0 +1,67 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle.navigation
import com.intellij.testFramework.TestDataPath
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest
import org.jetbrains.kotlin.idea.base.test.TestRoot
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
import org.jetbrains.kotlin.idea.test.UseK2PluginMode
import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.plugins.gradle.frameworkSupport.GradleDsl
import org.jetbrains.plugins.gradle.testFramework.GradleTestFixtureBuilder
import org.jetbrains.plugins.gradle.testFramework.annotations.BaseGradleVersionSource
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleProjectTestApplication
import org.jetbrains.plugins.gradle.testFramework.util.withBuildFile
import org.jetbrains.plugins.gradle.testFramework.util.withSettingsFile
import org.junit.jupiter.params.ParameterizedTest
@UseK2PluginMode
@GradleProjectTestApplication
@AssertKotlinPluginMode
@TestRoot("idea/tests/testData/")
@TestDataPath("\$CONTENT_ROOT")
@TestMetadata("../../../idea/tests/testData/gradle/navigation/composite")
class K2GradleBuildLogicPluginNavigationTest : AbstractKotlinGradleNavigationTest() {
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("testNavigationToSettingsPluginFromSettingsGradleKts.test")
fun testNavigationToSettingsPluginFromSettingsGradleKts(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("testNavigationToSettingsPluginNotWorkingFromBuildGradleKts.test")
fun testNavigationToSettingsPluginNotWorkingFromBuildLogicGradleKts(gradleVersion: GradleVersion) {
verifyFileShouldStayTheSame(gradleVersion)
}
override val myFixture = FIXTURE_WITH_SETTINGS_PLUGIN
companion object {
private val FIXTURE_WITH_SETTINGS_PLUGIN: GradleTestFixtureBuilder =
GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
}
withBuildFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
"""
plugins {
`kotlin-dsl`
}
""".trimIndent()
}
withSettingsFile(gradleVersion, "custom", gradleDsl = GradleDsl.KOTLIN) {}
withBuildFile(gradleVersion, "custom", gradleDsl = GradleDsl.KOTLIN) {
"""
plugins {
`kotlin-dsl`
}
""".trimIndent()
}
withFile("custom/src/main/kotlin/custom.settings.settings.gradle.kts", "")
}
}
}
@@ -1,7 +1,7 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle.navigation
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest
import org.jetbrains.kotlin.gradle.KotlinGradleGotoDeclarationTest
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
import org.jetbrains.kotlin.idea.test.UseK2PluginMode
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleProjectTestApplication
@@ -9,4 +9,4 @@ import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradlePro
@UseK2PluginMode
@GradleProjectTestApplication
@AssertKotlinPluginMode
class K2GradleNavigationTest : AbstractKotlinGradleNavigationTest()
class K2GradleNavigationTest : KotlinGradleGotoDeclarationTest()
@@ -3,117 +3,35 @@ package org.jetbrains.kotlin.gradle
import com.intellij.openapi.actionSystem.IdeActions
import com.intellij.openapi.application.runReadAction
import com.intellij.testFramework.TestDataPath
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.idea.base.plugin.useK2Plugin
import org.jetbrains.kotlin.idea.base.test.IgnoreTests
import org.jetbrains.kotlin.idea.base.test.TestRoot
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.plugins.gradle.frameworkSupport.GradleDsl
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings
import org.jetbrains.plugins.gradle.testFramework.GradleTestFixtureBuilder
import org.jetbrains.plugins.gradle.testFramework.annotations.BaseGradleVersionSource
import org.jetbrains.plugins.gradle.testFramework.util.withBuildFile
import org.jetbrains.plugins.gradle.testFramework.util.withSettingsFile
import org.junit.jupiter.params.ParameterizedTest
import kotlin.test.assertEquals
import kotlin.test.assertTrue
private const val EXPECTED_NAVIGATION_DIRECTIVE = "EXPECTED-NAVIGATION-SUBSTRING"
@TestRoot("idea/tests/testData/")
@TestDataPath("\$CONTENT_ROOT")
@TestMetadata("../../../idea/tests/testData/gradle/navigation/")
abstract class AbstractKotlinGradleNavigationTest : AbstractGradleCodeInsightTest() {
private val actionName: String get() = IdeActions.ACTION_GOTO_DECLARATION
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectDependency.test")
fun testProjectDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
abstract val myFixture: GradleTestFixtureBuilder
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectKmpDependency.test")
fun testProjectKmpDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSimpleModule.test")
fun testProjectAccessorSimpleModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSubSubModule.test")
fun testProjectAccessorSubSubModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectFullAccessorSubSubModule.test")
fun testProjectFullAccessorSubSubModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSubModuleInTheMiddle.test")
fun testProjectAccessorSubModuleInTheMiddle(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("librarySourceDependency.test")
fun testLibrarySourceDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inGroovy.test")
fun testPluginPrecompiledInGroovy(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlin.test")
fun testPluginPrecompiledInKotlin(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlinWithPackage.test")
fun testPluginPrecompiledInKotlinWithPackage(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlinLocatedInJavaDir.test")
fun testPluginPrecompiledInKotlinLocatedInJavaDir(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
private fun verifyNavigationFromCaretToExpected(gradleVersion: GradleVersion) {
protected fun verifyNavigationFromCaretToExpected(gradleVersion: GradleVersion) {
val systemSettings = GradleSystemSettings.getInstance()
systemSettings.isDownloadSources = true
test(gradleVersion, GRADLE_KMP_KOTLIN_FIXTURE) {
test(gradleVersion, myFixture) {
val mainFileContent = mainTestDataFile
val mainFile = mainTestDataPsiFile
val expectedNavigationText =
InTextDirectivesUtils.findStringWithPrefixes(mainFileContent.content, "// \"$EXPECTED_NAVIGATION_DIRECTIVE\": ") ?: error("$EXPECTED_NAVIGATION_DIRECTIVE is not specified")
InTextDirectivesUtils.findStringWithPrefixes(mainFileContent.content, "// \"$EXPECTED_NAVIGATION_DIRECTIVE\": ")
?: error("$EXPECTED_NAVIGATION_DIRECTIVE is not specified")
codeInsightFixture.configureFromExistingVirtualFile(mainFile.virtualFile)
assertTrue("<caret> is not present") {
@@ -134,61 +52,33 @@ abstract class AbstractKotlinGradleNavigationTest : AbstractGradleCodeInsightTes
}
}
companion object {
val GRADLE_COMPOSITE_BUILD_FIXTURE: GradleTestFixtureBuilder = GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
includeBuild("not-build-src")
}
withBuildFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
withPlugin("some-custom-plugin")
}
withFile(
"not-build-src/src/main/kotlin/utils.kt",
"""
import org.gradle.api.Plugin
import org.gradle.api.Project
protected fun verifyFileShouldStayTheSame(gradleVersion: GradleVersion, fixture: GradleTestFixtureBuilder = myFixture) {
val systemSettings = GradleSystemSettings.getInstance()
systemSettings.isDownloadSources = true
class SomeCustomPlugin: Plugin<Project> {
override fun apply(target: Project) {
// no-op
}
}
test(gradleVersion, fixture) {
val mainFile = mainTestDataPsiFile
const val kotlinStdLib = "..."
""".trimIndent()
)
withSettingsFile(gradleVersion, "not-build-src", gradleDsl = GradleDsl.KOTLIN) {
addCode("""
pluginManagement {
repositories {
gradlePluginPortal()
}
}
""".trimIndent())
codeInsightFixture.configureFromExistingVirtualFile(mainFile.virtualFile)
val textBefore = document.text
assertTrue("<caret> is not present") {
val caretOffset = runReadAction { codeInsightFixture.caretOffset }
caretOffset != 0
}
withBuildFile(gradleVersion, "not-build-src", gradleDsl = GradleDsl.KOTLIN) {
withPrefix {
code("""
plugins {
id("java-gradle-plugin")
`kotlin-dsl`
}
""".trimIndent())
}
withMavenCentral()
withPostfix {
code("""
gradlePlugin {
plugins.register("some-custom-plugin") {
id = "some-custom-plugin"
implementationClass = "SomeCustomPlugin"
}
}
""".trimIndent())
}
codeInsightFixture.performEditorAction(actionName)
val textAfter = document.text
IgnoreTests.runTestIfNotDisabledByFileDirective(
mainFile.virtualFile.toNioPath(),
if (useK2Plugin == true) IgnoreTests.DIRECTIVES.IGNORE_K2 else IgnoreTests.DIRECTIVES.IGNORE_K1
) {
assertEquals(textBefore, textAfter, "Navigation should not work")
}
}
}
companion object {
val GRADLE_KMP_KOTLIN_FIXTURE: GradleTestFixtureBuilder = GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
@@ -215,8 +105,7 @@ abstract class AbstractKotlinGradleNavigationTest : AbstractGradleCodeInsightTes
withMavenCentral()
}
withFile(
"gradle/libs.versions.toml",
/* language=TOML */
"gradle/libs.versions.toml",/* language=TOML */
"""
[libraries]
some_test-library = { module = "org.junit.jupiter:junit-jupiter" }
@@ -228,14 +117,12 @@ abstract class AbstractKotlinGradleNavigationTest : AbstractGradleCodeInsightTes
""".trimIndent()
)
withFile(
"gradle.properties",
"""
"gradle.properties", """
kotlin.code.style=official
""".trimIndent()
)
withFile(
"buildSrc/src/main/kotlin/MyTask.kt",
"""
"buildSrc/src/main/kotlin/MyTask.kt", """
""".trimIndent()
)
@@ -257,8 +144,7 @@ abstract class AbstractKotlinGradleNavigationTest : AbstractGradleCodeInsightTes
withMavenCentral()
}
withFile(
"gradle.properties",
"""
"gradle.properties", """
kotlin.code.style=official
""".trimIndent()
)
@@ -0,0 +1,174 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.gradle
import com.intellij.testFramework.TestDataPath
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.idea.base.test.TestRoot
import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.plugins.gradle.frameworkSupport.GradleDsl
import org.jetbrains.plugins.gradle.testFramework.GradleTestFixtureBuilder
import org.jetbrains.plugins.gradle.testFramework.annotations.BaseGradleVersionSource
import org.jetbrains.plugins.gradle.testFramework.util.withBuildFile
import org.jetbrains.plugins.gradle.testFramework.util.withSettingsFile
import org.junit.jupiter.params.ParameterizedTest
@TestRoot("idea/tests/testData/")
@TestDataPath("\$CONTENT_ROOT")
@TestMetadata("../../../idea/tests/testData/gradle/navigation/")
abstract class KotlinGradleGotoDeclarationTest : AbstractKotlinGradleNavigationTest() {
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectDependency.test")
fun testProjectDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectKmpDependency.test")
fun testProjectKmpDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSimpleModule.test")
fun testProjectAccessorSimpleModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSubSubModule.test")
fun testProjectAccessorSubSubModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectFullAccessorSubSubModule.test")
fun testProjectFullAccessorSubSubModule(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("projectAccessorSubModuleInTheMiddle.test")
fun testProjectAccessorSubModuleInTheMiddle(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("librarySourceDependency.test")
fun testLibrarySourceDependency(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inGroovy.test")
fun testPluginPrecompiledInGroovy(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlin.test")
fun testPluginPrecompiledInKotlin(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlinWithPackage.test")
fun testPluginPrecompiledInKotlinWithPackage(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
@ParameterizedTest
@BaseGradleVersionSource
@TestMetadata("pluginPrecompiled/inKotlinLocatedInJavaDir.test")
fun testPluginPrecompiledInKotlinLocatedInJavaDir(gradleVersion: GradleVersion) {
verifyNavigationFromCaretToExpected(gradleVersion)
}
override val myFixture = GRADLE_KMP_KOTLIN_FIXTURE
companion object {
val GRADLE_KMP_KOTLIN_FIXTURE: GradleTestFixtureBuilder = GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
include("module1", ":module1:a-module11", ":module1:a-module11:module111")
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
}
withBuildFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
withKotlinMultiplatformPlugin()
withMavenCentral()
}
withBuildFile(gradleVersion, "buildSrc", gradleDsl = GradleDsl.KOTLIN) {
withKotlinDsl()
}
withBuildFile(gradleVersion, "module1", gradleDsl = GradleDsl.KOTLIN) {
withKotlinMultiplatformPlugin()
withMavenCentral()
}
withBuildFile(gradleVersion, "module1/a-module11", gradleDsl = GradleDsl.KOTLIN) {
withKotlinMultiplatformPlugin()
withMavenCentral()
}
withBuildFile(gradleVersion, "module1/a-module11/module111", gradleDsl = GradleDsl.KOTLIN) {
withKotlinMultiplatformPlugin()
withMavenCentral()
}
withFile(
"gradle/libs.versions.toml",
/* language=TOML */
"""
[libraries]
some_test-library = { module = "org.junit.jupiter:junit-jupiter" }
[plugins]
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin"}
[versions]
test_library-version = "1.0"
kotlin = "1.9.24"
""".trimIndent()
)
withFile(
"gradle.properties",
"""
kotlin.code.style=official
""".trimIndent()
)
withFile(
"buildSrc/src/main/kotlin/MyTask.kt",
"""
""".trimIndent()
)
withDirectory("src/main/kotlin")
}
val GRADLE_KOTLIN_FIXTURE: GradleTestFixtureBuilder = GradleTestFixtureBuilder.create("GradleKotlinFixture") { gradleVersion ->
withSettingsFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
setProjectName("GradleKotlinFixture")
include(":module1")
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
}
withBuildFile(gradleVersion, gradleDsl = GradleDsl.KOTLIN) {
withKotlinDsl()
withMavenCentral()
}
withBuildFile(gradleVersion, "module1", gradleDsl = GradleDsl.KOTLIN) {
withKotlinDsl()
withMavenCentral()
}
withFile(
"gradle.properties",
"""
kotlin.code.style=official
""".trimIndent()
)
}
}
}
@@ -0,0 +1,8 @@
// FILE: settings.gradle.kts
// "EXPECTED-NAVIGATION-SUBSTRING": "println("custom")"
plugins {
id("custom<caret>.settings")
}
// FILE: custom/src/main/kotlin/custom.settings.settings.gradle.kts
println("custom")
@@ -0,0 +1,8 @@
// FILE: build.gradle.kts
// "EXPECTED-NAVIGATION-SUBSTRING": "println("custom")"
plugins {
id("custom<caret>.settings")
}
// FILE: custom/src/main/kotlin/custom.settings.settings.gradle.kts
println("custom")