From 96ab92d67c5ea5af3f322cd22205139b1bc846b8 Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Fri, 29 Apr 2011 14:27:40 +0000 Subject: Closes #4457. Review by odersky --- test/files/neg/t4457_1.check | 7 +++++++ test/files/neg/t4457_1.scala | 33 +++++++++++++++++++++++++++++++++ test/files/neg/t4457_2.check | 13 +++++++++++++ test/files/neg/t4457_2.scala | 33 +++++++++++++++++++++++++++++++++ test/files/pos/t4457_1.scala | 26 ++++++++++++++++++++++++++ 5 files changed, 112 insertions(+) create mode 100644 test/files/neg/t4457_1.check create mode 100644 test/files/neg/t4457_1.scala create mode 100644 test/files/neg/t4457_2.check create mode 100644 test/files/neg/t4457_2.scala create mode 100644 test/files/pos/t4457_1.scala (limited to 'test/files') diff --git a/test/files/neg/t4457_1.check b/test/files/neg/t4457_1.check new file mode 100644 index 0000000000..c6b83c6ce5 --- /dev/null +++ b/test/files/neg/t4457_1.check @@ -0,0 +1,7 @@ +t4457_1.scala:27: error: ambiguous reference to overloaded definition, +both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[Float] +and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A] +match argument types (Float) + val x = aFunc(4F) + ^ +one error found diff --git a/test/files/neg/t4457_1.scala b/test/files/neg/t4457_1.scala new file mode 100644 index 0000000000..11f12379f6 --- /dev/null +++ b/test/files/neg/t4457_1.scala @@ -0,0 +1,33 @@ +object ImplicitConvAmbiguity2 { + + class N[T] + class NE[T] extends N[T] + class NN[T] extends N[T] + class NQ[T] extends N[T] + class NZ[T] extends N[T] + class AA[A] + class BB[A] + + implicit def conv1(i: Float) = new NE[Float] + implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException] + implicit def conv4(op: AA[Float]) = new N[Float] + implicit def conv7(i: Float) = new NZ[Float] + implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar] + + // These two will be in conflict in typeMe1 + def aFunc[A](a: NE[A]) = new AA[A] + def aFunc[A](a: NZ[A]) = new AA[Float] + + def aFunc[A](a: NN[A]) = new BB[A] + def aFunc[A](a: NQ[A]) = new BB[A] + + def bFunc[T](e1: N[T]) = {} + + def typeMe1 { + val x = aFunc(4F) + bFunc(x) + } + def typeMe2 { + bFunc(aFunc(4F)) + } +} diff --git a/test/files/neg/t4457_2.check b/test/files/neg/t4457_2.check new file mode 100644 index 0000000000..770a355395 --- /dev/null +++ b/test/files/neg/t4457_2.check @@ -0,0 +1,13 @@ +t4457_2.scala:27: error: ambiguous reference to overloaded definition, +both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A] +and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A] +match argument types (Float) + val x = aFunc(4F) + ^ +t4457_2.scala:31: error: ambiguous reference to overloaded definition, +both method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NZ[A])ImplicitConvAmbiguity2.AA[A] +and method aFunc in object ImplicitConvAmbiguity2 of type [A](a: ImplicitConvAmbiguity2.NE[A])ImplicitConvAmbiguity2.AA[A] +match argument types (Float) + bFunc(aFunc(4F)) + ^ +two errors found diff --git a/test/files/neg/t4457_2.scala b/test/files/neg/t4457_2.scala new file mode 100644 index 0000000000..f3a170f1f2 --- /dev/null +++ b/test/files/neg/t4457_2.scala @@ -0,0 +1,33 @@ +object ImplicitConvAmbiguity2 { + + class N[T] + class NE[T] extends N[T] + class NN[T] extends N[T] + class NQ[T] extends N[T] + class NZ[T] extends N[T] + class AA[A] + class BB[A] + + implicit def conv1(i: Float) = new NE[Float] + implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException] + implicit def conv4(op: AA[Float]) = new N[Float] + implicit def conv7(i: Float) = new NZ[Float] + implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar] + + def aFunc[A](a: NE[A]) = new AA[A] + def aFunc[A](a: NZ[A]) = new AA[A] + + def aFunc[A](a: NN[A]) = new BB[A] + + def aFunc[A](a: NQ[A]) = new BB[A] + + def bFunc[T](e1: N[T]) = {} + + def typeMe2 { + val x = aFunc(4F) + bFunc(x) + } + def typeMe1 { + bFunc(aFunc(4F)) + } +} diff --git a/test/files/pos/t4457_1.scala b/test/files/pos/t4457_1.scala new file mode 100644 index 0000000000..32edd6cfdc --- /dev/null +++ b/test/files/pos/t4457_1.scala @@ -0,0 +1,26 @@ +object ImplicitConvAmbiguity2 { + + class N[T] + class NE[T] extends N[T] + class NN[T] extends N[T] + class AA[A] + class BB[A] + + implicit def conv1(i: Float) = new NE[Float] + implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException] + implicit def conv4(op: AA[Float]) = new N[Float] + implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar] + + def aFunc[A](a: NE[A]) = new AA[A] + def aFunc[A](a: NN[A]) = new BB[A] + + def bFunc[T](e1: N[T]) = {} + + def typeMe1 { + val x = aFunc(4F) + bFunc(x) + } + def typeMe2 { + bFunc(aFunc(4F)) + } +} -- cgit v1.2.3