summaryrefslogtreecommitdiff
path: root/contrib/bsp/src/mill/contrib/bsp/TaskParameters.scala
blob: a235c9228f11e0ecb134fd14b7e258fca72e03d9 (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
122
123
124
125
126
127
package mill.contrib.bsp

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

import scala.collection.JavaConverters._


/**
  * 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)
  }
}