diff --git a/internal/zinc-ivy-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala b/internal/zinc-ivy-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala new file mode 100644 index 000000000..4c3e915d2 --- /dev/null +++ b/internal/zinc-ivy-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala @@ -0,0 +1,49 @@ +/* + * Zinc - The incremental compiler for Scala. + * Copyright 2011 - 2017, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * This software is released under the terms written in LICENSE. + */ + +package sbt.internal.inc + +import java.io.File +import java.net.URLClassLoader + +import sbt.librarymanagement.{ DependencyResolution, ModuleID } +import sbt.internal.inc.classpath.ClassLoaderCache +import xsbti._ +import xsbti.compile._ + +object ZincLmUtil { + import xsbti.compile.ScalaInstance + + /** + * Instantiate a Scala compiler that is instrumented to analyze dependencies. + * This Scala compiler is useful to create your own instance of incremental + * compilation. + */ + def scalaCompiler( + scalaInstance: ScalaInstance, + classpathOptions: ClasspathOptions, + globalLock: GlobalLock, + componentProvider: ComponentProvider, + secondaryCacheDir: Option[File], + dependencyResolution: DependencyResolution, + compilerBridgeSource: ModuleID, + scalaJarsTarget: File, + log: Logger + ): AnalyzingCompiler = { + val compilerBridgeProvider = ZincComponentCompiler.interfaceProvider( + compilerBridgeSource, + new ZincComponentManager(globalLock, componentProvider, secondaryCacheDir, log), + dependencyResolution, + scalaJarsTarget, + ) + val loader = Some(new ClassLoaderCache(new URLClassLoader(new Array(0)))) + new AnalyzingCompiler(scalaInstance, compilerBridgeProvider, classpathOptions, _ => (), loader) + } + + def getDefaultBridgeModule(scalaVersion: String): ModuleID = + ZincComponentCompiler.getDefaultBridgeModule(scalaVersion) +} diff --git a/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/BridgeProviderSpecification.scala b/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala similarity index 75% rename from internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/BridgeProviderSpecification.scala rename to internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala index abd2485a4..283b3f0c7 100644 --- a/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/BridgeProviderSpecification.scala +++ b/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala @@ -2,7 +2,6 @@ package sbt.internal.inc import java.io.File -import sbt.io.IO import sbt.io.syntax._ import sbt.librarymanagement._ import sbt.librarymanagement.ivy._ @@ -14,7 +13,7 @@ import xsbti.compile.CompilerBridgeProvider * * This is a very good example on how to instantiate the compiler bridge provider. */ -abstract class BridgeProviderSpecification extends UnitSpec { +abstract class IvyBridgeProviderSpecification extends UnitSpec with AbstractBridgeProviderTestkit { def currentBase: File = new File(".") def currentTarget: File = currentBase / "target" / "ivyhome" def currentManaged: File = currentBase / "target" / "lib_managed" @@ -37,22 +36,6 @@ abstract class BridgeProviderSpecification extends UnitSpec { ZincComponentCompiler.interfaceProvider(manager, dependencyResolution, currentManaged) } - def getCompilerBridge(targetDir: File, log: Logger, scalaVersion: String): File = { - val provider = getZincProvider(targetDir, log) - val scalaInstance = provider.fetchScalaInstance(scalaVersion, log) - val bridge = provider.fetchCompiledBridge(scalaInstance, log) - val target = targetDir / s"target-bridge-$scalaVersion.jar" - IO.copyFile(bridge, target) - target - } - - def scalaInstance(scalaVersion: String, - targetDir: File, - logger: Logger): xsbti.compile.ScalaInstance = { - val provider = getZincProvider(targetDir, logger) - provider.fetchScalaInstance(scalaVersion, logger) - } - private def getDefaultConfiguration(baseDirectory: File, ivyHome: File, resolvers0: Array[Resolver], diff --git a/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala b/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala index 2073da404..c6df524bb 100644 --- a/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala +++ b/internal/zinc-ivy-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala @@ -3,7 +3,7 @@ package sbt.internal.inc import sbt.internal.util.ConsoleLogger import sbt.io.IO -class ZincComponentCompilerSpec extends BridgeProviderSpecification { +class ZincComponentCompilerSpec extends IvyBridgeProviderSpecification { val scala2105 = "2.10.5" val scala2106 = "2.10.6" val scala2118 = "2.11.8"