diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-08-16 11:47:25 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-08-16 11:47:25 -0700 |
commit | 693b932023fea433696fc9518a0fa7d56514d12e (patch) | |
tree | c720d7d17f578906aba1f45aa8d7fc4484f47ca2 | |
parent | 63bce12e94eb4480823627d6328f74befa421bbf (diff) | |
parent | ee6e25e2f70747795b42b2d5bce8ac94a95cc948 (diff) | |
download | scala-693b932023fea433696fc9518a0fa7d56514d12e.tar.gz scala-693b932023fea433696fc9518a0fa7d56514d12e.tar.bz2 scala-693b932023fea433696fc9518a0fa7d56514d12e.zip |
Merge pull request #2777 from soc/SI-7681-dead-code-daemonthreadfactory
SI-7681 Remove DaemonThreadFactory, clean up IMain
-rw-r--r-- | src/compiler/scala/tools/nsc/io/DaemonThreadFactory.scala | 21 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/io/package.scala | 14 | ||||
-rw-r--r-- | src/repl/scala/tools/nsc/interpreter/IMain.scala | 77 |
3 files changed, 35 insertions, 77 deletions
diff --git a/src/compiler/scala/tools/nsc/io/DaemonThreadFactory.scala b/src/compiler/scala/tools/nsc/io/DaemonThreadFactory.scala deleted file mode 100644 index 98c3d27202..0000000000 --- a/src/compiler/scala/tools/nsc/io/DaemonThreadFactory.scala +++ /dev/null @@ -1,21 +0,0 @@ -/* NSC -- new Scala compiler - * Copyright 2005-2013 LAMP/EPFL - * @author Paul Phillips - */ - -package scala.tools.nsc -package io - -import java.util.concurrent._ - -class DaemonThreadFactory extends ThreadFactory { - def newThread(r: Runnable): Thread = { - val thread = new Thread(r) - thread setDaemon true - thread - } -} - -object DaemonThreadFactory { - def newPool() = Executors.newCachedThreadPool(new DaemonThreadFactory) -}
\ No newline at end of file diff --git a/src/compiler/scala/tools/nsc/io/package.scala b/src/compiler/scala/tools/nsc/io/package.scala index 0b2db115fb..5f2f90c284 100644 --- a/src/compiler/scala/tools/nsc/io/package.scala +++ b/src/compiler/scala/tools/nsc/io/package.scala @@ -5,8 +5,6 @@ package scala.tools.nsc -import java.util.concurrent.{ Future, Callable } -import java.util.{ Timer, TimerTask } import scala.language.implicitConversions package object io { @@ -29,16 +27,4 @@ package object io { type JFile = java.io.File implicit def enrichManifest(m: JManifest): Jar.WManifest = Jar.WManifest(m) - private lazy val daemonThreadPool = DaemonThreadFactory.newPool() - - def runnable(body: => Unit): Runnable = new Runnable { override def run() = body } - def callable[T](body: => T): Callable[T] = new Callable[T] { override def call() = body } - def spawn[T](body: => T): Future[T] = daemonThreadPool submit callable(body) - - def newThread(f: Thread => Unit)(body: => Unit): Thread = { - val thread = new Thread(runnable(body)) - f(thread) - thread.start - thread - } } diff --git a/src/repl/scala/tools/nsc/interpreter/IMain.scala b/src/repl/scala/tools/nsc/interpreter/IMain.scala index 5b3f64afca..e288739e77 100644 --- a/src/repl/scala/tools/nsc/interpreter/IMain.scala +++ b/src/repl/scala/tools/nsc/interpreter/IMain.scala @@ -7,30 +7,23 @@ package scala package tools.nsc package interpreter -import Predef.{ println => _, _ } -import util.stringFromWriter -import scala.reflect.internal.util._ -import java.net.URL -import scala.sys.BooleanProp -import scala.tools.nsc.io.AbstractFile -import reporters._ +import scala.language.implicitConversions + +import scala.collection.mutable + +import scala.concurrent.{ Future, ExecutionContext } + +import scala.reflect.runtime.{ universe => ru } +import scala.reflect.{ BeanProperty, ClassTag, classTag } +import scala.reflect.internal.util.{ BatchSourceFile, SourceFile } + import scala.tools.util.PathResolver -import scala.tools.nsc.util.ScalaClassLoader +import scala.tools.nsc.io.AbstractFile import scala.tools.nsc.typechecker.{ TypeStrings, StructuredTypeStrings } -import ScalaClassLoader.URLClassLoader +import scala.tools.nsc.util.{ ScalaClassLoader, stringFromWriter } import scala.tools.nsc.util.Exceptional.unwrap -import scala.collection.{ mutable, immutable } -import scala.reflect.BeanProperty -import scala.util.Properties.versionString + import javax.script.{AbstractScriptEngine, Bindings, ScriptContext, ScriptEngine, ScriptEngineFactory, ScriptException, CompiledScript, Compilable} -import java.io.{ StringWriter, Reader } -import java.util.Arrays -import IMain._ -import java.util.concurrent.Future -import scala.reflect.runtime.{ universe => ru } -import scala.reflect.{ ClassTag, classTag } -import StdReplTags._ -import scala.language.implicitConversions /** An interpreter for Scala code. * @@ -92,7 +85,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set private var _classLoader: util.AbstractFileClassLoader = null // active classloader private val _compiler: ReplGlobal = newCompiler(settings, reporter) // our private compiler - def compilerClasspath: Seq[URL] = ( + def compilerClasspath: Seq[java.net.URL] = ( if (isInitializeComplete) global.classPath.asURLs else new PathResolver(settings).result.asURLs // the compiler's classpath ) @@ -142,10 +135,8 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set def initialize(postInitSignal: => Unit) { synchronized { if (_isInitialized == null) { - _isInitialized = io.spawn { - try _initialize() - finally postInitSignal - } + _isInitialized = + Future(try _initialize() finally postInitSignal)(ExecutionContext.global) } } } @@ -241,7 +232,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set lazy val isettings = new ISettings(this) /** Instantiate a compiler. Overridable. */ - protected def newCompiler(settings: Settings, reporter: Reporter): ReplGlobal = { + protected def newCompiler(settings: Settings, reporter: reporters.Reporter): ReplGlobal = { settings.outputDirs setSingleOutput replOutput.dir settings.exposeEmptyPackage.value = true new Global(settings, reporter) with ReplGlobal { override def toString: String = "<global>" } @@ -334,7 +325,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set private def makeClassLoader(): util.AbstractFileClassLoader = new TranslatingClassLoader(parentClassLoader match { case null => ScalaClassLoader fromURLs compilerClasspath - case p => new URLClassLoader(compilerClasspath, p) + case p => new ScalaClassLoader.URLClassLoader(compilerClasspath, p) }) // Set the current Java "context" class loader to this interpreter's class loader @@ -555,7 +546,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set var code = "" var bound = false - @throws(classOf[ScriptException]) + @throws[ScriptException] def compile(script: String): CompiledScript = { if (!bound) { quietBind("engine" -> this.asInstanceOf[ScriptEngine]) @@ -583,9 +574,9 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set } } - @throws(classOf[ScriptException]) - def compile(reader: Reader): CompiledScript = { - val writer = new StringWriter() + @throws[ScriptException] + def compile(reader: java.io.Reader): CompiledScript = { + val writer = new java.io.StringWriter() var c = reader.read() while(c != -1) { writer.write(c) @@ -605,7 +596,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set * escape. We could have wrapped runtime exceptions just like other * exceptions in ScriptException, this is a choice. */ - @throws(classOf[ScriptException]) + @throws[ScriptException] def eval(context: ScriptContext): Object = { val result = req.lineRep.evalEither match { case Left(e: RuntimeException) => throw e @@ -738,7 +729,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set val unwrapped = unwrap(t) withLastExceptionLock[String]({ - directBind[Throwable]("lastException", unwrapped)(tagOfThrowable, classTag[Throwable]) + directBind[Throwable]("lastException", unwrapped)(StdReplTags.tagOfThrowable, classTag[Throwable]) util.stackTraceString(unwrapped) }, util.stackTraceString(unwrapped)) } @@ -872,7 +863,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set def fullPath(vname: String) = s"${lineRep.readPath}$accessPath.`$vname`" /** generate the source code for the object that computes this request */ - private object ObjectSourceCode extends CodeAssembler[MemberHandler] { + private object ObjectSourceCode extends IMain.CodeAssembler[MemberHandler] { def path = originalPath("$intp") def envLines = { if (!isReplPower) Nil // power mode only for now @@ -895,7 +886,7 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set val generate = (m: MemberHandler) => m extraCodeToEvaluate Request.this } - private object ResultObjectSourceCode extends CodeAssembler[MemberHandler] { + private object ResultObjectSourceCode extends IMain.CodeAssembler[MemberHandler] { /** We only want to generate this code when the result * is a value which can be referred to as-is. */ @@ -994,11 +985,11 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set } } - @throws(classOf[ScriptException]) + @throws[ScriptException] def eval(script: String, context: ScriptContext): Object = compile(script).eval(context) - @throws(classOf[ScriptException]) - def eval(reader: Reader, context: ScriptContext): Object = compile(reader).eval(context) + @throws[ScriptException] + def eval(reader: java.io.Reader, context: ScriptContext): Object = compile(reader).eval(context) override def finalize = close @@ -1192,6 +1183,8 @@ class IMain(@BeanProperty val factory: ScriptEngineFactory, initialSettings: Set /** Utility methods for the Interpreter. */ object IMain { + import java.util.Arrays.{ asList => asJavaList } + class Factory extends ScriptEngineFactory { @BeanProperty val engineName = "Scala Interpreter" @@ -1200,21 +1193,21 @@ object IMain { val engineVersion = "1.0" @BeanProperty - val extensions: JList[String] = Arrays.asList("scala") + val extensions: JList[String] = asJavaList("scala") @BeanProperty val languageName = "Scala" @BeanProperty - val languageVersion = versionString + val languageVersion = scala.util.Properties.versionString def getMethodCallSyntax(obj: String, m: String, args: String*): String = null @BeanProperty - val mimeTypes: JList[String] = Arrays.asList("application/x-scala") + val mimeTypes: JList[String] = asJavaList("application/x-scala") @BeanProperty - val names: JList[String] = Arrays.asList("scala") + val names: JList[String] = asJavaList("scala") def getOutputStatement(toDisplay: String): String = null |