summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-02-05 12:34:10 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-02-05 12:48:55 -0800
commit715a39bdf6a4632ec09b74777975ee90068b4466 (patch)
treec8fb6e507fb2282740590de12fb16fc1a2bdbda4 /src/reflect
parent4525e3392b42b47147479087d961d328c3b717bb (diff)
downloadscala-715a39bdf6a4632ec09b74777975ee90068b4466.tar.gz
scala-715a39bdf6a4632ec09b74777975ee90068b4466.tar.bz2
scala-715a39bdf6a4632ec09b74777975ee90068b4466.zip
SI-6169 more accurate check for raw java type encoded as existential
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala
index a49ecea57f..02f51c2562 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -2668,7 +2668,13 @@ trait Types
* but that causes cyclic errors because it happens too early.)
*/
private def sharpenQuantifierBounds(): Unit = {
- if (underlying.typeSymbol.isJavaDefined && quantified == underlying.typeArgs.map(_.typeSymbol)) {
+ /* Check that we're looking at rawToExistential's handiwork
+ * (`existentialAbstraction(eparams, typeRef(apply(pre), sym, eparams map (_.tpe)))`).
+ * We can't do this sharpening there because we'll run into cycles.
+ */
+ def rawToExistentialCreatedMe = (quantified corresponds underlying.typeArgs){ (q, a) => q.tpe =:= a }
+
+ if (underlying.typeSymbol.isJavaDefined && rawToExistentialCreatedMe) {
val tpars = underlying.typeSymbol.typeParams
debuglog(s"sharpen bounds: $this | ${underlying.typeArgs.map(_.typeSymbol)} <-- ${tpars.map(_.info)}")