summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan@lightbend.com>2016-12-21 11:24:03 -0800
committerGitHub <noreply@github.com>2016-12-21 11:24:03 -0800
commitc4dcc9948a996d36954f15065138557c254ea244 (patch)
tree93fe4619733f8147cf057c3ec7e798d791b91030 /test
parenta3135bf8578dee506c107b19ae7f8c1a70236a29 (diff)
parent34dad77513d08535adaf26989bd0cd84993ceab1 (diff)
downloadscala-c4dcc9948a996d36954f15065138557c254ea244.tar.gz
scala-c4dcc9948a996d36954f15065138557c254ea244.tar.bz2
scala-c4dcc9948a996d36954f15065138557c254ea244.zip
Merge pull request #5583 from lrytz/t10093
SI-10093 don't move member traits to constructor body in constructors
Diffstat (limited to 'test')
-rw-r--r--test/files/pos/t10093.flags1
-rw-r--r--test/files/pos/t10093.scala5
-rw-r--r--test/junit/scala/tools/nsc/symtab/FlagsTest.scala40
3 files changed, 44 insertions, 2 deletions
diff --git a/test/files/pos/t10093.flags b/test/files/pos/t10093.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t10093.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t10093.scala b/test/files/pos/t10093.scala
new file mode 100644
index 0000000000..a894a54926
--- /dev/null
+++ b/test/files/pos/t10093.scala
@@ -0,0 +1,5 @@
+class A[@specialized(Int) T](val value: T) {
+ trait B
+ def useValue(x:T): Unit = ()
+ useValue(value)
+}
diff --git a/test/junit/scala/tools/nsc/symtab/FlagsTest.scala b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
index e88b3f9e96..4e78ca7f22 100644
--- a/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
+++ b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
@@ -2,15 +2,17 @@ package scala.tools.nsc
package symtab
import org.junit.Assert._
-import scala.tools.testing.AssertUtil._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.BytecodeTesting
+
@RunWith(classOf[JUnit4])
-class FlagsTest {
+class FlagsTest extends BytecodeTesting {
object symbolTable extends SymbolTableForUnitTesting
import symbolTable._
+
import Flags._
def sym = NoSymbol.newTermSymbol(nme.EMPTY)
@@ -87,4 +89,38 @@ class FlagsTest {
val dep = typeOf[java.lang.Deprecated].typeSymbol
assertTrue(dep.isJavaAnnotation && dep.isJava)
}
+
+ @Test
+ def interfaceFlag(): Unit = {
+ // scala traits are `isInterface` if they have only type defs and abstract methods / fields.
+ // java interfaces are always `isInterface`.
+ val scalaCode =
+ """package p
+ |trait T1 {
+ | import scala.collection
+ | def m: Int
+ | val f: Int
+ | type T <: AnyRef
+ |}
+ |trait T2 {
+ | def m = 1
+ |}
+ |trait T3 {
+ | val f = 1
+ |}
+ |trait T4 {
+ | println()
+ |}
+ """.stripMargin
+ val javaI1 = "package p; interface I1 { int m(); }"
+ val javaI2 = "package p; interface I2 { default int m() { return 1; } }"
+ compiler.compileClasses(code = scalaCode, javaCode = (javaI1, "I1.java") :: (javaI2, "I2.java") :: Nil)
+ import compiler.global.rootMirror._
+ assert( getRequiredClass("p.T1").isInterface)
+ assert(!getRequiredClass("p.T2").isInterface)
+ assert(!getRequiredClass("p.T3").isInterface)
+ assert(!getRequiredClass("p.T4").isInterface)
+ assert( getRequiredClass("p.I1").isInterface)
+ assert( getRequiredClass("p.I2").isInterface)
+ }
}