From b2559b3cf4516f751ad050480c50e348e03952d7 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Mon, 8 Nov 2010 20:11:41 +0000 Subject: Deprecation patrol. the same issues as JavaConversions with respect to overloading implicit methods making them inaccessible to view bounds. Fixed JavaConverters. Added a warning for when people overload parameterized implicits: in almost all cases the name is irrelevant so there's little point in unwittingly suffering degraded functionality. No review. --- src/compiler/scala/tools/nsc/typechecker/RefChecks.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala') diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala index c49acf3f01..b524f2e99a 100644 --- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala +++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala @@ -96,7 +96,7 @@ abstract class RefChecks extends InfoTransform { var checkedCombinations = Set[List[Type]]() // only one overloaded alternative is allowed to define default arguments - private def checkDefaultsInOverloaded(clazz: Symbol) { + private def checkOverloadedRestrictions(clazz: Symbol) { def check(members: List[Symbol]): Unit = members match { case x :: xs => if (x.hasParamWhich(_.hasDefaultFlag) && !nme.isProtectedAccessorName(x.name)) { @@ -116,6 +116,11 @@ abstract class RefChecks extends InfoTransform { check(xs) case _ => () } + clazz.info.decls filter (x => x.isImplicit && x.typeParams.nonEmpty) foreach { sym => + val alts = clazz.info.decl(sym.name).alternatives + if (alts.size > 1) + alts foreach (x => unit.warning(x.pos, "parameterized overloaded implicit methods are not visible as view bounds")) + } check(clazz.info.members) } @@ -1293,7 +1298,7 @@ abstract class RefChecks extends InfoTransform { case Template(parents, self, body) => localTyper = localTyper.atOwner(tree, currentOwner) validateBaseTypes(currentOwner) - checkDefaultsInOverloaded(currentOwner) + checkOverloadedRestrictions(currentOwner) val bridges = addVarargBridges(currentOwner) checkAllOverrides(currentOwner) -- cgit v1.2.3