Changes inside initscript and pluginManagement blocks should invalidate script configuration
^KT-35129 Fixed
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
+16
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user