mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CPP-22344: ElevationService: Extract and move interface to platform-api
GitOrigin-RevId: 78b95bb87bcd61d84738d4e9d0a438986feec787
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5d97e1d20f
commit
ffd7109727
+8
-13
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user