summaryrefslogtreecommitdiff
path: root/test/scaladoc/resources/implicits-chaining-res.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-04-13 16:27:46 -0700
committerMartin Odersky <odersky@gmail.com>2012-04-13 16:27:46 -0700
commit2744be417e1f2c461068bb2daef9fa8f11822031 (patch)
tree06580aa466401d86d63176b2af429e9daaf047f9 /test/scaladoc/resources/implicits-chaining-res.scala
parentb5757577c520e6339e4278fa91f725e66561f73e (diff)
parent1d0610840bb7409f0da084d3cc94e4110dd2e2c4 (diff)
downloadscala-2744be417e1f2c461068bb2daef9fa8f11822031.tar.gz
scala-2744be417e1f2c461068bb2daef9fa8f11822031.tar.bz2
scala-2744be417e1f2c461068bb2daef9fa8f11822031.zip
Merge branch 'master' into topic/sip18
Diffstat (limited to 'test/scaladoc/resources/implicits-chaining-res.scala')
-rw-r--r--test/scaladoc/resources/implicits-chaining-res.scala48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/scaladoc/resources/implicits-chaining-res.scala b/test/scaladoc/resources/implicits-chaining-res.scala
new file mode 100644
index 0000000000..b20c8f846c
--- /dev/null
+++ b/test/scaladoc/resources/implicits-chaining-res.scala
@@ -0,0 +1,48 @@
+/**
+ * Testing scaladoc implicits chaining
+ */
+package scala.test.scaladoc.implicits {
+
+ // the classes involved
+ case class Z[U](a: U)
+ case class Intermediate[T, U](t: T, u: U)
+ class Implicit1[T](b: Implicit2[T])
+ class Implicit2[T](c: Implicit3[T])
+ class Implicit3[T](/* and so on */)
+
+ object chaining {
+
+ // the base conversion
+ implicit def convertToZ[T](a: A[T])(implicit b: Implicit1[T]): Z[A[T]] = Z(a)
+
+ // and the implicit chaining, don't you just love it? :D
+ // implicit1, with one alternative
+ implicit def implicit1[T <: Intermediate[_, _]](implicit b: Implicit2[T]) = new Implicit1[T](b)
+ // implicit2, with two alternatives
+ implicit def implicit2alt1[T <: Intermediate[_ <: String, _]](implicit c: Implicit3[T]) = new Implicit2[T](c)
+ implicit def implicit2alt2[T <: Intermediate[_ <: Double, _]](implicit c: Implicit3[T]) = new Implicit2[T](c)
+ // implicit3, with two alternatives
+ implicit def implicit3alt1[T <: Intermediate[_, _ <: Int]] = new Implicit3[T]()
+ implicit def implicit3alt2[T <: Intermediate[_ <: Double, _ <: AnyRef],X] = new Implicit3[T]()
+
+ // and our targets
+ /** conversion here, with constraints */
+ class A[T]()
+ /** conversion here, no constraints */
+ class B extends A[Intermediate[String, Int]]
+ /** no conversion */
+ class C extends A[Intermediate[String, String]]
+ /** conversion here, no constraints */
+ class D extends A[Intermediate[Double, Int]]
+ /** conversion here, no constraints */
+ class E extends A[Intermediate[Double, String]]
+ /** no conversion */
+ class F extends A[Intermediate[String, Double]]
+
+ object scalacTest {
+ (new B).a
+ (new D).a
+ (new E).a
+ }
+ }
+}