summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-06-05 18:00:53 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-06-05 18:00:53 -0700
commit618126dc6819ca03452da99c46cf89739be8210e (patch)
treee8332023c8b5908a40f1cc368ce2316707e50e3e /src/reflect
parent1472dadd03496aa89624c81ded01edeb71420cc3 (diff)
parent28c5f730820dd76d85c2f6f81bf60aae03aabe41 (diff)
downloadscala-618126dc6819ca03452da99c46cf89739be8210e.tar.gz
scala-618126dc6819ca03452da99c46cf89739be8210e.tar.bz2
scala-618126dc6819ca03452da99c46cf89739be8210e.zip
Merge pull request #2626 from retronym/ticket/7556
SI-7556 Fix runtime reflection involving ScalaLongSignature
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index ccc727451c..55f08f0586 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -567,15 +567,10 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
loadBytes[Array[String]]("scala.reflect.ScalaLongSignature") match {
case Some(slsig) =>
info(s"unpickling Scala $clazz and $module with long Scala signature")
- val byteSegments = slsig map (_.getBytes)
- val lens = byteSegments map ByteCodecs.decode
- val bytes = Array.ofDim[Byte](lens.sum)
- var len = 0
- for ((bs, l) <- byteSegments zip lens) {
- bs.copyToArray(bytes, len, l)
- len += l
- }
- unpickler.unpickle(bytes, 0, clazz, module, jclazz.getName)
+ val encoded = slsig flatMap (_.getBytes)
+ val len = ByteCodecs.decode(encoded)
+ val decoded = encoded.take(len)
+ unpickler.unpickle(decoded, 0, clazz, module, jclazz.getName)
case None =>
// class does not have a Scala signature; it's a Java class
info("translating reflection info for Java " + jclazz) //debug