summaryrefslogtreecommitdiff
path: root/contrib/bsp/src/mill/contrib/bsp/TaskParameters.scala
blob: 29a07f17d3089022ee0e2ea1b71339c16707f2dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package mill.contrib.bsp

import scala.collection.JavaConverters._
import ch.epfl.scala.bsp4j.{BuildTargetIdentifier, CompileParams, RunParams, TestParams}


/**
  * Common trait to represent BSP request parameters that
  * have a specific form: include one or more targetIds,
  * arguments for the execution of the task, and an optional
  * origin id generated by the client.
  */
trait Parameters {
  def getTargets: List[BuildTargetIdentifier]

  def getArguments: Option[Seq[String]]

  def getOriginId: Option[String]
}

case class CParams(compileParams: CompileParams) extends Parameters {

  override def getTargets: List[BuildTargetIdentifier] = {
    compileParams.getTargets.asScala.toList
  }

  override def getArguments: Option[Seq[String]] = {
    try {
      Option(compileParams.getArguments.asScala)
    }catch {
      case e: Exception => Option.empty[Seq[String]]
    }
  }

  override def getOriginId: Option[String] = {
    try {
      Option(compileParams.getOriginId)
    }catch {
      case e: Exception => Option.empty[String]
    }
  }

}
case class RParams(runParams: RunParams) extends Parameters {

  override def getTargets: List[BuildTargetIdentifier] = {
    List(runParams.getTarget)
  }

  override def getArguments: Option[Seq[String]] = {
    try {
      Option(runParams.getArguments.asScala)
    }catch {
      case e: Exception => Option.empty[Seq[String]]
    }
  }

  override def getOriginId: Option[String] = {
    try {
      Option(runParams.getOriginId)
    }catch {
      case e: Exception => Option.empty[String]
    }
  }

}
case class TParams(testParams: TestParams) extends Parameters {

  override def getTargets: List[BuildTargetIdentifier] = {
    testParams.getTargets.asScala.toList
  }

  override def getArguments: Option[Seq[String]] = {
    try {
      Option(testParams.getArguments.asScala)
    }catch {
      case e: Exception => Option.empty[Seq[String]]
    }
  }

  override def getOriginId: Option[String] = {
    try {
      Option(testParams.getOriginId)
    }catch {
      case e: Exception => Option.empty[String]
    }
  }
}

object TaskParameters {

  /**
    * Convert parameters specific to the compile request
    * to the common trait Parameters.
    * @param compileParams compile request parameters
    * @return general task parameters containing compilation info
    */
  def fromCompileParams(compileParams: CompileParams): Parameters = {
    CParams(compileParams)
  }

  /**
    * Convert parameters specific to the run request
    * to the common trait Parameters.
    * @param runParams run request parameters
    * @return general task parameters containing running info
    */
  def fromRunParams(runParams: RunParams): Parameters = {
    RParams(runParams)
  }

  /**
    * Convert parameters specific to the test request
    * to the common trait Parameters.
    * @param testParams compile request parameters
    * @return general task parameters containing testing info
    */
  def fromTestParams(testParams: TestParams): Parameters = {
    TParams(testParams)
  }
}