diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-07-04 08:57:20 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-07-04 08:57:20 -0700 |
commit | cae38dc68d02ac5fa80e2d8994990499dc63e657 (patch) | |
tree | bc30ce8ed74f8fa8d72ff04446cb8f9f470bfd72 /test/files | |
parent | e9a696ce610c141a6a21f4201229ed52c1ccebc3 (diff) | |
parent | 1a2ec87c0964ad3bf42d49bbdaebd66b45506210 (diff) | |
download | scala-cae38dc68d02ac5fa80e2d8994990499dc63e657.tar.gz scala-cae38dc68d02ac5fa80e2d8994990499dc63e657.tar.bz2 scala-cae38dc68d02ac5fa80e2d8994990499dc63e657.zip |
Merge pull request #820 from retronym/ticket/6013
SI-6013 Disallow deferred members from intermediate java parents.
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/neg/t6013.check | 7 | ||||
-rw-r--r-- | test/files/neg/t6013/Abstract.java | 7 | ||||
-rw-r--r-- | test/files/neg/t6013/Base.java | 10 | ||||
-rw-r--r-- | test/files/neg/t6013/DerivedScala.scala | 7 |
4 files changed, 31 insertions, 0 deletions
diff --git a/test/files/neg/t6013.check b/test/files/neg/t6013.check new file mode 100644 index 0000000000..502da999f5 --- /dev/null +++ b/test/files/neg/t6013.check @@ -0,0 +1,7 @@ +DerivedScala.scala:4: error: class C needs to be abstract, since there is a deferred declaration of method foo in class B of type => Int which is not implemented in a subclass +class C extends B + ^ +DerivedScala.scala:7: error: class DerivedScala needs to be abstract, since there is a deferred declaration of method foo in class Abstract of type ()Boolean which is not implemented in a subclass +class DerivedScala extends Abstract + ^ +two errors found diff --git a/test/files/neg/t6013/Abstract.java b/test/files/neg/t6013/Abstract.java new file mode 100644 index 0000000000..c0ef046bbd --- /dev/null +++ b/test/files/neg/t6013/Abstract.java @@ -0,0 +1,7 @@ +public abstract class Abstract extends Base { + // overrides Base#bar under the erasure model + public void bar(java.util.List<java.lang.Integer> foo) { return; } + + // must force re-implementation in derived classes + public abstract boolean foo(); +} diff --git a/test/files/neg/t6013/Base.java b/test/files/neg/t6013/Base.java new file mode 100644 index 0000000000..b73d7fd821 --- /dev/null +++ b/test/files/neg/t6013/Base.java @@ -0,0 +1,10 @@ +abstract public class Base { + // This must considered to be overridden by Abstract#foo based + // on the erased signatures. This special case is handled by + // `javaErasedOverridingSym` in `RefChecks`. + public abstract void bar(java.util.List<java.lang.String> foo) { return; } + + // But, a concrete method in a Java superclass must not excuse + // a deferred method in the Java subclass! + public boolean foo() { return true; } +} diff --git a/test/files/neg/t6013/DerivedScala.scala b/test/files/neg/t6013/DerivedScala.scala new file mode 100644 index 0000000000..fc0c55d398 --- /dev/null +++ b/test/files/neg/t6013/DerivedScala.scala @@ -0,0 +1,7 @@ +// Scala extending Scala (this case was working fine before this bug.) +class A { def foo: Int = 0 } +abstract class B extends A { def foo: Int } +class C extends B + +// Scala extending Java +class DerivedScala extends Abstract |