Changes inside initscript and pluginManagement blocks should invalidate script configuration

^KT-35129 Fixed
This commit is contained in:
Natalia Selezneva
2019-12-02 12:51:13 +03:00
parent d68c3584f2
commit 13b4e8716c
2 changed files with 20 additions and 2 deletions
@@ -20,6 +20,8 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScriptInitializer import org.jetbrains.kotlin.psi.KtScriptInitializer
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
private val sections = arrayListOf("buildscript", "plugins", "initscript", "pluginManagement")
fun isGradleKotlinScript(virtualFile: VirtualFile) = virtualFile.name.endsWith(".gradle.kts") fun isGradleKotlinScript(virtualFile: VirtualFile) = virtualFile.name.endsWith(".gradle.kts")
fun getGradleScriptInputsStamp( fun getGradleScriptInputsStamp(
@@ -38,8 +40,8 @@ fun getGradleScriptInputsStamp(
?.getChildrenOfType<KtScriptInitializer>() ?.getChildrenOfType<KtScriptInitializer>()
?.forEach { ?.forEach {
val call = it.children.singleOrNull() as? KtCallExpression val call = it.children.singleOrNull() as? KtCallExpression
val callRef = call?.firstChild?.text val callRef = call?.firstChild?.text ?: return@forEach
if (callRef == "buildscript" || callRef == "plugins") { if (callRef in sections) {
result.append(callRef) result.append(callRef)
val lambda = call.lambdaArguments.singleOrNull() val lambda = call.lambdaArguments.singleOrNull()
lambda?.accept(object : PsiRecursiveElementVisitor(false) { lambda?.accept(object : PsiRecursiveElementVisitor(false) {
@@ -71,6 +71,22 @@ class GradleScriptInputsWatcherTest : AbstractScriptConfigurationLoadingTest() {
assertConfigurationUpToDate(testFiles.buildKts) assertConfigurationUpToDate(testFiles.buildKts)
} }
fun testSectionsInSettingsChange() {
assertAndLoadInitialConfiguration(testFiles.settings)
changeSettingsKtsInsideSections()
assertConfigurationUpdateWasDone(testFiles.settings)
}
fun testOutsideSectionsInSettingsChange() {
assertAndLoadInitialConfiguration(testFiles.settings)
changeSettingsKtsOutsideSections()
assertConfigurationUpToDate(testFiles.settings)
}
private fun assertConfigurationUpToDate(file: KtFile) { private fun assertConfigurationUpToDate(file: KtFile) {
scriptConfigurationManager.updater.ensureUpToDatedConfigurationSuggested(file) scriptConfigurationManager.updater.ensureUpToDatedConfigurationSuggested(file)
assertNoBackgroundTasks() assertNoBackgroundTasks()