diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootIndex.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootIndex.kt index 708299f0d2d..36a422853c9 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootIndex.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootIndex.kt @@ -16,7 +16,9 @@ class GradleBuildRootIndex(private val project: Project) : StandaloneScriptsUpda private val standaloneScripts: MutableSet get() = StandaloneScriptsStorage.getInstance(project)?.files ?: hashSetOf() - private val standaloneScriptRoots = mutableMapOf().apply { + private val standaloneScriptRoots = mutableMapOf() + + init { standaloneScripts.forEach(::updateRootsCache) } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleBuildRootIndexTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleBuildRootIndexTest.kt new file mode 100644 index 00000000000..31716aaee02 --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleBuildRootIndexTest.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2021 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.idea.scripting.gradle + +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.idea.script.AbstractScriptConfigurationLoadingTest +import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager +import org.jetbrains.kotlin.idea.scripting.gradle.settings.StandaloneScriptsStorage +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.plugins.gradle.settings.DistributionType +import org.jetbrains.plugins.gradle.settings.GradleProjectSettings +import org.jetbrains.plugins.gradle.util.GradleConstants +import java.io.File + +class GradleBuildRootIndexTest : AbstractScriptConfigurationLoadingTest() { + override fun setUpTestProject() { + val rootDir = File("idea/testData/script/definition/loading/gradle/") + + val settings: KtFile = copyFromTestdataToProject(File(rootDir, GradleConstants.KOTLIN_DSL_SETTINGS_FILE_NAME).path) + val prop: PsiFile = copyFromTestdataToProject(File(rootDir, "gradle.properties").path) + + val gradleCoreJar = createFileInProject("gradle/lib/gradle-core-1.0.0.jar") + val gradleWrapperProperties = createFileInProject("gradle/wrapper/gradle-wrapper.properties") + + val buildGradleKts = rootDir.walkTopDown().find { it.name == GradleConstants.KOTLIN_DSL_SCRIPT_NAME } + ?: error("Couldn't find main script") + configureScriptFile(rootDir.path, buildGradleKts) + val build = (myFile as? KtFile) ?: error("") + + val newProjectSettings = GradleProjectSettings() + newProjectSettings.gradleHome = gradleCoreJar.parentFile.parent + newProjectSettings.distributionType = DistributionType.LOCAL + newProjectSettings.externalProjectPath = settings.virtualFile.parent.path + + StandaloneScriptsStorage.getInstance(project)!!.files.add("standalone.kts") + + ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID).linkProject(newProjectSettings) + } + + fun `test standalone scripts on start`() { + assertNotNull(GradleBuildRootsManager.getInstance(project)) + } +} \ No newline at end of file diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListenerTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListenerTest.kt index 47725f324e2..e7725779ae9 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListenerTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListenerTest.kt @@ -66,18 +66,6 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() { ) } - private inline fun copyFromTestdataToProject(file: String): T { - createFileAndSyncDependencies(File(file)) - return (myFile as? T) ?: error("Couldn't configure project by $file") - } - - private fun createFileInProject(path: String): File { - val file = File(project.basePath, path) - file.parentFile.mkdirs() - file.createNewFile() - return file - } - fun testSectionChange() { assertAndLoadInitialConfiguration(testFiles.buildKts) diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationLoadingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationLoadingTest.kt index 8b644a32195..7d3d8d8a87e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationLoadingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationLoadingTest.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.core.script.configuration.testingBackgroundExec import org.jetbrains.kotlin.idea.core.script.configuration.utils.testScriptConfigurationNotification import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.KtFile +import java.io.File abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurationTest() { lateinit var scriptConfigurationManager: CompositeScriptConfigurationManager @@ -68,6 +69,18 @@ abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurat // do nothings } + protected inline fun copyFromTestdataToProject(file: String): T { + createFileAndSyncDependencies(File(file)) + return (myFile as? T) ?: error("Couldn't configure project by $file") + } + + protected fun createFileInProject(path: String): File { + val file = File(project.basePath, path) + file.parentFile.mkdirs() + file.createNewFile() + return file + } + protected fun assertAndDoAllBackgroundTasks() { assertDoAllBackgroundTaskAndDoWhileLoading { } }