From db510378bd8ba6d6e2b24c33e8f5240956623d75 Mon Sep 17 00:00:00 2001 From: BoD Date: Thu, 24 Apr 2025 11:21:31 +0200 Subject: [PATCH] Use coroutines in ApolloCodegenService (prevents a crash when calling getExecutionSettings) --- .../ijplugin/codegen/ApolloCodegenService.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/codegen/ApolloCodegenService.kt b/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/codegen/ApolloCodegenService.kt index ed6217a7f6e..848f08acfe7 100644 --- a/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/codegen/ApolloCodegenService.kt +++ b/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/codegen/ApolloCodegenService.kt @@ -33,17 +33,19 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.CheckedDisposable import com.intellij.openapi.vfs.VfsUtil +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import org.gradle.tooling.CancellationTokenSource import org.gradle.tooling.GradleConnector import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import org.jetbrains.plugins.gradle.util.GradleConstants import java.io.File -import java.util.concurrent.Executors @Service(Service.Level.PROJECT) class ApolloCodegenService( private val project: Project, + private val coroutineScope: CoroutineScope, ) : Disposable { private var documentChangesDisposable: CheckedDisposable? = null private var fileEditorChangesDisposable: CheckedDisposable? = null @@ -53,8 +55,6 @@ class ApolloCodegenService( private var gradleCodegenCancellation: CancellationTokenSource? = null - private val gradleExecutorService = Executors.newSingleThreadExecutor() - init { logd("project=${project.name}") startOrStopCodegenObservers() @@ -181,10 +181,9 @@ class ApolloCodegenService( val modules = ModuleManager.getInstance(project).modules val rootProjectPath = project.getGradleRootPath() ?: return - val executionSettings = - ExternalSystemApiUtil.getExecutionSettings(project, rootProjectPath, GradleConstants.SYSTEM_ID) - - gradleExecutorService.submit { + coroutineScope.launch { + val executionSettings = + ExternalSystemApiUtil.getExecutionSettings(project, rootProjectPath, GradleConstants.SYSTEM_ID) val gradleExecutionHelper = GradleExecutionHelper() gradleExecutionHelper.execute(rootProjectPath, executionSettings) { connection -> gradleCodegenCancellation = GradleConnector.newCancellationTokenSource() @@ -257,6 +256,5 @@ class ApolloCodegenService( override fun dispose() { logd("project=${project.name}") stopContinuousGradleCodegen() - gradleExecutorService.shutdown() } }