mirror of https://github.com/sbt/sbt.git
39 lines
1.3 KiB
Scala
39 lines
1.3 KiB
Scala
package sbt
|
|
|
|
import Keys.Classpath
|
|
import Project.Setting
|
|
import PluginManagement._
|
|
|
|
import java.net.{URL,URLClassLoader}
|
|
|
|
final case class PluginManagement(overrides: Set[ModuleID], applyOverrides: Set[ModuleID], loader: PluginClassLoader, initialLoader: ClassLoader)
|
|
{
|
|
def shift: PluginManagement =
|
|
PluginManagement(Set.empty, overrides, new PluginClassLoader(initialLoader), initialLoader)
|
|
|
|
def addOverrides(os: Set[ModuleID]): PluginManagement =
|
|
copy(overrides = overrides ++ os)
|
|
|
|
def addOverrides(cp: Classpath): PluginManagement =
|
|
addOverrides(extractOverrides(cp))
|
|
|
|
def inject: Seq[Setting[_]] = Seq(
|
|
Keys.dependencyOverrides ++= overrides
|
|
)
|
|
}
|
|
object PluginManagement
|
|
{
|
|
def apply(initialLoader: ClassLoader): PluginManagement =
|
|
PluginManagement(Set.empty, Set.empty, new PluginClassLoader(initialLoader), initialLoader)
|
|
|
|
def extractOverrides(classpath: Classpath): Set[ModuleID] =
|
|
classpath flatMap { _.metadata get Keys.moduleID.key map keepOverrideInfo } toSet;
|
|
|
|
def keepOverrideInfo(m: ModuleID): ModuleID =
|
|
ModuleID(m.organization, m.name, m.revision, crossVersion = m.crossVersion)
|
|
|
|
final class PluginClassLoader(p: ClassLoader) extends URLClassLoader(Array(), p) {
|
|
def add(urls: Seq[URL]): Unit = synchronized { urls foreach addURL }
|
|
}
|
|
}
|