Skip to content
This repository was archived by the owner on Aug 5, 2024. It is now read-only.

Commit a4dc63c

Browse files
gottagofaster236Space Team
authored andcommitted
[feature] Add the mobileInstall request
Merge-request: BAZEL-MR-869 Merged-by: Lev Leontev <[email protected]>
1 parent 10bab42 commit a4dc63c

File tree

6 files changed

+78
-0
lines changed

6 files changed

+78
-0
lines changed

bazelrunner/src/main/kotlin/org/jetbrains/bsp/bazel/bazelrunner/BazelRunnerCommandBuilder.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ class BazelRunnerCommandBuilder internal constructor(private val bazelRunner: Ba
1818
fun cquery() = BazelRunnerBuilder(bazelRunner, listOf("cquery"))
1919

2020
fun build() = BazelRunnerBuildBuilder(bazelRunner, listOf("build")).withUseBuildFlags()
21+
fun mobileInstall() = BazelRunnerBuildBuilder(bazelRunner, listOf("mobile-install")).withUseBuildFlags()
2122
fun test() = BazelRunnerBuildBuilder(bazelRunner, listOf("test")).withUseBuildFlags()
2223
}

bazelrunner/src/main/kotlin/org/jetbrains/bsp/bazel/bazelrunner/params/BazelFlag.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ object BazelFlag {
2828
@JvmStatic fun experimentalGoogleLegacyApi(): String =
2929
flag("experimental_google_legacy_api")
3030

31+
@JvmStatic fun device(device: String): String =
32+
arg("device", device)
33+
34+
@JvmStatic fun start(startType: String): String =
35+
arg("start", startType)
36+
3137
private fun arg(name: String, value: String) =
3238
String.format("--%s=%s", name, value)
3339

protocol/src/main/kotlin/org/jetbrains/bsp/BazelBuildServer.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@ public interface BazelBuildServer {
1616

1717
@JsonRequest("buildTarget/runWithDebug")
1818
public fun buildTargetRunWithDebug(params: RunWithDebugParams): CompletableFuture<RunResult>
19+
20+
@JsonRequest("buildTarget/mobileInstall")
21+
public fun buildTargetMobileInstall(params: MobileInstallParams): CompletableFuture<MobileInstallResult>
1922
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.jetbrains.bsp
2+
3+
import ch.epfl.scala.bsp4j.BuildTargetIdentifier
4+
import ch.epfl.scala.bsp4j.StatusCode
5+
import com.google.gson.annotations.JsonAdapter
6+
import org.eclipse.lsp4j.jsonrpc.json.adapters.EnumTypeAdapter
7+
8+
/**
9+
* See [mobile-install docs](https://bazel.build/docs/user-manual#start)
10+
*/
11+
@JsonAdapter(EnumTypeAdapter.Factory::class)
12+
public enum class MobileInstallStartType(public val value: Int) {
13+
NO(1),
14+
COLD(2),
15+
WARM(3),
16+
DEBUG(4),
17+
}
18+
19+
public data class MobileInstallParams(
20+
val target: BuildTargetIdentifier,
21+
val originId: String,
22+
val targetDeviceSerialNumber: String,
23+
val startType: MobileInstallStartType,
24+
)
25+
26+
public data class MobileInstallResult(
27+
val statusCode: StatusCode,
28+
var originId: String? = null,
29+
)

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/bsp/BspServerApi.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ import ch.epfl.scala.bsp4j.TestResult
5454
import ch.epfl.scala.bsp4j.WorkspaceBuildTargetsResult
5555
import org.eclipse.lsp4j.jsonrpc.CancelChecker
5656
import org.jetbrains.bsp.BazelBuildServer
57+
import org.jetbrains.bsp.MobileInstallParams
58+
import org.jetbrains.bsp.MobileInstallResult
5759
import org.jetbrains.bsp.RunWithDebugParams
5860
import org.jetbrains.bsp.WorkspaceDirectoriesResult
5961
import org.jetbrains.bsp.WorkspaceInvalidTargetsResult
@@ -215,6 +217,18 @@ class BspServerApi(private val bazelServicesBuilder: (BuildClient) -> BazelServi
215217
)
216218
}
217219

220+
override fun buildTargetMobileInstall(params: MobileInstallParams): CompletableFuture<MobileInstallResult> {
221+
return runner.handleRequest(
222+
"buildTargetMobileInstall",
223+
{ cancelChecker: CancelChecker, params: MobileInstallParams ->
224+
executeService.mobileInstall(
225+
cancelChecker, params,
226+
)
227+
},
228+
params,
229+
)
230+
}
231+
218232
override fun buildTargetCleanCache(params: CleanCacheParams): CompletableFuture<CleanCacheResult> {
219233
return runner.handleRequest("buildTargetCleanCache", { cancelChecker: CancelChecker, params: CleanCacheParams ->
220234
executeService.clean(

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/sync/ExecuteService.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import org.eclipse.lsp4j.jsonrpc.CancelChecker
1717
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException
1818
import org.eclipse.lsp4j.jsonrpc.messages.ResponseError
1919
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode
20+
import org.jetbrains.bsp.MobileInstallParams
21+
import org.jetbrains.bsp.MobileInstallResult
22+
import org.jetbrains.bsp.MobileInstallStartType
2023
import org.jetbrains.bsp.RunWithDebugParams
2124
import org.jetbrains.bsp.bazel.bazelrunner.BazelProcessResult
2225
import org.jetbrains.bsp.bazel.bazelrunner.BazelRunner
@@ -132,6 +135,28 @@ class ExecuteService(
132135
return debugRunner.runWithDebug(cancelChecker, params, singleModule)
133136
}
134137

138+
fun mobileInstall(cancelChecker: CancelChecker, params: MobileInstallParams): MobileInstallResult {
139+
val targets = selectTargets(cancelChecker, listOf(params.target))
140+
val bspId = targets.singleOrResponseError(params.target)
141+
142+
val startType = when (params.startType) {
143+
MobileInstallStartType.NO -> "no"
144+
MobileInstallStartType.COLD -> "cold"
145+
MobileInstallStartType.WARM -> "warm"
146+
MobileInstallStartType.DEBUG -> "debug"
147+
}
148+
149+
val bazelProcessResult = bazelRunner.commandBuilder()
150+
.mobileInstall()
151+
.withArgument(BspMappings.toBspUri(bspId))
152+
.withArgument(BazelFlag.device(params.targetDeviceSerialNumber))
153+
.withArgument(BazelFlag.start(startType))
154+
.withFlag(BazelFlag.color(true))
155+
.executeBazelCommand(params.originId)
156+
.waitAndGetResult(cancelChecker)
157+
return MobileInstallResult(bazelProcessResult.statusCode, params.originId)
158+
}
159+
135160
@Suppress("UNUSED_PARAMETER") // params is used by BspRequestsRunner.handleRequest
136161
fun clean(cancelChecker: CancelChecker, params: CleanCacheParams?): CleanCacheResult {
137162
withBepServer { bepReader ->

0 commit comments

Comments
 (0)