@@ -1839,4 +1839,58 @@ class ErrorMessagesTests extends ErrorMessagesTest {
18391839 assertEquals(" Unexpected pattern for summonFrom. Expected `x: T` or `_`" , errorMsg)
18401840 assertEquals(" given x @ String" , x.show)
18411841 }
1842+
1843+ @ Test def extensionMethodsNotAllowed =
1844+ checkMessagesAfter(RefChecks .name) {
1845+ """ object Test {
1846+ | extension on[T] (t: T) {
1847+ | def (c: T).f: T = ???
1848+ | }
1849+ |}
1850+ """ .stripMargin
1851+ }
1852+ .expect { (ictx, messages) ⇒
1853+ implicit val ctx : Context = ictx
1854+ assertMessageCount(1 , messages)
1855+ val errorMsg = messages.head.msg
1856+ val NoExtensionMethodAllowed (x) :: Nil = messages
1857+ assertEquals(" No extension method allowed here, since collective parameters are given" , errorMsg)
1858+ assertEquals(" def (c: T) f: T = ???" , x.show)
1859+ }
1860+
1861+ @ Test def extensionMethodTypeParamsNotAllowed =
1862+ checkMessagesAfter(RefChecks .name) {
1863+ """ object Test {
1864+ | extension on[T] (t: T) {
1865+ | def f[U](u: U): T = ???
1866+ | }
1867+ |}
1868+ """ .stripMargin
1869+ }
1870+ .expect { (ictx, messages) ⇒
1871+ implicit val ctx : Context = ictx
1872+ assertMessageCount(1 , messages)
1873+ val errorMsg = messages.head.msg
1874+ val ExtensionMethodCannotHaveTypeParams (x) :: Nil = messages
1875+ assertEquals(" Extension method cannot have type parameters since some were already given previously" , errorMsg)
1876+ assertEquals(" def f[U](u: U): T = ???" , x.show)
1877+ }
1878+
1879+ @ Test def extensionMethodCanOnlyHaveDefs =
1880+ checkMessagesAfter(RefChecks .name) {
1881+ """ object Test {
1882+ | extension on[T] (t: T) {
1883+ | val v: T = t
1884+ | }
1885+ |}
1886+ """ .stripMargin
1887+ }
1888+ .expect { (ictx, messages) ⇒
1889+ implicit val ctx : Context = ictx
1890+ assertMessageCount(1 , messages)
1891+ val errorMsg = messages.head.msg
1892+ val ExtensionCanOnlyHaveDefs (x) :: Nil = messages
1893+ assertEquals(" Only methods allowed here, since collective parameters are given" , errorMsg)
1894+ assertEquals(" val v: T = t" , x.show)
1895+ }
18421896}
0 commit comments