diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-09-09 13:49:43 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-09-09 13:53:09 +0200 |
commit | b43b3b0ba8ac55ea9c1727b8a4c5e9ad5696fe6d (patch) | |
tree | cc74433ef691a5f81af10b099464fc8efb022746 | |
parent | adf2d3632b07eef4fc2303aef994e66584a73f49 (diff) | |
download | scala-b43b3b0ba8ac55ea9c1727b8a4c5e9ad5696fe6d.tar.gz scala-b43b3b0ba8ac55ea9c1727b8a4c5e9ad5696fe6d.tar.bz2 scala-b43b3b0ba8ac55ea9c1727b8a4c5e9ad5696fe6d.zip |
SI-6335 More precise location of the implicit class synthetic method.
One approach would be to disallow an implicit class in a template
that already has a member with the same name.
But this commit doesn't do this; instead it uses `isSynthetic` to
find the synthesized implicit conversion method from the potentially
overloaded alternatives.
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala | 4 | ||||
-rw-r--r-- | test/files/pos/t6335.scala | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala index 4f597f97c9..83740f1658 100644 --- a/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala +++ b/src/compiler/scala/tools/nsc/typechecker/MethodSynthesis.scala @@ -369,7 +369,7 @@ trait MethodSynthesis { } /** A synthetic method which performs the implicit conversion implied by - * the declaration of an implicit class. Yet to be written. + * the declaration of an implicit class. */ case class ImplicitClassWrapper(tree: ClassDef) extends DerivedFromClassDef { def completer(sym: Symbol): Type = ??? // not needed @@ -377,7 +377,7 @@ trait MethodSynthesis { def derivedSym: Symbol = { // Only methods will do! Don't want to pick up any stray // companion objects of the same name. - val result = enclClass.info decl name suchThat (_.isMethod) + val result = enclClass.info decl name suchThat (x => x.isMethod && x.isSynthetic) assert(result != NoSymbol, "not found: "+name+" in "+enclClass+" "+enclClass.info.decls) result } diff --git a/test/files/pos/t6335.scala b/test/files/pos/t6335.scala new file mode 100644 index 0000000000..a39c4f27f5 --- /dev/null +++ b/test/files/pos/t6335.scala @@ -0,0 +1,11 @@ +object E { + def X = 3 + implicit class X(val i: Int) { + def xx = i + } +} + +object Test { + import E._ + 0.xx +} |