mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[terminal] IJPL-246705 Fix dynamic loading of TerminalPortForwardingManager implementation
Use extension point instead of overridable service. (cherry picked from commit 015c826315a1384a2b95bb32371d72c2e9d58a19) IJ-CR-210406 GitOrigin-RevId: 2d1153e8f726414d4201d92242047abf5d74a10f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
295c9e91f2
commit
900ebc87c1
@@ -11,6 +11,8 @@
|
||||
interface="com.intellij.terminal.frontend.action.TerminalEscapeHandler" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="org.jetbrains.plugins.terminal.terminalSettingsProvider" dynamic="true"
|
||||
interface="com.intellij.terminal.frontend.settings.TerminalSettingsProvider"/>
|
||||
<extensionPoint qualifiedName="org.jetbrains.plugins.terminal.portForwardingManager" dynamic="true"
|
||||
interface="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingManager"/>
|
||||
</extensionPoints>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
@@ -50,10 +52,6 @@
|
||||
serviceInterface="com.intellij.terminal.frontend.session.TerminalActivityTracker"
|
||||
serviceImplementation="com.intellij.terminal.frontend.session.TerminalNoOpActivityTracker"
|
||||
open="true"/>
|
||||
<applicationService
|
||||
serviceInterface="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingManager"
|
||||
serviceImplementation="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingManagerImpl"
|
||||
open="true"/>
|
||||
<projectService
|
||||
serviceInterface="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingPersistenceService"
|
||||
serviceImplementation="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingNoOpPersistenceService"
|
||||
@@ -77,6 +75,8 @@
|
||||
<extensions defaultExtensionNs="org.jetbrains.plugins.terminal">
|
||||
<toolWindowInitializer implementation="com.intellij.terminal.frontend.toolwindow.impl.TerminalToolWindowTabsManagerImpl$Initializer"/>
|
||||
|
||||
<portForwardingManager implementation="com.intellij.terminal.frontend.view.portForwarding.TerminalPortForwardingManagerImpl"/>
|
||||
|
||||
<escapeHandler implementation="com.intellij.terminal.frontend.action.CancelSelection"/>
|
||||
<escapeHandler implementation="com.intellij.terminal.frontend.action.CloseSearch"/>
|
||||
<escapeHandler implementation="com.intellij.terminal.frontend.action.ClosePopupCompletion"/>
|
||||
|
||||
+15
-2
@@ -4,11 +4,12 @@ package com.intellij.terminal.frontend.view.portForwarding
|
||||
import com.intellij.openapi.actionSystem.DataKey
|
||||
import com.intellij.platform.eel.EelDescriptor
|
||||
import com.intellij.platform.eel.EelMachine
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
/**
|
||||
* Application-level service that performs TCP port forwarding from the IDE host environment to any
|
||||
* Application-level extension that performs TCP port forwarding from the IDE host environment to any
|
||||
* EEL environment and tracks the active forwardings so multiple terminals on the same physical
|
||||
* machine share a single tunnel per remote port.
|
||||
*
|
||||
@@ -45,7 +46,19 @@ interface TerminalPortForwardingManager {
|
||||
fun stopForwarding(eelMachine: EelMachine, remotePort: Int)
|
||||
|
||||
companion object {
|
||||
private val EP_NAME: ExtensionPointName<TerminalPortForwardingManager> =
|
||||
ExtensionPointName.create("org.jetbrains.plugins.terminal.portForwardingManager")
|
||||
|
||||
val DATA_KEY: DataKey<TerminalPortForwardingManager> = DataKey.create("TerminalPortForwardingManager")
|
||||
|
||||
/**
|
||||
* Returns the highest-priority registered implementation: [TerminalPortForwardingManagerImpl] in the monolith,
|
||||
* or the Remote Dev thin-client implementation (declared with `order="first"`) when the RD client is loaded.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getInstance(): TerminalPortForwardingManager = service()
|
||||
fun getInstance(): TerminalPortForwardingManager {
|
||||
return EP_NAME.findFirstSafe { true }
|
||||
?: error("No ${TerminalPortForwardingManager::class.simpleName} implementation is registered")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user