diff options
author | Paul Phillips <paulp@improving.org> | 2010-10-26 04:37:09 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-10-26 04:37:09 +0000 |
commit | 22da3636fd531964182c4079e0e17faf2c0f38c8 (patch) | |
tree | ba744515437a17afd80d463eec8435eaa2d47872 /test | |
parent | 7f365342d9875ffc4105af26faa260f81a270246 (diff) | |
download | scala-22da3636fd531964182c4079e0e17faf2c0f38c8.tar.gz scala-22da3636fd531964182c4079e0e17faf2c0f38c8.tar.bz2 scala-22da3636fd531964182c4079e0e17faf2c0f38c8.zip |
A modifier's work is never done.
protected and its bevy of corner cases. Closes #3939, #3947. This patch
is intended for both trunk and 2.8.1. Already reviewed and co-authored
by moors, and review by oderksy.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/java-access-neg.check | 16 | ||||
-rw-r--r-- | test/files/neg/java-access-neg/J.java | 15 | ||||
-rw-r--r-- | test/files/neg/java-access-neg/S2.scala | 61 | ||||
-rw-r--r-- | test/files/pos/java-access-pos/J.java | 15 | ||||
-rw-r--r-- | test/files/pos/java-access-pos/S1.scala | 67 | ||||
-rw-r--r-- | test/pending/neg/t3633/test/PackageProtected.java | 5 |
6 files changed, 174 insertions, 5 deletions
diff --git a/test/files/neg/java-access-neg.check b/test/files/neg/java-access-neg.check new file mode 100644 index 0000000000..af2812b579 --- /dev/null +++ b/test/files/neg/java-access-neg.check @@ -0,0 +1,16 @@ +S2.scala:12: error: method packageAbstract overrides nothing + override private[b] def packageAbstract() = () // fail + ^ +S2.scala:16: error: method packageConcrete overrides nothing + override private[b] def packageConcrete() = () // fail + ^ +S2.scala:36: error: method packageConcrete overrides nothing + override protected[b] def packageConcrete() = () // fail + ^ +S2.scala:47: error: method packageConcrete overrides nothing + override private[a] def packageConcrete() = () // fail + ^ +S2.scala:58: error: method packageConcrete overrides nothing + override def packageConcrete() = () // fail + ^ +5 errors found diff --git a/test/files/neg/java-access-neg/J.java b/test/files/neg/java-access-neg/J.java new file mode 100644 index 0000000000..b6bc3363a1 --- /dev/null +++ b/test/files/neg/java-access-neg/J.java @@ -0,0 +1,15 @@ +package a.b; + +public abstract class J { + public J() { } + J(int x1) { } + protected J(int x1, int x2) { } + + abstract void packageAbstract(); + protected abstract void protectedAbstract(); + public abstract void publicAbstract(); + + void packageConcrete() { return; } + protected void protectedConcrete() { return; } + public void publicConcrete() { return; } +} diff --git a/test/files/neg/java-access-neg/S2.scala b/test/files/neg/java-access-neg/S2.scala new file mode 100644 index 0000000000..b082bb7174 --- /dev/null +++ b/test/files/neg/java-access-neg/S2.scala @@ -0,0 +1,61 @@ +package a.b +package c + +import a.b.J + +/** Variations of java-access-pos with us in a nested package. + */ + +/** Declaring "override" all the time. + */ +class S1 extends J { + override private[b] def packageAbstract() = () // fail + override protected[b] def protectedAbstract() = () + override def publicAbstract() = () + + override private[b] def packageConcrete() = () // fail + override protected[b] def protectedConcrete() = () + override def publicConcrete() = () +} + +/** Implementing abstracts. + */ +class S2 extends J { + private[b] def packageAbstract() = () // fail + protected[b] def protectedAbstract() = () + def publicAbstract() = () +} + +/** Widening access. + */ +class S3 extends J { + protected[b] def packageAbstract() = () // fail + protected[b] def protectedAbstract() = () + def publicAbstract() = () + + override protected[b] def packageConcrete() = () // fail + override protected[b] def protectedConcrete() = () + override def publicConcrete() = () +} +/** More widening. + */ +class S4 extends J { + private[a] def packageAbstract() = () // fail + protected[a] def protectedAbstract() = () + def publicAbstract() = () + + override private[a] def packageConcrete() = () // fail + override protected[a] def protectedConcrete() = () + override def publicConcrete() = () +} +/** Yet more widening. + */ +class S5 extends J { + def packageAbstract() = () // fail + def protectedAbstract() = () + def publicAbstract() = () + + override def packageConcrete() = () // fail + override def protectedConcrete() = () + override def publicConcrete() = () +} diff --git a/test/files/pos/java-access-pos/J.java b/test/files/pos/java-access-pos/J.java new file mode 100644 index 0000000000..b6bc3363a1 --- /dev/null +++ b/test/files/pos/java-access-pos/J.java @@ -0,0 +1,15 @@ +package a.b; + +public abstract class J { + public J() { } + J(int x1) { } + protected J(int x1, int x2) { } + + abstract void packageAbstract(); + protected abstract void protectedAbstract(); + public abstract void publicAbstract(); + + void packageConcrete() { return; } + protected void protectedConcrete() { return; } + public void publicConcrete() { return; } +} diff --git a/test/files/pos/java-access-pos/S1.scala b/test/files/pos/java-access-pos/S1.scala new file mode 100644 index 0000000000..10730e3a70 --- /dev/null +++ b/test/files/pos/java-access-pos/S1.scala @@ -0,0 +1,67 @@ +package a.b + +/** Declaring "override" all the time. + */ +class S1 extends J { + override private[b] def packageAbstract() = () + override protected[b] def protectedAbstract() = () + override def publicAbstract() = () + + override private[b] def packageConcrete() = () + override protected[b] def protectedConcrete() = () + override def publicConcrete() = () +} + +/** Implementing abstracts. + */ +class S2 extends J { + private[b] def packageAbstract() = () + protected[b] def protectedAbstract() = () + def publicAbstract() = () +} + +/** Widening access. + */ +class S3 extends J { + protected[b] def packageAbstract() = () + protected[b] def protectedAbstract() = () + def publicAbstract() = () + + override protected[b] def packageConcrete() = () + override protected[b] def protectedConcrete() = () + override def publicConcrete() = () +} +/** More widening. + */ +class S4 extends J { + private[a] def packageAbstract() = () + protected[a] def protectedAbstract() = () + def publicAbstract() = () + + override private[a] def packageConcrete() = () + override protected[a] def protectedConcrete() = () + override def publicConcrete() = () +} +/** Yet more widening. + */ +class S5 extends J { + def packageAbstract() = () + def protectedAbstract() = () + def publicAbstract() = () + + override def packageConcrete() = () + override def protectedConcrete() = () + override def publicConcrete() = () +} +/** Constructors. + */ +class S6 extends J(1) { + def packageAbstract() = () + def protectedAbstract() = () + def publicAbstract() = () +} +class S7 extends J(1, 2) { + def packageAbstract() = () + def protectedAbstract() = () + def publicAbstract() = () +}
\ No newline at end of file diff --git a/test/pending/neg/t3633/test/PackageProtected.java b/test/pending/neg/t3633/test/PackageProtected.java deleted file mode 100644 index f4535a55b4..0000000000 --- a/test/pending/neg/t3633/test/PackageProtected.java +++ /dev/null @@ -1,5 +0,0 @@ -package test; - -class PackageProtected { - int foo; -} |