aboutsummaryrefslogtreecommitdiff
path: root/stage2/BuildDependency.scala
blob: d7520d851f421c979b6a0084b8fd8723b6b6bac7 (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
package cbt
import java.io.File
/*
sealed abstract class ProjectProxy extends Ha{
  protected def delegate: ProjectMetaData
  def artifactId: String = delegate.artifactId
  def groupId: String = delegate.groupId
  def version: String = delegate.version
  def exportedClasspath = delegate.exportedClasspath
  def dependencies = Seq(delegate)
}
*/
trait TriggerLoop extends DependencyImplementation{
  final def triggerLoopFilesArray = triggerLoopFiles.toArray
  def triggerLoopFiles: Seq[File]
}
/** You likely want to use the factory method in the BasicBuild class instead of this. */
object DirectoryDependency{
  def apply(context: Context, pathToNestedBuild: String*): BuildInterface = {
    val lib: Lib = new Lib(context.logger)

    // TODO: move this into finalBuild probably
    // TODO: unify this with lib.callReflective
    def selectNestedBuild( build: BuildInterface, names: Seq[String], previous: Seq[String] ): BuildInterface = {
      names.headOption.map{ name =>
        if( lib.taskNames(build.getClass).contains(name) ){
          val method = build.getClass.getMethod(name)
          val returnType = method.getReturnType
          if( classOf[BuildInterface] isAssignableFrom returnType ){
            selectNestedBuild(
              method.invoke(build).asInstanceOf[BuildInterface],
              names.tail,
              previous :+ name
            )
          } else {
            throw new RuntimeException(
              s"Expected subtype of BuildInterface, found $returnType for  " + previous.mkString(".") + " in " + build
            )
          }
        } else {
          throw new RuntimeException( (previous :+ name).mkString(".") + " not found in " + build )
        }
      }.getOrElse( build )
    }
    selectNestedBuild(
      lib.loadRoot( context ).finalBuild(context.workingDirectory),
      pathToNestedBuild,
      Nil
    )
  }
}
/*
case class DependencyOr(first: DirectoryDependency, second: JavaDependency) extends ProjectProxy with DirectoryDependencyBase{
  val isFirst = new File(first.projectDirectory).exists
  def triggerLoopFiles = if(isFirst) first.triggerLoopFiles else Seq()
  protected val delegate = if(isFirst) first else second
}
*/