From 0d0476eaa90a86fbf0db87fffa3d7e4792e2eb19 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 --- ivy/src/main/scala/sbt/IvyScala.scala | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/IvyScala.scala b/ivy/src/main/scala/sbt/IvyScala.scala index 0c43f662b..20490ce54 100644 --- a/ivy/src/main/scala/sbt/IvyScala.scala +++ b/ivy/src/main/scala/sbt/IvyScala.scala @@ -64,13 +64,22 @@ private object IvyScala { // 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 }