From 1396678baa0a0b9b47e50bb2da4970aca1351b2e Mon Sep 17 00:00:00 2001 From: Ismael Juma <ismael@juma.me.uk> Date: Fri, 27 May 2011 09:37:34 +0100 Subject: [PATCH] Move REPL classes to separate module. --- core/src/main/scala/spark/ClosureCleaner.scala | 17 +++++++++++++---- core/src/main/scala/spark/Executor.scala | 10 +++++++++- project/build/SparkProject.scala | 6 ++++++ {core => repl}/lib/jline.jar | Bin .../scala/spark/repl/ExecutorClassLoader.scala | 0 .../src/main/scala/spark/repl/Main.scala | 0 .../scala/spark/repl/SparkCompletion.scala | 0 .../spark/repl/SparkCompletionOutput.scala | 0 .../spark/repl/SparkInteractiveReader.scala | 0 .../scala/spark/repl/SparkInterpreter.scala | 0 .../spark/repl/SparkInterpreterLoop.scala | 0 .../spark/repl/SparkInterpreterSettings.scala | 0 .../scala/spark/repl/SparkJLineReader.scala | 0 .../scala/spark/repl/SparkSimpleReader.scala | 0 .../src/test/scala/spark/repl/ReplSuite.scala | 0 15 files changed, 28 insertions(+), 5 deletions(-) rename {core => repl}/lib/jline.jar (100%) rename {core => repl}/src/main/scala/spark/repl/ExecutorClassLoader.scala (100%) rename {core => repl}/src/main/scala/spark/repl/Main.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkCompletion.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkCompletionOutput.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkInteractiveReader.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkInterpreter.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkInterpreterLoop.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkInterpreterSettings.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkJLineReader.scala (100%) rename {core => repl}/src/main/scala/spark/repl/SparkSimpleReader.scala (100%) rename {core => repl}/src/test/scala/spark/repl/ReplSuite.scala (100%) diff --git a/core/src/main/scala/spark/ClosureCleaner.scala b/core/src/main/scala/spark/ClosureCleaner.scala index 0e0b3954d4..c21e49e3ae 100644 --- a/core/src/main/scala/spark/ClosureCleaner.scala +++ b/core/src/main/scala/spark/ClosureCleaner.scala @@ -64,10 +64,19 @@ object ClosureCleaner extends Logging { accessedFields(cls) = Set[String]() for (cls <- func.getClass :: innerClasses) getClassReader(cls).accept(new FieldAccessFinder(accessedFields), 0) - + + val isInterpNull = { + try { + val klass = Class.forName("spark.repl.Main") + klass.getMethod("interp").invoke(null) == null + } catch { + case _: ClassNotFoundException => true + } + } + var outer: AnyRef = null for ((cls, obj) <- (outerClasses zip outerObjects).reverse) { - outer = instantiateClass(cls, outer); + outer = instantiateClass(cls, outer, isInterpNull); for (fieldName <- accessedFields(cls)) { val field = cls.getDeclaredField(fieldName) field.setAccessible(true) @@ -85,8 +94,8 @@ object ClosureCleaner extends Logging { } } - private def instantiateClass(cls: Class[_], outer: AnyRef): AnyRef = { - if (spark.repl.Main.interp == null) { + private def instantiateClass(cls: Class[_], outer: AnyRef, isInterpNull: Boolean): AnyRef = { + if (isInterpNull) { // This is a bona fide closure class, whose constructor has no effects // other than to set its fields, so use its constructor val cons = cls.getConstructors()(0) diff --git a/core/src/main/scala/spark/Executor.scala b/core/src/main/scala/spark/Executor.scala index e534f48879..f32e66bef4 100644 --- a/core/src/main/scala/spark/Executor.scala +++ b/core/src/main/scala/spark/Executor.scala @@ -105,7 +105,15 @@ class Executor extends mesos.Executor with Logging { val classUri = System.getProperty("spark.repl.class.uri") if (classUri != null) { logInfo("Using REPL class URI: " + classUri) - loader = new repl.ExecutorClassLoader(classUri, loader) + loader = { + try { + val klass = Class.forName("spark.repl.ExecutorClassLoader").asInstanceOf[Class[_ <: ClassLoader]] + val constructor = klass.getConstructor(classUri.getClass, loader.getClass) + constructor.newInstance(classUri, loader) + } catch { + case _: ClassNotFoundException => loader + } + } } return loader diff --git a/project/build/SparkProject.scala b/project/build/SparkProject.scala index 508e2018b3..413091f16a 100644 --- a/project/build/SparkProject.scala +++ b/project/build/SparkProject.scala @@ -10,6 +10,8 @@ class SparkProject(info: ProjectInfo) extends ParentProject(info) with IdeaProje lazy val core = project("core", "Spark Core", new CoreProject(_)) + lazy val repl = project("repl", "Spark REPL", new ReplProject(_), core) + lazy val examples = project("examples", "Spark Examples", new ExamplesProject(_), core) lazy val bagel = project("bagel", "Bagel", new BagelProject(_), core) @@ -34,6 +36,10 @@ class SparkProject(info: ProjectInfo) extends ParentProject(info) with IdeaProje val jetty = jettyWebapp } + class ReplProject(info: ProjectInfo) extends DefaultProject(info) with BaseProject with DepJar with XmlTestReport { + val jetty = jettyWebapp + } + class ExamplesProject(info: ProjectInfo) extends DefaultProject(info) with BaseProject { val colt = "colt" % "colt" % "1.2.0" } diff --git a/core/lib/jline.jar b/repl/lib/jline.jar similarity index 100% rename from core/lib/jline.jar rename to repl/lib/jline.jar diff --git a/core/src/main/scala/spark/repl/ExecutorClassLoader.scala b/repl/src/main/scala/spark/repl/ExecutorClassLoader.scala similarity index 100% rename from core/src/main/scala/spark/repl/ExecutorClassLoader.scala rename to repl/src/main/scala/spark/repl/ExecutorClassLoader.scala diff --git a/core/src/main/scala/spark/repl/Main.scala b/repl/src/main/scala/spark/repl/Main.scala similarity index 100% rename from core/src/main/scala/spark/repl/Main.scala rename to repl/src/main/scala/spark/repl/Main.scala diff --git a/core/src/main/scala/spark/repl/SparkCompletion.scala b/repl/src/main/scala/spark/repl/SparkCompletion.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkCompletion.scala rename to repl/src/main/scala/spark/repl/SparkCompletion.scala diff --git a/core/src/main/scala/spark/repl/SparkCompletionOutput.scala b/repl/src/main/scala/spark/repl/SparkCompletionOutput.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkCompletionOutput.scala rename to repl/src/main/scala/spark/repl/SparkCompletionOutput.scala diff --git a/core/src/main/scala/spark/repl/SparkInteractiveReader.scala b/repl/src/main/scala/spark/repl/SparkInteractiveReader.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkInteractiveReader.scala rename to repl/src/main/scala/spark/repl/SparkInteractiveReader.scala diff --git a/core/src/main/scala/spark/repl/SparkInterpreter.scala b/repl/src/main/scala/spark/repl/SparkInterpreter.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkInterpreter.scala rename to repl/src/main/scala/spark/repl/SparkInterpreter.scala diff --git a/core/src/main/scala/spark/repl/SparkInterpreterLoop.scala b/repl/src/main/scala/spark/repl/SparkInterpreterLoop.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkInterpreterLoop.scala rename to repl/src/main/scala/spark/repl/SparkInterpreterLoop.scala diff --git a/core/src/main/scala/spark/repl/SparkInterpreterSettings.scala b/repl/src/main/scala/spark/repl/SparkInterpreterSettings.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkInterpreterSettings.scala rename to repl/src/main/scala/spark/repl/SparkInterpreterSettings.scala diff --git a/core/src/main/scala/spark/repl/SparkJLineReader.scala b/repl/src/main/scala/spark/repl/SparkJLineReader.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkJLineReader.scala rename to repl/src/main/scala/spark/repl/SparkJLineReader.scala diff --git a/core/src/main/scala/spark/repl/SparkSimpleReader.scala b/repl/src/main/scala/spark/repl/SparkSimpleReader.scala similarity index 100% rename from core/src/main/scala/spark/repl/SparkSimpleReader.scala rename to repl/src/main/scala/spark/repl/SparkSimpleReader.scala diff --git a/core/src/test/scala/spark/repl/ReplSuite.scala b/repl/src/test/scala/spark/repl/ReplSuite.scala similarity index 100% rename from core/src/test/scala/spark/repl/ReplSuite.scala rename to repl/src/test/scala/spark/repl/ReplSuite.scala -- GitLab