Skip to content

Commit 4c61fb4

Browse files
Fixed NPE on StandaloneScriptRootsCache instantiation
Relates to ^EA-218043 #KTIJ-1137 Fixed Original commit: 1d63a1b48d480b958ff44676c42b698a8ca5f64a (cherry picked from commit 98ba379)
1 parent e148cbe commit 4c61fb4

File tree

4 files changed

+63
-13
lines changed

4 files changed

+63
-13
lines changed

idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootIndex.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ class GradleBuildRootIndex(private val project: Project) : StandaloneScriptsUpda
1616
private val standaloneScripts: MutableSet<String>
1717
get() = StandaloneScriptsStorage.getInstance(project)?.files ?: hashSetOf()
1818

19-
private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>().apply {
19+
private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>()
20+
21+
init {
2022
standaloneScripts.forEach(::updateRootsCache)
2123
}
2224

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package org.jetbrains.kotlin.idea.scripting.gradle
7+
8+
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
9+
import com.intellij.psi.PsiFile
10+
import org.jetbrains.kotlin.idea.script.AbstractScriptConfigurationLoadingTest
11+
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
12+
import org.jetbrains.kotlin.idea.scripting.gradle.settings.StandaloneScriptsStorage
13+
import org.jetbrains.kotlin.psi.KtFile
14+
import org.jetbrains.plugins.gradle.settings.DistributionType
15+
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
16+
import org.jetbrains.plugins.gradle.util.GradleConstants
17+
import java.io.File
18+
19+
class GradleBuildRootIndexTest : AbstractScriptConfigurationLoadingTest() {
20+
override fun setUpTestProject() {
21+
val rootDir = File("idea/testData/script/definition/loading/gradle/")
22+
23+
val settings: KtFile = copyFromTestdataToProject(File(rootDir, GradleConstants.KOTLIN_DSL_SETTINGS_FILE_NAME).path)
24+
val prop: PsiFile = copyFromTestdataToProject(File(rootDir, "gradle.properties").path)
25+
26+
val gradleCoreJar = createFileInProject("gradle/lib/gradle-core-1.0.0.jar")
27+
val gradleWrapperProperties = createFileInProject("gradle/wrapper/gradle-wrapper.properties")
28+
29+
val buildGradleKts = rootDir.walkTopDown().find { it.name == GradleConstants.KOTLIN_DSL_SCRIPT_NAME }
30+
?: error("Couldn't find main script")
31+
configureScriptFile(rootDir.path, buildGradleKts)
32+
val build = (myFile as? KtFile) ?: error("")
33+
34+
val newProjectSettings = GradleProjectSettings()
35+
newProjectSettings.gradleHome = gradleCoreJar.parentFile.parent
36+
newProjectSettings.distributionType = DistributionType.LOCAL
37+
newProjectSettings.externalProjectPath = settings.virtualFile.parent.path
38+
39+
StandaloneScriptsStorage.getInstance(project)!!.files.add("standalone.kts")
40+
41+
ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID).linkProject(newProjectSettings)
42+
}
43+
44+
fun `test standalone scripts on start`() {
45+
assertNotNull(GradleBuildRootsManager.getInstance(project))
46+
}
47+
}

idea/idea-gradle/tests/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptListenerTest.kt

-12
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,6 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() {
6666
)
6767
}
6868

69-
private inline fun <reified T : Any> copyFromTestdataToProject(file: String): T {
70-
createFileAndSyncDependencies(File(file))
71-
return (myFile as? T) ?: error("Couldn't configure project by $file")
72-
}
73-
74-
private fun createFileInProject(path: String): File {
75-
val file = File(project.basePath, path)
76-
file.parentFile.mkdirs()
77-
file.createNewFile()
78-
return file
79-
}
80-
8169
fun testSectionChange() {
8270
assertAndLoadInitialConfiguration(testFiles.buildKts)
8371

idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationLoadingTest.kt

+13
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.core.script.configuration.testingBackgroundExec
2020
import org.jetbrains.kotlin.idea.core.script.configuration.utils.testScriptConfigurationNotification
2121
import org.jetbrains.kotlin.idea.util.application.runWriteAction
2222
import org.jetbrains.kotlin.psi.KtFile
23+
import java.io.File
2324

2425
abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurationTest() {
2526
lateinit var scriptConfigurationManager: CompositeScriptConfigurationManager
@@ -68,6 +69,18 @@ abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurat
6869
// do nothings
6970
}
7071

72+
protected inline fun <reified T : Any> copyFromTestdataToProject(file: String): T {
73+
createFileAndSyncDependencies(File(file))
74+
return (myFile as? T) ?: error("Couldn't configure project by $file")
75+
}
76+
77+
protected fun createFileInProject(path: String): File {
78+
val file = File(project.basePath, path)
79+
file.parentFile.mkdirs()
80+
file.createNewFile()
81+
return file
82+
}
83+
7184
protected fun assertAndDoAllBackgroundTasks() {
7285
assertDoAllBackgroundTaskAndDoWhileLoading { }
7386
}

0 commit comments

Comments
 (0)