Fixed NPE on StandaloneScriptRootsCache instantiation
Relates to ^EA-218043 #KTIJ-1137 Fixed Original commit: 1d63a1b48d480b958ff44676c42b698a8ca5f64a
This commit is contained in:
committed by
Space
parent
45b17120ad
commit
98ba379e07
+3
-1
@@ -16,7 +16,9 @@ class GradleBuildRootIndex(private val project: Project) : StandaloneScriptsUpda
|
|||||||
private val standaloneScripts: MutableSet<String>
|
private val standaloneScripts: MutableSet<String>
|
||||||
get() = StandaloneScriptsStorage.getInstance(project)?.files ?: hashSetOf()
|
get() = StandaloneScriptsStorage.getInstance(project)?.files ?: hashSetOf()
|
||||||
|
|
||||||
private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>().apply {
|
private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>()
|
||||||
|
|
||||||
|
init {
|
||||||
standaloneScripts.forEach(::updateRootsCache)
|
standaloneScripts.forEach(::updateRootsCache)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+47
@@ -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))
|
||||||
|
}
|
||||||
|
}
|
||||||
-12
@@ -66,18 +66,6 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <reified T : Any> 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() {
|
fun testSectionChange() {
|
||||||
assertAndLoadInitialConfiguration(testFiles.buildKts)
|
assertAndLoadInitialConfiguration(testFiles.buildKts)
|
||||||
|
|
||||||
|
|||||||
@@ -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.core.script.configuration.utils.testScriptConfigurationNotification
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurationTest() {
|
abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurationTest() {
|
||||||
lateinit var scriptConfigurationManager: CompositeScriptConfigurationManager
|
lateinit var scriptConfigurationManager: CompositeScriptConfigurationManager
|
||||||
@@ -68,6 +69,18 @@ abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurat
|
|||||||
// do nothings
|
// do nothings
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected inline fun <reified T : Any> 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() {
|
protected fun assertAndDoAllBackgroundTasks() {
|
||||||
assertDoAllBackgroundTaskAndDoWhileLoading { }
|
assertDoAllBackgroundTaskAndDoWhileLoading { }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user