CPP-22344: ElevationService: Extract and move interface to platform-api

GitOrigin-RevId: 78b95bb87bcd61d84738d4e9d0a438986feec787
This commit is contained in:
Eldar Abusalimov
2020-11-10 19:24:52 +00:00
committed by intellij-monorepo-bot
parent 5d97e1d20f
commit ffd7109727
4 changed files with 37 additions and 14 deletions
@@ -3,6 +3,7 @@ package com.intellij.execution.process.elevation
import com.intellij.execution.ExecutionException
import com.intellij.execution.configurations.GeneralCommandLine
import com.intellij.execution.process.ElevationService
import com.intellij.execution.process.SelfKiller
import com.intellij.execution.process.elevation.settings.ElevationSettings
import com.intellij.execution.process.mediator.MediatedProcessHandler
@@ -11,30 +12,20 @@ import com.intellij.execution.process.mediator.client.MediatedProcess
import com.intellij.execution.process.mediator.client.ProcessMediatorClient
import com.intellij.execution.process.mediator.daemon.QuotaExceededException
import com.intellij.openapi.Disposable
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service
import com.intellij.openapi.util.Disposer
@Service
class ElevationService : Disposable {
companion object {
@JvmStatic
fun getInstance() = service<ElevationService>()
private const val MAX_RELAUNCHING_DAEMON_UNTIL_HAVE_QUOTA_PERMIT_ATTEMPTS = 3
}
class ElevationServiceImpl : ElevationService, Disposable {
private val clientManager = ProcessMediatorClientManager().also {
Disposer.register(this, it)
}
fun createProcessHandler(commandLine: GeneralCommandLine): MediatedProcessHandler {
override fun createProcessHandler(commandLine: GeneralCommandLine): MediatedProcessHandler {
val processBuilder = commandLine.toProcessBuilder()
val process = createProcess(processBuilder)
return MediatedProcessHandler(process, commandLine)
}
fun createProcess(processBuilder: ProcessBuilder): MediatedProcess {
override fun createProcess(processBuilder: ProcessBuilder): MediatedProcess {
return tryRelaunchingDaemonUntilHaveQuotaPermit { client ->
object : MediatedProcess(client, processBuilder), SelfKiller {
init {
@@ -62,4 +53,8 @@ class ElevationService : Disposable {
}
override fun dispose() = Unit
companion object {
private const val MAX_RELAUNCHING_DAEMON_UNTIL_HAVE_QUOTA_PERMIT_ATTEMPTS = 3
}
}
@@ -0,0 +1,23 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.execution.process;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.configurations.GeneralCommandLine;
import com.intellij.openapi.application.ApplicationManager;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@ApiStatus.Experimental
public interface ElevationService {
static ElevationService getInstance() {
return ApplicationManager.getApplication().getService(ElevationService.class);
}
@NotNull OSProcessHandler createProcessHandler(@NotNull GeneralCommandLine commandLine) throws ExecutionException;
default @NotNull Process createProcess(@NotNull GeneralCommandLine commandLine) throws ExecutionException {
return createProcess(commandLine.toProcessBuilder());
}
@NotNull Process createProcess(@NotNull ProcessBuilder processBuilder) throws ExecutionException;
}
@@ -93,5 +93,6 @@
<orderEntry type="module" module-name="intellij.platform.concurrency" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="library" name="classgraph" level="project" />
<orderEntry type="module" module-name="intellij.platform.elevation" scope="RUNTIME" />
</component>
</module>
@@ -321,6 +321,10 @@
bundle="messages.CredentialStoreBundle"
key="password.safe.configurable"
id="application.passwordSafe"/>
<applicationService serviceInterface="com.intellij.execution.process.ElevationService"
serviceImplementation="com.intellij.execution.process.elevation.ElevationServiceImpl"/>
<applicationService serviceInterface="com.intellij.execution.process.OSProcessManager"
serviceImplementation="com.intellij.execution.process.impl.OSProcessManagerImpl"/>
@@ -329,7 +333,7 @@
<projectService serviceInterface="com.intellij.openapi.options.SchemeManagerFactory"
serviceImplementation="com.intellij.configurationStore.schemeManager.SchemeManagerFactoryBase$ProjectSchemeManagerFactory"/>
<applicationService serviceImplementation="com.intellij.openapi.editor.EditorActivityManager" />
<applicationService serviceImplementation="com.intellij.openapi.editor.EditorActivityManager"/>
<applicationService serviceInterface="com.intellij.openapi.editor.colors.TextAttributesKey$TextAttributeKeyDefaultsProvider"
serviceImplementation="com.intellij.openapi.editor.colors.impl.TextAttributeKeyDefaultsProviderImpl"/>