mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
[AutoSync] QD-10726 Qodana: run autoimport background tasks BackgroundAsyncSupplier in background, track them
(cherry picked from commit de898261d3086dc16103e4fcbaacddb62dd9daec) (cherry picked from commit cebc463f092e0478c811a1963e6130625ce3198a) IJ-CR-160378 GitOrigin-RevId: 0bef7f20a813560c972a5dd348f652ac8903c421
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f5a4051649
commit
fdcab2ec1c
@@ -20,7 +20,8 @@ private val COMMON_ADDITIONAL_VM_OPTIONS = listOf(
|
||||
"-Deslint.service.expiration.timeout.ms=5000",
|
||||
"-Dphp.additional.library.manager.new.updater=true",
|
||||
"-Dgradle.force.project.sdk.import=true", //workaround for https://youtrack.jetbrains.com/issue/IDEA-367680/The-module-SDK-isnt-always-specified
|
||||
"-Dide.region.url.mapping.expiration.timeout=7200"
|
||||
"-Dide.region.url.mapping.expiration.timeout=7200",
|
||||
"-Dexternal.system.auto.import.headless.async=true",
|
||||
)
|
||||
|
||||
private const val IS_EAP = false
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.intellij.openapi.externalSystem.autoimport.ExternalSystemModification
|
||||
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTrackerSettings.AutoReloadType
|
||||
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemRefreshStatus.SUCCESS
|
||||
import com.intellij.openapi.externalSystem.autoimport.ProjectStatus.Stamp
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.BackgroundAsyncSupplier
|
||||
import com.intellij.openapi.externalSystem.autoimport.update.PriorityEatUpdate
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemActivityKey
|
||||
@@ -25,7 +26,6 @@ import com.intellij.openapi.observable.operation.core.whenOperationStarted
|
||||
import com.intellij.openapi.observable.properties.*
|
||||
import com.intellij.openapi.observable.util.set
|
||||
import com.intellij.openapi.observable.util.whenDisposed
|
||||
import com.intellij.openapi.progress.impl.CoreProgressManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
@@ -413,7 +413,7 @@ class AutoImportProjectTracker(
|
||||
|
||||
private val asyncChangesProcessingProperty = AtomicBooleanProperty(
|
||||
!ApplicationManager.getApplication().isHeadlessEnvironment
|
||||
|| CoreProgressManager.shouldKeepTasksAsynchronousInHeadlessMode()
|
||||
|| BackgroundAsyncSupplier.isAsyncInHeadless()
|
||||
)
|
||||
|
||||
private val isEnabledAutoReload: Boolean
|
||||
|
||||
@@ -18,8 +18,8 @@ import com.intellij.openapi.externalSystem.autoimport.changes.FilesChangesListen
|
||||
import com.intellij.openapi.externalSystem.autoimport.changes.NewFilesListener.Companion.whenNewFilesCreated
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.AsyncSupplier
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.BackgroundAsyncSupplier
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.tracked
|
||||
import com.intellij.openapi.externalSystem.service.ui.completion.cache.AsyncLocalCache
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemActivityKey
|
||||
import com.intellij.openapi.externalSystem.util.calculateCrc
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.observable.operation.core.AtomicOperationTrace
|
||||
@@ -31,7 +31,6 @@ import com.intellij.openapi.util.SimpleModificationTracker
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.LocalFileSystem
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.backend.observation.trackActivityBlocking
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.nio.file.Path
|
||||
@@ -367,12 +366,11 @@ class ProjectSettingsTracker(
|
||||
private val supplier = BackgroundAsyncSupplier.Builder(::getOrCollectSettingsFiles)
|
||||
.shouldKeepTasksAsynchronous(::isAsyncChangesProcessing)
|
||||
.build(backgroundExecutor)
|
||||
.tracked(project)
|
||||
|
||||
override fun supply(parentDisposable: Disposable, consumer: (Set<String>) -> Unit) {
|
||||
project.trackActivityBlocking(ExternalSystemActivityKey) {
|
||||
supplier.supply(parentDisposable) {
|
||||
consumer(it + settingsFilesStatus.get().oldCRC.keys)
|
||||
}
|
||||
supplier.supply(parentDisposable) {
|
||||
consumer(it + settingsFilesStatus.get().oldCRC.keys)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
package com.intellij.openapi.externalSystem.autoimport.settings
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemActivityKey
|
||||
import com.intellij.openapi.progress.impl.CoreProgressManager
|
||||
import com.intellij.openapi.progress.util.BackgroundTaskUtil
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.platform.backend.observation.trackActivityBlocking
|
||||
import com.intellij.util.application
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.util.concurrent.Executor
|
||||
|
||||
@@ -11,8 +15,14 @@ import java.util.concurrent.Executor
|
||||
class BackgroundAsyncSupplier<R>(
|
||||
private val supplier: AsyncSupplier<R>,
|
||||
private val shouldKeepTasksAsynchronous: () -> Boolean,
|
||||
private val backgroundExecutor: Executor
|
||||
private val backgroundExecutor: Executor,
|
||||
) : AsyncSupplier<R> {
|
||||
companion object {
|
||||
fun isAsyncInHeadless(): Boolean {
|
||||
return CoreProgressManager.shouldKeepTasksAsynchronousInHeadlessMode() ||
|
||||
java.lang.Boolean.getBoolean("external.system.auto.import.headless.async")
|
||||
}
|
||||
}
|
||||
|
||||
override fun supply(parentDisposable: Disposable, consumer: (R) -> Unit) {
|
||||
if (shouldKeepTasksAsynchronous()) {
|
||||
@@ -29,8 +39,10 @@ class BackgroundAsyncSupplier<R>(
|
||||
|
||||
constructor(supplier: () -> R) : this(AsyncSupplier.blocking(supplier))
|
||||
|
||||
private var shouldKeepTasksAsynchronous: () -> Boolean =
|
||||
CoreProgressManager::shouldKeepTasksAsynchronous
|
||||
private var shouldKeepTasksAsynchronous: () -> Boolean = {
|
||||
val isHeadless = application.isUnitTestMode() || application.isHeadlessEnvironment()
|
||||
!isHeadless || isAsyncInHeadless()
|
||||
}
|
||||
|
||||
fun shouldKeepTasksAsynchronous(provider: () -> Boolean) = apply {
|
||||
shouldKeepTasksAsynchronous = provider
|
||||
@@ -40,4 +52,15 @@ class BackgroundAsyncSupplier<R>(
|
||||
return BackgroundAsyncSupplier(supplier, shouldKeepTasksAsynchronous, backgroundExecutor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
fun <R> AsyncSupplier<R>.tracked(project: Project): AsyncSupplier<R> {
|
||||
return object : AsyncSupplier<R> {
|
||||
override fun supply(parentDisposable: Disposable, consumer: (R) -> Unit) {
|
||||
project.trackActivityBlocking(ExternalSystemActivityKey) {
|
||||
this@tracked.supply(parentDisposable, consumer)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import com.intellij.openapi.externalSystem.autoimport.ProjectStatus.Stamp
|
||||
import com.intellij.openapi.externalSystem.autoimport.changes.AsyncFileChangesListener.Companion.subscribeOnVirtualFilesChanges
|
||||
import com.intellij.openapi.externalSystem.autoimport.changes.FilesChangesListener
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.BackgroundAsyncSupplier
|
||||
import com.intellij.openapi.externalSystem.autoimport.settings.tracked
|
||||
import com.intellij.openapi.util.io.toCanonicalPath
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.idea.maven.buildtool.MavenSyncSpec
|
||||
@@ -51,6 +52,7 @@ class MavenGeneralSettingsWatcher(
|
||||
fun subscribeOnSettingsFileChanges(parentDisposable: Disposable) {
|
||||
val filesProvider = BackgroundAsyncSupplier.Builder(::collectSettingsFiles)
|
||||
.build(backgroundExecutor)
|
||||
.tracked(manager.project)
|
||||
subscribeOnVirtualFilesChanges(false, filesProvider, object : FilesChangesListener {
|
||||
override fun onFileChange(stamp: Stamp, path: String, modificationStamp: Long, modificationType: ExternalSystemModificationType) {
|
||||
val fileChangeMessage = "File change: $path, $modificationStamp, $modificationType"
|
||||
|
||||
Reference in New Issue
Block a user