Skip to content

Commit

Permalink
Fixed NPE on StandaloneScriptRootsCache instantiation
Browse files Browse the repository at this point in the history
Relates to ^EA-218043
#KTIJ-1137 Fixed

Original commit: 1d63a1b48d480b958ff44676c42b698a8ca5f64a

(cherry picked from commit 98ba379)
  • Loading branch information
vladimirdolzhenko committed Feb 16, 2021
1 parent e148cbe commit 4c61fb4
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ class GradleBuildRootIndex(private val project: Project) : StandaloneScriptsUpda
private val standaloneScripts: MutableSet<String>
get() = StandaloneScriptsStorage.getInstance(project)?.files ?: hashSetOf()

private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>().apply {
private val standaloneScriptRoots = mutableMapOf<String, GradleBuildRoot?>()

init {
standaloneScripts.forEach(::updateRootsCache)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
assertAndLoadInitialConfiguration(testFiles.buildKts)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -68,6 +69,18 @@ abstract class AbstractScriptConfigurationLoadingTest : AbstractScriptConfigurat
// 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() {
assertDoAllBackgroundTaskAndDoWhileLoading { }
}
Expand Down

0 comments on commit 4c61fb4

Please sign in to comment.