Skip to content

Commit 353ca51

Browse files
roboquatfelladrin
authored andcommitted
Update Platform Version of JetBrains Backend Plugin to 223.6160-EAP-CANDIDATE-SNAPSHOT
1 parent 2a46a4e commit 353ca51

File tree

3 files changed

+76
-34
lines changed

3 files changed

+76
-34
lines changed

components/ide/jetbrains/backend-plugin/gradle-latest.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ pluginUntilBuild=223.*
66
# See https://jb.gg/intellij-platform-builds-list for available build versions.
77
pluginVerifierIdeVersions=2022.3
88
# Version from "com.jetbrains.intellij.idea" which can be found at https://www.jetbrains.com/intellij-repository/snapshots
9-
platformVersion=223.5756-EAP-CANDIDATE-SNAPSHOT
9+
platformVersion=223.6160-EAP-CANDIDATE-SNAPSHOT

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/latest/GitpodPortForwardingService.kt

Lines changed: 74 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@
44

55
package io.gitpod.jetbrains.remote.latest
66

7+
import com.intellij.openapi.Disposable
8+
import com.intellij.openapi.client.ClientProjectSession
79
import com.intellij.openapi.components.service
810
import com.intellij.openapi.diagnostic.thisLogger
9-
import com.intellij.openapi.project.Project
11+
import com.intellij.openapi.util.Disposer
1012
import com.intellij.remoteDev.util.onTerminationOrNow
1113
import com.intellij.util.application
12-
import com.jetbrains.codeWithMe.model.RdPortType
14+
import com.jetbrains.rd.platform.codeWithMe.portForwarding.*
1315
import com.jetbrains.rd.platform.util.lifetime
1416
import com.jetbrains.rd.util.lifetime.LifetimeStatus
15-
import com.jetbrains.rdserver.portForwarding.ForwardedPortInfo
16-
import com.jetbrains.rdserver.portForwarding.PortForwardingManager
17-
import com.jetbrains.rdserver.portForwarding.remoteDev.PortEventsProcessor
1817
import io.gitpod.jetbrains.remote.GitpodManager
1918
import io.gitpod.jetbrains.remote.GitpodPortsService
2019
import io.gitpod.supervisor.api.Status
@@ -24,14 +23,17 @@ import io.grpc.stub.ClientResponseObserver
2423
import io.ktor.utils.io.*
2524
import java.util.concurrent.CompletableFuture
2625
import java.util.concurrent.TimeUnit
26+
import javax.swing.Icon
2727

2828
@Suppress("UnstableApiUsage")
29-
class GitpodPortForwardingService(private val project: Project) {
29+
class GitpodPortForwardingService(private val session: ClientProjectSession) {
3030
companion object {
3131
const val FORWARDED_PORT_LABEL = "gitpod"
3232
}
3333

3434
private val portsService = service<GitpodPortsService>()
35+
private val perClientPortForwardingManager = service<PerClientPortForwardingManager>()
36+
private val portToDisposableMap = mutableMapOf<Int,Disposable>()
3537

3638
init { start() }
3739

@@ -42,7 +44,7 @@ class GitpodPortForwardingService(private val project: Project) {
4244
}
4345

4446
private fun observePortsListWhileProjectIsOpen() = application.executeOnPooledThread {
45-
while (project.lifetime.status == LifetimeStatus.Alive) {
47+
while (session.project.lifetime.status == LifetimeStatus.Alive) {
4648
try {
4749
observePortsList().get()
4850
} catch (throwable: Throwable) {
@@ -70,7 +72,7 @@ class GitpodPortForwardingService(private val project: Project) {
7072
val portsStatusResponseObserver = object :
7173
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
7274
override fun beforeStart(request: ClientCallStreamObserver<Status.PortsStatusRequest>) {
73-
project.lifetime.onTerminationOrNow { request.cancel("gitpod: Project terminated.", null) }
75+
session.project.lifetime.onTerminationOrNow { request.cancel("gitpod: Project terminated.", null) }
7476
}
7577
override fun onNext(response: Status.PortsStatusResponse) {
7678
application.invokeLater { updateForwardedPortsList(response) }
@@ -85,48 +87,88 @@ class GitpodPortForwardingService(private val project: Project) {
8587
}
8688

8789
private fun updateForwardedPortsList(response: Status.PortsStatusResponse) {
88-
val portForwardingManager = PortForwardingManager.getInstance(project)
89-
val forwardedPortsList = portForwardingManager.getForwardedPortsWithLabel(FORWARDED_PORT_LABEL)
90+
val forwardedPorts = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
9091

9192
for (port in response.portsList) {
9293
val hostPort = port.localPort
9394
val isServed = port.served
94-
val isForwarded = forwardedPortsList.find { it.hostPort == hostPort } != null
95+
val isForwarded = forwardedPorts.find { it.hostPortNumber == hostPort } != null
9596

9697
if (isServed && !isForwarded) {
97-
val portEventsProcessor = object : PortEventsProcessor {
98-
override fun onPortForwarded(hostPort: Int, clientPort: Int) {
99-
portsService.setForwardedPort(hostPort, clientPort)
100-
thisLogger().info("gitpod: Forwarded port $hostPort to client's port $clientPort.")
98+
val exposedPort = perClientPortForwardingManager.exposePort(
99+
hostPort,
100+
port.exposed.url,
101+
setOf(FORWARDED_PORT_LABEL),
102+
fun(portPresentation: PortPresentation) {
103+
portPresentation.name = port.name
104+
portPresentation.description = port.description
105+
portPresentation.icon = null
106+
portPresentation.tooltip = "Exposed Port"
107+
}
108+
)
109+
110+
val forwardedPort = perClientPortForwardingManager.forwardPort(
111+
hostPort,
112+
PortType.NON_USER_TCP,
113+
setOf(FORWARDED_PORT_LABEL),
114+
hostPort,
115+
ClientPortPickingStrategy.REASSIGN_WHEN_BUSY,
116+
fun(portPresentation: PortPresentation) {
117+
portPresentation.name = port.name
118+
portPresentation.description = port.description
119+
portPresentation.icon = null
120+
portPresentation.tooltip = "Forwarded Port"
121+
}
122+
)
123+
124+
val forwardedPortListener = object: ForwardedPortListener {
125+
override fun becameReadOnly(port: ForwardedPort, reason: String?) {
126+
thisLogger().warn("gitpod: becameReadOnly($port, $reason)")
127+
}
128+
129+
override fun descriptionChanged(port: ForwardedPort, oldDescription: String?, newDescription: String?) {
130+
thisLogger().warn("gitpod: descriptionChanged($port, $oldDescription, $newDescription)")
101131
}
102132

103-
override fun onPortForwardingEnded(hostPort: Int) {
104-
thisLogger().info("gitpod: Finished forwarding port $hostPort.")
133+
override fun exposedUrlChanged(port: ForwardedPort, newUrl: String) {
134+
thisLogger().warn("gitpod: exposedUrlChanged($port, $newUrl)")
105135
}
106136

107-
override fun onPortForwardingFailed(hostPort: Int, reason: String) {
108-
thisLogger().error("gitpod: Failed to forward port $hostPort: $reason")
137+
override fun iconChanged(port: ForwardedPort, oldIcon: Icon?, newIcon: Icon?) {
138+
thisLogger().warn("gitpod: iconChanged($port, $oldIcon, $newIcon)")
139+
}
140+
141+
override fun nameChanged(port: ForwardedPort, oldName: String?, newName: String?) {
142+
thisLogger().warn("gitpod: nameChanged($port, $oldName, $newName)")
143+
}
144+
145+
override fun stateChanged(port: ForwardedPort, newState: ClientPortState) {
146+
thisLogger().warn("gitpod: stateChanged($port, $newState)")
147+
}
148+
149+
override fun tooltipChanged(port: ForwardedPort, oldTooltip: String?, newTooltip: String?) {
150+
thisLogger().warn("gitpod: tooltipChanged($port, $oldTooltip, $newTooltip)")
109151
}
110152
}
111153

112-
val portInfo = ForwardedPortInfo(
113-
hostPort,
114-
RdPortType.HTTP,
115-
port.exposed.url,
116-
port.name,
117-
port.description,
118-
setOf(FORWARDED_PORT_LABEL),
119-
emptyList(),
120-
portEventsProcessor
121-
)
154+
val portListenerDisposable = portToDisposableMap.getOrPut(hostPort, fun() = Disposer.newDisposable())
122155

123-
portForwardingManager.forwardPort(portInfo)
156+
exposedPort.addPortListener(portListenerDisposable, forwardedPortListener)
157+
forwardedPort.addPortListener(portListenerDisposable, forwardedPortListener)
124158
}
125159

126160
if (!isServed && isForwarded) {
127-
portForwardingManager.removePort(hostPort)
161+
thisLogger().warn("hostPort $hostPort stopped being")
162+
val portListenerDisposable = portToDisposableMap[hostPort]
163+
if (portListenerDisposable != null) {
164+
portListenerDisposable.dispose()
165+
portToDisposableMap.remove(hostPort)
166+
}
167+
perClientPortForwardingManager.getPorts(hostPort).forEach { portToRemove ->
168+
perClientPortForwardingManager.removePort(portToRemove)
169+
}
128170
portsService.removeForwardedPort(hostPort)
129-
thisLogger().info("gitpod: Stopped forwarding port $hostPort.")
171+
thisLogger().warn("gitpod: Stopped forwarding port $hostPort.")
130172
}
131173
}
132174
}

components/ide/jetbrains/backend-plugin/src/main/resources-latest/META-INF/extensions.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
<idea-plugin>
88
<extensions defaultExtensionNs="com.intellij">
99
<applicationService serviceInterface="io.gitpod.jetbrains.remote.GitpodIgnoredPortsForNotificationService" serviceImplementation="io.gitpod.jetbrains.remote.latest.GitpodIgnoredPortsForNotificationServiceImpl" preload="true"/>
10-
<projectService serviceImplementation="io.gitpod.jetbrains.remote.latest.GitpodPortForwardingService" preload="true"/>
10+
<projectService serviceImplementation="io.gitpod.jetbrains.remote.latest.GitpodPortForwardingService" preload="true" client="guest"/>
1111
</extensions>
1212
</idea-plugin>

0 commit comments

Comments
 (0)