From 9375c88a8bcf970ffd64582a7c83dbff7a0869e5 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Sun, 8 Jan 2017 21:59:19 +0100 Subject: [PATCH] OverrideScalaMediator: fix bootstrapping a Scala compiler Fixes #2867, #2896 --- .../scala/sbt/librarymanagement/IvyScalaExtra.scala | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/librarymanagement/src/main/scala/sbt/librarymanagement/IvyScalaExtra.scala b/librarymanagement/src/main/scala/sbt/librarymanagement/IvyScalaExtra.scala index 13cd79154..4cfffd856 100644 --- a/librarymanagement/src/main/scala/sbt/librarymanagement/IvyScalaExtra.scala +++ b/librarymanagement/src/main/scala/sbt/librarymanagement/IvyScalaExtra.scala @@ -62,13 +62,22 @@ private[sbt] abstract class IvyScalaFunctions { // Mediate only for the dependencies in scalaVersion configurations. https://github.com/sbt/sbt/issues/2786 def configQualifies: Boolean = (dd.getModuleConfigurations exists { scalaVersionConfigs }) + // Do not rewrite the dependencies of Scala dependencies themselves, this prevents bootstrapping + // a Scala compiler using another Scala compiler. + def dependeeQualifies: Boolean = + dd.getParentRevisionId.getName match { + case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) => + false + case _ => + true + } val transformer = new NamespaceTransformer { def transform(mrid: ModuleRevisionId): ModuleRevisionId = { if (mrid == null) mrid else mrid.getName match { - case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) if configQualifies => + case name @ (CompilerID | LibraryID | ReflectID | ActorsID | ScalapID) if configQualifies && dependeeQualifies => ModuleRevisionId.newInstance(scalaOrganization, name, mrid.getBranch, scalaVersion, mrid.getQualifiedExtraAttributes) case _ => mrid }