diff options
author | Adriaan Moors <adriaan@lightbend.com> | 2016-12-21 11:24:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-21 11:24:03 -0800 |
commit | c4dcc9948a996d36954f15065138557c254ea244 (patch) | |
tree | 93fe4619733f8147cf057c3ec7e798d791b91030 /test | |
parent | a3135bf8578dee506c107b19ae7f8c1a70236a29 (diff) | |
parent | 34dad77513d08535adaf26989bd0cd84993ceab1 (diff) | |
download | scala-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.flags | 1 | ||||
-rw-r--r-- | test/files/pos/t10093.scala | 5 | ||||
-rw-r--r-- | test/junit/scala/tools/nsc/symtab/FlagsTest.scala | 40 |
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) + } } |