aboutsummaryrefslogtreecommitdiff
path: root/tests/untried/neg-with-implicits/sammy_restrictions.scala
blob: 5f1a04cd206e16a3075d25e80adb5ce234de0ed2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class NoAbstract

class TwoAbstract { def ap(a: Int): Int; def pa(a: Int): Int }

class Base // check that the super class constructor isn't considered.
class NoEmptyConstructor(a: Int) extends Base { def this(a: String) = this(0); def ap(a: Int): Int }

class OneEmptyConstructor() { def this(a: Int) = this(); def ap(a: Int): Int }

class OneEmptySecondaryConstructor(a: Int) { def this() = this(0); def ap(a: Int): Int }

class MultipleConstructorLists()() { def ap(a: Int): Int }

class MultipleMethodLists()() { def ap(a: Int)(): Int }

class ImplicitConstructorParam()(implicit a: String) { def ap(a: Int): Int }

class ImplicitMethodParam() { def ap(a: Int)(implicit b: String): Int }

class PolyClass[T] { def ap(a: T): T }

class PolyMethod { def ap[T](a: T): T }

class OneAbstract { def ap(a: Any): Any }
class DerivedOneAbstract extends OneAbstract

object Test {
  implicit val s: String = ""
  type NonClassType = DerivedOneAbstract with OneAbstract

  (() => 0)      : NoAbstract
  ((x: Int) => 0): TwoAbstract
  ((x: Int) => 0): DerivedOneAbstract           // okay
  ((x: Int) => 0): NonClassType                 // "class type required". I think we should avoid SAM translation here.
  ((x: Int) => 0): NoEmptyConstructor
  ((x: Int) => 0): OneEmptyConstructor          // okay
  ((x: Int) => 0): OneEmptySecondaryConstructor // derived class must have an empty *primary* to call.
  ((x: Int) => 0): MultipleConstructorLists
  ((x: Int) => 0): MultipleMethodLists
  ((x: Int) => 0): ImplicitConstructorParam
  ((x: Int) => 0): ImplicitMethodParam

  ((x: Int) => 0): PolyClass[Int]               // okay
  ((x: Int) => 0): PolyMethod
}