.gralde.kts: optimize getAffectedGradleProjectFiles (EA-220597 fixed)
This commit is contained in:
+1
-1
@@ -39,7 +39,7 @@ class GradleScriptConfigurationLoader(project: Project) : DefaultScriptConfigura
|
||||
return true
|
||||
}
|
||||
|
||||
if (!isInAffectedGradleProjectFiles(ktFile.project, ktFile.originalFile.virtualFile)) {
|
||||
if (!isInAffectedGradleProjectFiles(ktFile.project, ktFile.originalFile.virtualFile.path)) {
|
||||
// todo: provide an action to load configuration through scripting API: KT-34625, KT-35268
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ class GradleScriptInputsWatcher(val project: Project) : PersistentStateComponent
|
||||
val files = getAffectedGradleProjectFiles(project)
|
||||
for (event in events) {
|
||||
val file = event.file ?: return
|
||||
if (isInAffectedGradleProjectFiles(files, file)) {
|
||||
if (isInAffectedGradleProjectFiles(files, event.path)) {
|
||||
storage.fileChanged(file, file.timeStamp)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -37,6 +37,6 @@ open class GradleScriptListener(project: Project) : ScriptChangeListener(project
|
||||
override fun isApplicable(vFile: VirtualFile): Boolean {
|
||||
if (!isGradleKotlinScript(vFile)) return false
|
||||
|
||||
return isInAffectedGradleProjectFiles(project, vFile)
|
||||
return isInAffectedGradleProjectFiles(project, vFile.path)
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,7 @@
|
||||
package org.jetbrains.kotlin.idea.scripting.gradle
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
@@ -24,33 +22,39 @@ import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
|
||||
import org.jetbrains.plugins.gradle.GradleManager
|
||||
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||
import java.io.File
|
||||
|
||||
private val sections = arrayListOf("buildscript", "plugins", "initscript", "pluginManagement")
|
||||
|
||||
fun isGradleKotlinScript(virtualFile: VirtualFile) = virtualFile.name.endsWith(".gradle.kts")
|
||||
|
||||
fun isInAffectedGradleProjectFiles(project: Project, file: VirtualFile): Boolean {
|
||||
fun isInAffectedGradleProjectFiles(project: Project, filePath: String): Boolean {
|
||||
// fast path
|
||||
if (!filePath.contains("gradle")) return false
|
||||
|
||||
val affectedFiles = getAffectedGradleProjectFiles(project)
|
||||
return isInAffectedGradleProjectFiles(affectedFiles, file)
|
||||
return isInAffectedGradleProjectFiles(affectedFiles, filePath)
|
||||
}
|
||||
|
||||
fun isInAffectedGradleProjectFiles(files: List<File>, file: VirtualFile): Boolean {
|
||||
fun isInAffectedGradleProjectFiles(files: Set<String>, filePath: String): Boolean {
|
||||
// todo: avoid isUnitTestMode usage
|
||||
if (ApplicationManager.getApplication().isUnitTestMode) return true
|
||||
|
||||
return files.any { it.toPath().systemIndependentPath == file.path }
|
||||
return filePath in files
|
||||
}
|
||||
|
||||
fun getAffectedGradleProjectFiles(project: Project): List<File> {
|
||||
fun getAffectedGradleProjectFiles(project: Project): Set<String> {
|
||||
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
|
||||
if (gradleSettings.getLinkedProjectsSettings().isEmpty()) return emptyList()
|
||||
if (gradleSettings.getLinkedProjectsSettings().isEmpty()) return setOf()
|
||||
|
||||
val projectSettings = gradleSettings.getLinkedProjectsSettings().filterIsInstance<GradleProjectSettings>().firstOrNull()
|
||||
?: return emptyList()
|
||||
?: return setOf()
|
||||
|
||||
return ExternalSystemApiUtil.getAllManagers().filterIsInstance<GradleManager>().firstOrNull()
|
||||
?.getAffectedExternalProjectFiles(projectSettings.externalProjectPath, project) ?: emptyList()
|
||||
return ExternalSystemApiUtil.getAllManagers()
|
||||
.filterIsInstance<GradleManager>()
|
||||
.firstOrNull()
|
||||
?.getAffectedExternalProjectFiles(projectSettings.externalProjectPath, project)
|
||||
?.mapTo(mutableSetOf()) { it.toPath().systemIndependentPath }
|
||||
?: setOf()
|
||||
}
|
||||
|
||||
fun getGradleScriptInputsStamp(
|
||||
|
||||
Reference in New Issue
Block a user