diff options
author | Paul Phillips <paulp@improving.org> | 2011-05-07 02:05:54 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-05-07 02:05:54 +0000 |
commit | a4c920acf13a89a8589ab6097677901e9505dd46 (patch) | |
tree | eec57e29b12374a3fa0267268e6abaf191bc3c03 | |
parent | 9654d5149166464987b7f8aa6c6d2cae8cbb3ae6 (diff) | |
download | scala-a4c920acf13a89a8589ab6097677901e9505dd46.tar.gz scala-a4c920acf13a89a8589ab6097677901e9505dd46.tar.bz2 scala-a4c920acf13a89a8589ab6097677901e9505dd46.zip |
Attempting to make the :javap test pass on wind...
Attempting to make the :javap test pass on windows, no review.
-rw-r--r-- | src/compiler/scala/tools/util/Javap.scala | 28 | ||||
-rw-r--r-- | test/files/run/bug4532.scala | 26 |
2 files changed, 42 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/util/Javap.scala b/src/compiler/scala/tools/util/Javap.scala index 581cc9dbef..679fc0965b 100644 --- a/src/compiler/scala/tools/util/Javap.scala +++ b/src/compiler/scala/tools/util/Javap.scala @@ -20,6 +20,12 @@ class Javap( lazy val parser = new JpOptions + val EnvClass = loader.tryToInitializeClass[FakeEnvironment](Env).orNull + val EnvCtr = EnvClass.getConstructor(List[Class[_]](): _*) + + val PrinterClass = loader.tryToInitializeClass[FakePrinter](Printer).orNull + val PrinterCtr = PrinterClass.getConstructor(classOf[InputStream], classOf[PrintWriter], EnvClass) + def findBytes(path: String): Array[Byte] = tryFile(path) getOrElse tryClass(path) @@ -31,18 +37,6 @@ class Javap( } } - // "documentation" - type FakeEnvironment = AnyRef - type FakePrinter = AnyRef - - val Env = "sun.tools.javap.JavapEnvironment" - val EnvClass = loader.tryToInitializeClass[FakeEnvironment](Env).orNull - val EnvCtr = EnvClass.getConstructor(List[Class[_]](): _*) - - val Printer = "sun.tools.javap.JavapPrinter" - val PrinterClass = loader.tryToInitializeClass[FakePrinter](Printer).orNull - val PrinterCtr = PrinterClass.getConstructor(classOf[InputStream], classOf[PrintWriter], EnvClass) - def newPrinter(in: InputStream, env: FakeEnvironment): FakePrinter = PrinterCtr.newInstance(in, printWriter, env) @@ -82,6 +76,16 @@ class Javap( } object Javap { + val Env = "sun.tools.javap.JavapEnvironment" + val Printer = "sun.tools.javap.JavapPrinter" + + def isAvailable(cl: ScalaClassLoader = ScalaClassLoader.getSystemLoader()) = + cl.tryToInitializeClass[AnyRef](Env).isDefined + + // "documentation" + type FakeEnvironment = AnyRef + type FakePrinter = AnyRef + def apply(path: String): Unit = apply(Seq(path)) def apply(args: Seq[String]): Unit = new Javap() apply args foreach (_.show()) diff --git a/test/files/run/bug4532.scala b/test/files/run/bug4532.scala index 31b608a858..484f805dbb 100644 --- a/test/files/run/bug4532.scala +++ b/test/files/run/bug4532.scala @@ -1,6 +1,32 @@ import scala.tools.partest.ReplTest +import scala.tools.util.Javap object Test extends ReplTest { + + // ugh, windows + def expectedOutput = +""" +Type in expressions to have them evaluated. +Type :help for more information. + +scala> + +scala> object Bippy { class Dingus ; object Bop } +defined module Bippy + +scala> :javap Bippy.Dingus +Compiled from "<console>"public class Bippy$Dingus extends java.lang.Object implements scala.ScalaObject{ public Bippy$Dingus();} +scala> :javap Bippy.Bop +Compiled from "<console>"public final class Bippy$Bop$ extends java.lang.Object implements scala.ScalaObject{ public static final Bippy$Bop$ MODULE$; public static {}; public Bippy$Bop$();} +scala> + +scala> +""" + + override def eval() = + if (Javap.isAvailable()) super.eval() + else expectedOutput.lines + def code = """ |object Bippy { class Dingus ; object Bop } |:javap Bippy.Dingus |