aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-04-07 23:48:17 +0200
committerMartin Odersky <odersky@gmail.com>2016-04-07 23:48:24 +0200
commit20175a01baf6dc3129f72c16f205832901098956 (patch)
tree5e06af09f9d668b247f6379676d5757c6489561e
parent56b948c332993014e13c4c3e192b3573f9c46462 (diff)
downloaddotty-20175a01baf6dc3129f72c16f205832901098956.tar.gz
dotty-20175a01baf6dc3129f72c16f205832901098956.tar.bz2
dotty-20175a01baf6dc3129f72c16f205832901098956.zip
Fix unpickling of Java SeqLiterals
Two problems were fixed: - isJava needs to look at function symbol, not its type (references to Java methods get normal MethodTypes not JavMethodTypes) - we also need to handle the case where the repeated argument is wrspped in a type ascription.
-rw-r--r--src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala14
-rw-r--r--tests/pickling/i1202d.scala4
2 files changed, 15 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
index d7f33c75c..ad6ddf7fe 100644
--- a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
+++ b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
@@ -807,9 +807,10 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
tpd.Super(qual, mixName, ctx.mode.is(Mode.InSuperCall), mixClass)
case APPLY =>
val fn = readTerm()
- val isJava = fn.tpe.isInstanceOf[JavaMethodType]
+ val isJava = fn.symbol.is(JavaDefined)
def readArg() = readTerm() match {
- case SeqLiteral(elems, elemtpt) if isJava => JavaSeqLiteral(elems, elemtpt)
+ case SeqLiteral(elems, elemtpt) if isJava =>
+ JavaSeqLiteral(elems, elemtpt)
case arg => arg
}
tpd.Apply(fn, until(end)(readArg()))
@@ -818,7 +819,14 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
case PAIR =>
Pair(readTerm(), readTerm())
case TYPED =>
- Typed(readTerm(), readTpt())
+ val expr = readTerm()
+ val tpt = readTpt()
+ val expr1 = expr match {
+ case SeqLiteral(elems, elemtpt) if tpt.tpe.isRef(defn.ArrayClass) =>
+ JavaSeqLiteral(elems, elemtpt)
+ case expr => expr
+ }
+ Typed(expr1, tpt)
case NAMEDARG =>
NamedArg(readName(), readTerm())
case ASSIGN =>
diff --git a/tests/pickling/i1202d.scala b/tests/pickling/i1202d.scala
new file mode 100644
index 000000000..d03adf197
--- /dev/null
+++ b/tests/pickling/i1202d.scala
@@ -0,0 +1,4 @@
+class Fail5 {
+ val someClass: Class[_] = ???
+ val resultMethod = someClass.getMethod("result")
+}