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() } } diff --git a/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleToolingModelService.kt b/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleToolingModelService.kt index cc47783bad7..f8e22e63c93 100644 --- a/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleToolingModelService.kt +++ b/intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleToolingModelService.kt @@ -9,7 +9,6 @@ import com.apollographql.ijplugin.settings.ProjectSettingsState import com.apollographql.ijplugin.settings.projectSettingsState import com.apollographql.ijplugin.telemetry.telemetryService import com.apollographql.ijplugin.util.dispose -import com.apollographql.ijplugin.util.executeOnPooledThread import com.apollographql.ijplugin.util.isNotDisposed import com.apollographql.ijplugin.util.logd import com.apollographql.ijplugin.util.logw @@ -25,6 +24,8 @@ import com.intellij.openapi.project.guessProjectDir import com.intellij.openapi.util.CheckedDisposable import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFileManager +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import org.gradle.tooling.CancellationTokenSource import org.gradle.tooling.GradleConnector import org.gradle.tooling.model.GradleProject @@ -36,6 +37,7 @@ import java.io.File @Service(Service.Level.PROJECT) class GradleToolingModelService( private val project: Project, + private val coroutineScope: CoroutineScope, ) : Disposable { private var gradleHasSyncedDisposable: CheckedDisposable? = null @@ -141,7 +143,7 @@ class GradleToolingModelService( return } - fetchToolingModelsTask = FetchToolingModelsTask().also { executeOnPooledThread { it.run() } } + fetchToolingModelsTask = FetchToolingModelsTask().also { coroutineScope.launch { it.run() } } } private inner class FetchToolingModelsTask : Runnable {