summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-05-26 00:04:17 +0000
committerPaul Phillips <paulp@improving.org>2010-05-26 00:04:17 +0000
commit910adc615aba4770361ff99c45a45453acb580c6 (patch)
tree7bb1d87fd79e5b834679d12695f0bdad9de4ebdc /src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
parent97abbae86af0c2b508583394e088291ac8241f29 (diff)
downloadscala-910adc615aba4770361ff99c45a45453acb580c6.tar.gz
scala-910adc615aba4770361ff99c45a45453acb580c6.tar.bz2
scala-910adc615aba4770361ff99c45a45453acb580c6.zip
Added a migration warning for matches and insta...
Added a migration warning for matches and instance tests when it might be an Array/Seq test whose answer has changed. Review by odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
index c11bfd9703..f78022bdaa 100644
--- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
@@ -61,6 +61,12 @@ abstract class ExplicitOuter extends InfoTransform
result
}
+ /** Issue a migration warning for instance checks which might be on an Array and
+ * for which the type parameter conforms to Seq, because these answers changed in 2.8.
+ */
+ def isArraySeqTest(lhs: Type, rhs: Type) =
+ ArrayClass.tpe <:< lhs.widen && rhs.widen.matchesPattern(SeqClass.tpe)
+
def outerAccessor(clazz: Symbol): Symbol = {
val firstTry = clazz.info.decl(nme.expandedName(nme.OUTER, clazz))
if (firstTry != NoSymbol && firstTry.outerSource == clazz) firstTry
@@ -294,7 +300,6 @@ abstract class ExplicitOuter extends InfoTransform
* </p>
*/
class ExplicitOuterTransformer(unit: CompilationUnit) extends OuterPathTransformer(unit) {
-
/** The definition tree of the outer accessor of current class
*/
def outerFieldDef: Tree = VAL(outerField(currentClass)) === EmptyTree
@@ -483,8 +488,14 @@ abstract class ExplicitOuter extends InfoTransform
matchTranslation(mch)
case _ =>
- val x = super.transform(tree)
+ if (settings.Xmigration28.value) tree match {
+ case TypeApply(fn @ Select(qual, _), args) if fn.symbol == Object_isInstanceOf || fn.symbol == Any_isInstanceOf =>
+ if (isArraySeqTest(qual.tpe, args.head.tpe))
+ unit.warning(tree.pos, "An Array will no longer match as Seq[_].")
+ case _ => ()
+ }
+ val x = super.transform(tree)
if (x.tpe eq null) x
else x setType transformInfo(currentOwner, x.tpe)
}