User: rednesto Date: 08 Feb 24 18:17 Revision: eaa630fd889c91d54da6087bf4c118bcc48b64f0 Summary: Merge branch '2023.3' into 2024.1 TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9134&personal=false Index: build.gradle.kts =================================================================== --- build.gradle.kts (revision 0e680c63f2c6101afdc0085e16b39e5a79682913) +++ build.gradle.kts (revision eaa630fd889c91d54da6087bf4c118bcc48b64f0) @@ -287,6 +287,7 @@ style["bnf"] = HeaderStyle.BLOCK_COMMENT.format val endings = listOf("java", "kt", "kts", "groovy", "gradle.kts", "xml", "properties", "html", "flex", "bnf") + exclude("META-INF/plugin.xml") // https://youtrack.jetbrains.com/issue/IDEA-345026 include(endings.map { "**/*.$it" }) exclude("com/demonwav/mcdev/platform/mixin/invalidInjectorMethodSignature/*.java") Index: gradle.properties =================================================================== --- gradle.properties (revision 0e680c63f2c6101afdc0085e16b39e5a79682913) +++ gradle.properties (revision eaa630fd889c91d54da6087bf4c118bcc48b64f0) @@ -24,7 +24,7 @@ ideaVersion = 241.10840-EAP-CANDIDATE-SNAPSHOT ideaVersionName = 2024.1 -coreVersion = 1.7.1 +coreVersion = 1.7.2 downloadIdeaSources = true pluginTomlVersion = 241.10840.7 Index: src/main/kotlin/facet/MinecraftFacetDetector.kt =================================================================== --- src/main/kotlin/facet/MinecraftFacetDetector.kt (revision 0e680c63f2c6101afdc0085e16b39e5a79682913) +++ src/main/kotlin/facet/MinecraftFacetDetector.kt (revision eaa630fd889c91d54da6087bf4c118bcc48b64f0) @@ -50,12 +50,16 @@ import com.intellij.openapi.util.Key import com.intellij.platform.ide.progress.withBackgroundProgress import com.intellij.platform.util.progress.forEachWithProgress +import com.intellij.util.concurrency.NonUrgentExecutor import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.job import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import org.jetbrains.plugins.gradle.util.GradleUtil class MinecraftFacetDetector : ProjectActivity { @@ -69,15 +73,13 @@ override suspend fun execute(project: Project) { val detectorService = project.service() - detectorService.currentJob?.cancelAndJoin() - withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) { - detectorService.currentJob = coroutineContext.job - MinecraftModuleRootListener.doCheck(project) + MinecraftModuleRootListener.doCheckUnderProgress(project, detectorService) - } + } - } @Service(Service.Level.PROJECT) private class FacetDetectorScopeProvider(val scope: CoroutineScope) { + val dispatcher = NonUrgentExecutor.getInstance().asCoroutineDispatcher() + val lock = Mutex() var currentJob: Job? = null } @@ -89,14 +91,20 @@ val project = event.source as? Project ?: return val detectorService = project.service() - detectorService.scope.launch { - detectorService.currentJob?.cancelAndJoin() + detectorService.scope.launch(detectorService.dispatcher) { + doCheckUnderProgress(project, detectorService) + } + } + + suspend fun doCheckUnderProgress(project: Project, detectorService: FacetDetectorScopeProvider) { - withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) { + withBackgroundProgress(project, "Detecting Minecraft Frameworks", cancellable = false) { + detectorService.lock.withLock { + detectorService.currentJob?.cancelAndJoin() detectorService.currentJob = coroutineContext.job + } - doCheck(project) - } - } + doCheck(project) + } + } - } suspend fun doCheck(project: Project) { val moduleManager = ModuleManager.getInstance(project)