summaryrefslogblamecommitdiff
path: root/contrib/bsp/src/mill/contrib/bsp/TaskParameters.scala
blob: 29a07f17d3089022ee0e2ea1b71339c16707f2dd (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
                        

                                        

                                                                                        






                                                            













































































                                                                     






                                                                 



                                                                     





                                                             



                                                         





                                                             



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