alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (Config.scala)

This example Scala source code file (Config.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

forkjointask, java, java, list, list, option, option, path, properties:\n, scala, string, string, system, testbuild

The Scala Config.scala source code

/* NEST (New Scala Test)
 * Copyright 2007-2011 LAMP/EPFL
 */

package scala.tools
package partest

import io._
import nsc.io._
import Properties._

trait Config {
  universe: Universe =>
  
  lazy val src    = absolutize(srcDir).toDirectory
  lazy val build  = new TestBuild()

  def javaHomeEnv = envOrElse("JAVA_HOME", null)
  def javaCmd     = envOrElse("JAVACMD", "java")
  def javacCmd    = Option(javaHomeEnv) map (x => Path(x) / "bin" / "javac" path) getOrElse "javac"
  
  /** Values related to actors.  The timeouts are in seconds.  On a dry
   *  run we only allocate one worker so the output isn't interspersed.
   */
  def workerTimeout   = 3600                                          // 1 hour, probably overly generous
  def numWorkers      = if (isDryRun) 1 else propOrElse("partest.actors", "8").toInt
  def expectedErrors  = propOrElse("partest.errors", "0").toInt
  def poolSize        = (wrapAccessControl(propOrNone("actors.corePoolSize")) getOrElse "16").toInt
  
  def allScalaFiles = src.deepFiles filter (_ hasExtension "scala")
  def allObjDirs    = src.deepDirs  filter (_ hasExtension "obj")
  def allLogFiles   = src.deepFiles filter (_ hasExtension "log")
  def allClassFiles = src.deepFiles filter (_ hasExtension "class")
  
  class TestBuild() extends BuildContribution {
    import nsc.util.ClassPath

    /** Scala core libs.
     */
    val library       = pathForComponent("library")
    val compiler      = pathForComponent("compiler")
    val partest       = pathForComponent("partest")
    val scalap        = pathForComponent("scalap", "%s.jar")

    /** Scala supplementary libs - these are not all needed for all build targets,
     *  and some of them are copied inside other jars in later targets.  However quick
     *  for instance cannot be run without some of these.
     */
    val fjbg          = pathForLibrary("fjbg")
    val msil          = pathForLibrary("msil")
    val forkjoin      = pathForLibrary("forkjoin")
    val scalacheck    = pathForLibrary("scalacheck")
    
    /** Other interesting paths.
     */
    val scalaBin      = testBuildDir / "bin"
    
    /** A hack for now to get quick running.
     */
    def needsForkJoin = {
      val loader    = nsc.util.ScalaClassLoader.fromURLs(List(library.toURL))
      val fjMarker  = "scala.concurrent.forkjoin.ForkJoinTask"
      val clazz     = loader.tryToLoadClass(fjMarker)
      
      if (clazz.isDefined) debug("Loaded ForkJoinTask OK, don't need jar.")
      else debug("Could not load ForkJoinTask, putting jar on classpath.")
      
      clazz.isEmpty
    }
    lazy val forkJoinPath: List[Path] = if (needsForkJoin) List(forkjoin) else Nil
    
    /** Internal **/
    private def repo  = partestDir.parent.normalize
    
    private def pathForComponent(what: String, jarFormat: String = "scala-%s.jar"): Path = {
      def asDir = testBuildDir / "classes" / what
      def asJar = testBuildDir / "lib" / jarFormat.format(what)

      if (asDir.isDirectory) asDir
      else if (asJar.isFile) asJar
      else ""
    }
    private def pathForLibrary(what: String) = File(repo / "lib" / (what + ".jar"))
  }
  
  def printConfigBanner() = {
    debug("Java VM started with arguments: '%s'" format fromArgs(Process.javaVmArguments))
    debug("System Properties:\n" + util.allPropertiesString())
    
    normal(configBanner())
  }

  /** Treat an access control failure as None. */
  private def wrapAccessControl[T](body: => Option[T]): Option[T] =
    try body catch { case _: java.security.AccessControlException => None }

  private def configBanner() = {
    val javaBin  = Path(javaHome) / "bin"
    val javaInfoString = "%s (build %s, %s)".format(javaVmName, javaVmVersion, javaVmInfo)

    List(
      "Scala compiler classes in: " + testBuildDir,
      "Scala version is:          " + nsc.Properties.versionMsg,
      "Scalac options are:        " + universe.scalacOpts,
      "Java binaries in:          " + javaBin,
      "Java runtime is:           " + javaInfoString,
      "Java runtime options:      " + (Process.javaVmArguments mkString " "),
      "Javac options are:         " + universe.javacOpts,
      "Java options are:          " + universe.javaOpts,
      "Source directory is:       " + src,
      "Selected categories:       " + (selectedCategories mkString " "),
      ""
    ) mkString "\n"
  }
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala Config.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.