mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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:
committed by
intellij-monorepo-bot
parent
8ca8745e00
commit
693f04cd27
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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()
|
||||
+68
-1
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
+67
@@ -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", "")
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -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()
|
||||
+32
-146
@@ -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()
|
||||
)
|
||||
|
||||
+174
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
@@ -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")
|
||||
+8
@@ -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")
|
||||
Reference in New Issue
Block a user