diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-06-05 18:00:53 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-06-05 18:00:53 -0700 |
commit | 618126dc6819ca03452da99c46cf89739be8210e (patch) | |
tree | e8332023c8b5908a40f1cc368ce2316707e50e3e /src/reflect | |
parent | 1472dadd03496aa89624c81ded01edeb71420cc3 (diff) | |
parent | 28c5f730820dd76d85c2f6f81bf60aae03aabe41 (diff) | |
download | scala-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.scala | 13 |
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 |