From e7a21be0ca3cf7152b5798317fff346220caae32 Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Wed, 29 Mar 2017 08:36:39 -0400 Subject: make .scala sources 2.12 compatible --- stage1/Stage1Lib.scala | 3 ++- stage1/resolver.scala | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'stage1') diff --git a/stage1/Stage1Lib.scala b/stage1/Stage1Lib.scala index 392b885..1698621 100644 --- a/stage1/Stage1Lib.scala +++ b/stage1/Stage1Lib.scala @@ -314,9 +314,10 @@ ${sourceFiles.sorted.mkString(" \\\n")} .map( dejavafy ) .orElse{ (cacheFile.exists && cacheFile.lastModified > cbtLastModified).option{ - import collection.JavaConversions._ + import collection.JavaConverters._ val v = Files .readAllLines( cacheFile.toPath, StandardCharsets.UTF_8 ) + .asScala .toStream .map( deserialize ) persistentCache.put(key, Array(System.currentTimeMillis:java.lang.Long, javafy(v))) diff --git a/stage1/resolver.scala b/stage1/resolver.scala index 6134a16..48099e5 100644 --- a/stage1/resolver.scala +++ b/stage1/resolver.scala @@ -108,7 +108,7 @@ trait DependencyImplementation extends Dependency{ def flatClassLoader: Boolean = false - def classLoader: ClassLoader = taskCache[DependencyImplementation]( "classLoader" ).memoize{ + override def classLoader: ClassLoader = taskCache[DependencyImplementation]( "classLoader" ).memoize{ if( flatClassLoader ){ new java.net.URLClassLoader(classpath.strings.map(f => new URL("file://" ++ f)).toArray) } else { @@ -170,13 +170,13 @@ case class BinaryDependency( paths: Seq[File], dependencies: Seq[Dependency] )(i def exportedClasspath = ClassPath(paths) override def lastModified = paths.map(_.lastModifiedRecursive).max // FIXME: cache this def targetClasspath = exportedClasspath - lazy val moduleKey = this.getClass.getName + "(" + paths.mkString(", ") + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + paths.mkString(", ") + ")" // PERFORMANCE HOTSPOT } /** Allows to easily assemble a bunch of dependencies */ case class Dependencies( dependencies: Seq[Dependency] )(implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache) extends DependencyImplementation{ override def lastModified = dependencies.map(_.lastModified).maxOption.getOrElse(0) - lazy val moduleKey = this.getClass.getName + "(" + dependencies.map(_.moduleKey).mkString(", ") + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + dependencies.map(_.moduleKey).mkString(", ") + ")" // PERFORMANCE HOTSPOT def targetClasspath = ClassPath() def exportedClasspath = ClassPath() override def show: String = this.getClass.getSimpleName + "( " + dependencies.map(_.show).mkString(", ") + " )" @@ -184,7 +184,7 @@ case class Dependencies( dependencies: Seq[Dependency] )(implicit val logger: Lo case class PostBuildDependency(target: File, _dependencies: Seq[DependencyImplementation])(implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache) extends DependencyImplementation{ override final lazy val lastModified = (target++".last-success").lastModified - lazy val moduleKey = target.string + override lazy val moduleKey = target.string override def show = s"PostBuildDependency($target)" override def targetClasspath = exportedClasspath override def exportedClasspath = ClassPath( Seq(target) ) @@ -246,7 +246,7 @@ case class BoundMavenDependency( )( implicit val logger: Logger, val transientCache: java.util.Map[AnyRef,AnyRef], val classLoaderCache: ClassLoaderCache ) extends ArtifactInfo with DependencyImplementation{ - lazy val moduleKey = this.getClass.getName + "(" + mavenDependency.serialize + ")" // PERFORMANCE HOTSPOT + override lazy val moduleKey = this.getClass.getName + "(" + mavenDependency.serialize + ")" // PERFORMANCE HOTSPOT override def hashCode = mavenDependency.hashCode override def equals(other: Any) = other match{ case o: BoundMavenDependency => o.mavenDependency == mavenDependency && o.repositories == repositories @@ -284,7 +284,7 @@ case class BoundMavenDependency( def exportedJars = Seq( jar ) override def exportedClasspath = ClassPath( exportedJars ) override def targetClasspath = exportedClasspath - import scala.collection.JavaConversions._ + import scala.collection.JavaConverters._ private def resolve(suffix: String, hash: Option[String], useClassifier: Boolean): File = { logger.resolver(lib.blue("Resolving ")+this) @@ -304,7 +304,7 @@ case class BoundMavenDependency( val result = Files.readAllLines( path, StandardCharsets.UTF_8 - ).mkString("\n").split(" ").head.trim + ).asScala.mkString("\n").split(" ").head.trim classLoaderCache.hashMap.put("hash:"+path, result) result } -- cgit v1.2.3 From 5553c92eec89fa06c6eaa61645b2c9cb8332f404 Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Wed, 29 Mar 2017 09:04:19 -0400 Subject: centralize all references to scala versions into single place --- nailgun_launcher/EarlyDependencies.java | 68 +++++++++++++++++---------------- nailgun_launcher/Stage0Lib.java | 10 ++--- stage1/constants.scala | 6 +-- stage2/ToolsTasks.scala | 49 +++++++++++++++++++----- 4 files changed, 83 insertions(+), 50 deletions(-) (limited to 'stage1') diff --git a/nailgun_launcher/EarlyDependencies.java b/nailgun_launcher/EarlyDependencies.java index 6683393..5725e3a 100644 --- a/nailgun_launcher/EarlyDependencies.java +++ b/nailgun_launcher/EarlyDependencies.java @@ -8,7 +8,11 @@ import java.util.*; import static cbt.Stage0Lib.*; import static cbt.NailgunLauncher.*; -class EarlyDependencies{ +public class EarlyDependencies{ + + public static String scalaVersion = "2.11.8"; + public static String scalaXmlVersion = "1.0.6"; + public static String zincVersion = "0.3.13"; /** ClassLoader for stage1 */ ClassLoader classLoader; @@ -16,32 +20,26 @@ class EarlyDependencies{ /** ClassLoader for zinc */ ClassLoader zinc; - String scalaReflect_2_11_8_File; - String scalaCompiler_2_11_8_File; - String scalaXml_1_0_5_File; - String scalaLibrary_2_11_8_File; - String zinc_0_3_13_File; - String incrementalCompiler_0_13_13_File; - String compilerInterface_0_13_13_File; - String scalaCompiler_2_10_6_File; - String sbtInterface_0_13_13_File; - String scalaReflect_2_10_6_File; - String scalaLibrary_2_10_6_File; + String scalaCompiler_File; + String scalaLibrary_File; + String scalaReflect_File; + String sbtInterface_File; + String compilerInterface_File; public EarlyDependencies( String mavenCache, String mavenUrl, ClassLoaderCache classLoaderCache, ClassLoader rootClassLoader ) throws Throwable { - scalaReflect_2_11_8_File = mavenCache + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"; - scalaCompiler_2_11_8_File = mavenCache + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"; - scalaXml_1_0_5_File = mavenCache + "/org/scala-lang/modules/scala-xml_2.11/1.0.5/scala-xml_2.11-1.0.5.jar"; - scalaLibrary_2_11_8_File = mavenCache + "/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar"; - zinc_0_3_13_File = mavenCache + "/com/typesafe/zinc/zinc/0.3.13/zinc-0.3.13.jar"; - incrementalCompiler_0_13_13_File = mavenCache + "/com/typesafe/sbt/incremental-compiler/0.13.13/incremental-compiler-0.13.13.jar"; - compilerInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/compiler-interface/0.13.13/compiler-interface-0.13.13-sources.jar"; - scalaCompiler_2_10_6_File = mavenCache + "/org/scala-lang/scala-compiler/2.10.6/scala-compiler-2.10.6.jar"; - sbtInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/sbt-interface/0.13.13/sbt-interface-0.13.13.jar"; - scalaReflect_2_10_6_File = mavenCache + "/org/scala-lang/scala-reflect/2.10.6/scala-reflect-2.10.6.jar"; - scalaLibrary_2_10_6_File = mavenCache + "/org/scala-lang/scala-library/2.10.6/scala-library-2.10.6.jar"; + String scalaReflect_2_11_8_File = mavenCache + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"; + String scalaCompiler_2_11_8_File = mavenCache + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"; + String scalaXml_1_0_6_File = mavenCache + "/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jar"; + String scalaLibrary_2_11_8_File = mavenCache + "/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar"; + String zinc_0_3_13_File = mavenCache + "/com/typesafe/zinc/zinc/0.3.13/zinc-0.3.13.jar"; + String incrementalCompiler_0_13_13_File = mavenCache + "/com/typesafe/sbt/incremental-compiler/0.13.13/incremental-compiler-0.13.13.jar"; + String compilerInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/compiler-interface/0.13.13/compiler-interface-0.13.13-sources.jar"; + String scalaCompiler_2_10_6_File = mavenCache + "/org/scala-lang/scala-compiler/2.10.6/scala-compiler-2.10.6.jar"; + String sbtInterface_0_13_13_File = mavenCache + "/com/typesafe/sbt/sbt-interface/0.13.13/sbt-interface-0.13.13.jar"; + String scalaReflect_2_10_6_File = mavenCache + "/org/scala-lang/scala-reflect/2.10.6/scala-reflect-2.10.6.jar"; + String scalaLibrary_2_10_6_File = mavenCache + "/org/scala-lang/scala-library/2.10.6/scala-library-2.10.6.jar"; download(new URL(mavenUrl + "/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar"), Paths.get(scalaReflect_2_11_8_File), "b74530deeba742ab4f3134de0c2da0edc49ca361"); download(new URL(mavenUrl + "/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jar"), Paths.get(scalaCompiler_2_11_8_File), "fe1285c9f7b58954c5ef6d80b59063569c065e9a"); @@ -134,20 +132,26 @@ class EarlyDependencies{ scalaLibrary_2_11_8_ClasspathArray ); - // org.scala-lang.modules:scala-xml_2.11:1.0.5 - String[] scalaXml_1_0_5_ClasspathArray = new String[]{scalaXml_1_0_5_File, scalaLibrary_2_11_8_File}; - ClassLoader scalaXml_1_0_5_ = loadDependency( - mavenUrl + "/org/scala-lang/modules/scala-xml_2.11/1.0.5/scala-xml_2.11-1.0.5.jar", - scalaXml_1_0_5_File, - "77ac9be4033768cf03cc04fbd1fc5e5711de2459", + // org.scala-lang.modules:scala-xml_2.11:1.0.6 + String[] scalaXml_1_0_6_ClasspathArray = new String[]{scalaXml_1_0_6_File, scalaLibrary_2_11_8_File}; + ClassLoader scalaXml_1_0_6_ = loadDependency( + mavenUrl + "/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jar", + scalaXml_1_0_6_File, + "4ebd108453e6455351c0ec50d32509ae1154fdb1", classLoaderCache, scalaLibrary_2_11_8_, - scalaXml_1_0_5_ClasspathArray + scalaXml_1_0_6_ClasspathArray ); - classLoader = scalaXml_1_0_5_; - classpathArray = scalaXml_1_0_5_ClasspathArray; + classLoader = scalaXml_1_0_6_; + classpathArray = scalaXml_1_0_6_ClasspathArray; zinc = zinc_0_3_13_; + + scalaCompiler_File = scalaCompiler_2_11_8_File; + scalaLibrary_File = scalaLibrary_2_11_8_File; + scalaReflect_File = scalaReflect_2_11_8_File; + sbtInterface_File = sbtInterface_0_13_13_File; + compilerInterface_File = compilerInterface_0_13_13_File; } } diff --git a/nailgun_launcher/Stage0Lib.java b/nailgun_launcher/Stage0Lib.java index 34af7b0..456e9d1 100644 --- a/nailgun_launcher/Stage0Lib.java +++ b/nailgun_launcher/Stage0Lib.java @@ -102,11 +102,11 @@ public class Stage0Lib{ List zincArgs = new ArrayList( Arrays.asList( new String[]{ - "-scala-compiler", earlyDeps.scalaCompiler_2_11_8_File, - "-scala-library", earlyDeps.scalaLibrary_2_11_8_File, - "-scala-extra", earlyDeps.scalaReflect_2_11_8_File, - "-sbt-interface", earlyDeps.sbtInterface_0_13_13_File, - "-compiler-interface", earlyDeps.compilerInterface_0_13_13_File, + "-scala-compiler", earlyDeps.scalaCompiler_File, + "-scala-library", earlyDeps.scalaLibrary_File, + "-scala-extra", earlyDeps.scalaReflect_File, + "-sbt-interface", earlyDeps.sbtInterface_File, + "-compiler-interface", earlyDeps.compilerInterface_File, "-cp", classpath, "-d", target, "-S-deprecation", diff --git a/stage1/constants.scala b/stage1/constants.scala index ebc892c..d87fb64 100644 --- a/stage1/constants.scala +++ b/stage1/constants.scala @@ -1,7 +1,7 @@ package cbt object constants{ - val scalaXmlVersion = "1.0.5" - val scalaVersion = "2.11.8" - val zincVersion = "0.3.13" + val scalaXmlVersion = EarlyDependencies.scalaXmlVersion + val scalaVersion = EarlyDependencies.scalaVersion + val zincVersion = EarlyDependencies.zincVersion val scalaMajorVersion = scalaVersion.split("\\.").take(2).mkString(".") } diff --git a/stage2/ToolsTasks.scala b/stage2/ToolsTasks.scala index 15052ae..a55bc7f 100644 --- a/stage2/ToolsTasks.scala +++ b/stage2/ToolsTasks.scala @@ -51,7 +51,7 @@ class ToolsTasks( val version = args.lift(1).getOrElse(constants.scalaVersion) val ammonite = Resolver(mavenCentral).bindOne( MavenDependency( - "com.lihaoyi","ammonite-repl_2.11.8",args.lift(1).getOrElse("0.5.8") + "com.lihaoyi","ammonite-repl_"++constants.scalaVersion,args.lift(1).getOrElse("0.5.8") ) ) // FIXME: this does not work quite yet, throws NoSuchFileException: /ammonite/repl/frontend/ReplBridge$.class @@ -76,7 +76,7 @@ class ToolsTasks( Resolver(mavenCentral).bindOne(MavenDependency("org.scala-lang","scala-reflect",scalaVersion)), Resolver(mavenCentral).bindOne(MavenDependency("org.scala-lang","scala-compiler",scalaVersion)) ) - + val scalaXml = Dependencies( Resolver(mavenCentral).bind( MavenDependency("org.scala-lang.modules","scala-xml_"+scalaMajorVersion,scalaXmlVersion), @@ -85,6 +85,17 @@ class ToolsTasks( ) val zinc = Resolver(mavenCentral).bindOne(MavenDependency("com.typesafe.zinc","zinc",zincVersion)) + val sbtVersion = + zinc.dependencies + .collect{ case d @ + BoundMavenDependency( + _, _, MavenDependency( "com.typesafe.sbt", "compiler-interface", _, Classifier.sources, _), _, _ + ) => d + } + .headOption + .getOrElse( throw new Exception(s"cannot find compiler-interface in zinc $zincVersion dependencies: "++zinc.dependencies.toString) ) + .mavenDependency + .version def valName(dep: BoundMavenDependency) = { val words = dep.artifactId.split("_").head.split("-") @@ -93,7 +104,7 @@ class ToolsTasks( def jarVal(dep: BoundMavenDependency) = "_" + valName(dep) +"Jar" def transitive(dep: Dependency) = (dep +: lib.transitiveDependencies(dep).reverse).collect{case d: BoundMavenDependency => d} - def codeEach(dep: Dependency) = { + def codeEach(dep: Dependency) = { transitive(dep).tails.map(_.reverse).toVector.reverse.drop(1).map{ deps => val d = deps.last @@ -115,6 +126,10 @@ class ToolsTasks( } val assignments = codeEach(zinc) ++ codeEach(scalaXml) val files = scalaDeps ++ transitive(scalaXml) ++ transitive(zinc) + val _scalaVersion = scalaVersion.replace(".","_") + val _scalaXmlVersion = scalaXmlVersion.replace(".","_") + val _zincVersion = zincVersion.replace(".","_") + val _sbtVersion = sbtVersion.replace(".","_") //{ case (name, dep) => s"$name =\n ${tree(dep, 4)};" }.mkString("\n\n ") val code = s"""// This file was auto-generated using `cbt tools cbtEarlyDependencies` package cbt; @@ -126,7 +141,11 @@ import java.util.*; import static cbt.Stage0Lib.*; import static cbt.NailgunLauncher.*; -class EarlyDependencies{ +public class EarlyDependencies{ + + public static String scalaVersion = "$scalaVersion"; + public static String scalaXmlVersion = "$scalaXmlVersion"; + public static String zincVersion = "$zincVersion"; /** ClassLoader for stage1 */ ClassLoader classLoader; @@ -134,25 +153,35 @@ class EarlyDependencies{ /** ClassLoader for zinc */ ClassLoader zinc; -${files.map(d => s""" String ${valName(d)}File;""").mkString("\n")} + String scalaCompiler_File; + String scalaLibrary_File; + String scalaReflect_File; + String sbtInterface_File; + String compilerInterface_File; public EarlyDependencies( String mavenCache, String mavenUrl, ClassLoaderCache classLoaderCache, ClassLoader rootClassLoader ) throws Throwable { -${files.map(d => s""" ${valName(d)}File = mavenCache + "${d.basePath(true)}.jar";""").mkString("\n")} +${files.map(d => s""" String ${valName(d)}File = mavenCache + "${d.basePath(true)}.jar";""").mkString("\n")} ${scalaDeps.map(d => s""" download(new URL(mavenUrl + "${d.basePath(true)}.jar"), Paths.get(${valName(d)}File), "${d.jarSha1}");""").mkString("\n")} ${assignments.mkString("\n")} - classLoader = scalaXml_${scalaXmlVersion.replace(".","_")}_; - classpathArray = scalaXml_${scalaXmlVersion.replace(".","_")}_ClasspathArray; + classLoader = scalaXml_${_scalaXmlVersion}_; + classpathArray = scalaXml_${_scalaXmlVersion}_ClasspathArray; + + zinc = zinc_${_zincVersion}_; - zinc = zinc_${zincVersion.replace(".","_")}_; + scalaCompiler_File = scalaCompiler_${_scalaVersion}_File; + scalaLibrary_File = scalaLibrary_${_scalaVersion}_File; + scalaReflect_File = scalaReflect_${_scalaVersion}_File; + sbtInterface_File = sbtInterface_${_sbtVersion}_File; + compilerInterface_File = compilerInterface_${_sbtVersion}_File; } } """ val file = nailgun ++ ("/" ++ "EarlyDependencies.java") - lib.write( file, code ) + lib.writeIfChanged( file, code ) println( Console.GREEN ++ "Wrote " ++ file.string ++ Console.RESET ) } } -- cgit v1.2.3