summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2010-12-08 06:07:27 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2010-12-08 06:07:27 +0000
commit6e15632fcbcb8578b30850ee93b3d3d8c9f3e7b9 (patch)
treecdf601a76c953bd0ed77b02cd62a2baaa67267b5
parent9a7e511b3e851eba9e8cd7a422d21af9b8023204 (diff)
downloadscala-6e15632fcbcb8578b30850ee93b3d3d8c9f3e7b9.tar.gz
scala-6e15632fcbcb8578b30850ee93b3d3d8c9f3e7b9.tar.bz2
scala-6e15632fcbcb8578b30850ee93b3d3d8c9f3e7b9.zip
again: relax access boundry check for overridin...
again: relax access boundry check for overriding protected java members. review by eugenevigdorchik.
-rw-r--r--lib/scala-compiler.jar.desired.sha12
-rw-r--r--lib/scala-library-src.jar.desired.sha12
-rw-r--r--lib/scala-library.jar.desired.sha12
-rw-r--r--src/compiler/scala/tools/ant/Scaladoc.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala7
-rw-r--r--src/swing/scala/swing/RichWindow.scala2
-rw-r--r--test/files/neg/t3946.check5
-rw-r--r--test/files/neg/t3946/J.java4
-rw-r--r--test/files/neg/t3946/S_1.scala4
-rw-r--r--test/files/pos/t3946/A.java5
-rw-r--r--test/files/pos/t3946/Test_1.scala12
11 files changed, 26 insertions, 21 deletions
diff --git a/lib/scala-compiler.jar.desired.sha1 b/lib/scala-compiler.jar.desired.sha1
index 3fa1fccfa3..bc1a144d80 100644
--- a/lib/scala-compiler.jar.desired.sha1
+++ b/lib/scala-compiler.jar.desired.sha1
@@ -1 +1 @@
-65f6a6844c953bf382f58f917b8598eb68bc7cca ?scala-compiler.jar
+6b3f27462c889064a7a21c64746d0edc4eb37379 ?scala-compiler.jar
diff --git a/lib/scala-library-src.jar.desired.sha1 b/lib/scala-library-src.jar.desired.sha1
index 9de4216368..6f44972af2 100644
--- a/lib/scala-library-src.jar.desired.sha1
+++ b/lib/scala-library-src.jar.desired.sha1
@@ -1 +1 @@
-7eefa1dc56e2fc5915826a7e7e92148d276bf345 ?scala-library-src.jar
+63be019508818165998eaa2be955eaa28ef4ad8c ?scala-library-src.jar
diff --git a/lib/scala-library.jar.desired.sha1 b/lib/scala-library.jar.desired.sha1
index 8d556de26f..82b58d912e 100644
--- a/lib/scala-library.jar.desired.sha1
+++ b/lib/scala-library.jar.desired.sha1
@@ -1 +1 @@
-a85cfc60d37f72ac1e46322b1e2565b17ef347fd ?scala-library.jar
+5bebaa6adbb7d8cf91bf7ff7b45a747dbafcaf2f ?scala-library.jar
diff --git a/src/compiler/scala/tools/ant/Scaladoc.scala b/src/compiler/scala/tools/ant/Scaladoc.scala
index be5311b471..720aa105d1 100644
--- a/src/compiler/scala/tools/ant/Scaladoc.scala
+++ b/src/compiler/scala/tools/ant/Scaladoc.scala
@@ -384,7 +384,7 @@ class Scaladoc extends ScalaMatchingTask {
/** This is forwarding method to circumvent bug #281 in Scala 2. Remove when
* bug has been corrected.
*/
- override def getDirectoryScanner(baseDir: java.io.File) =
+ override protected def getDirectoryScanner(baseDir: java.io.File) =
super.getDirectoryScanner(baseDir)
/** Transforms a string name into a file relative to the provided base
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 5c8e474d58..67664b7262 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -329,9 +329,10 @@ abstract class RefChecks extends InfoTransform {
// todo: align accessibility implication checking with isAccessible in Contexts
val ob = other.accessBoundary(member.owner)
val mb = member.accessBoundary(member.owner)
- def isOverrideAccessOK = member.isPublic || { // member is public, definitely same or relaxed access
- (!other.isProtected || member.isProtected) && // if o is protected, so is m
- (!isRootOrNone(ob) && ob.hasTransOwner(mb)) // m relaxes o's access boundary
+ def isOverrideAccessOK = member.isPublic || { // member is public, definitely same or relaxed access
+ (!other.isProtected || member.isProtected) && // if o is protected, so is m
+ ((!isRootOrNone(ob) && ob.hasTransOwner(mb)) || // m relaxes o's access boundary
+ other.isJavaDefined) // overriding a protected java member, see #3946
}
if (!isOverrideAccessOK) {
overrideAccessError()
diff --git a/src/swing/scala/swing/RichWindow.scala b/src/swing/scala/swing/RichWindow.scala
index dcad382a33..10e396247e 100644
--- a/src/swing/scala/swing/RichWindow.scala
+++ b/src/swing/scala/swing/RichWindow.scala
@@ -78,7 +78,7 @@ class Frame extends RichWindow {
override lazy val peer: JFrame with InterfaceMixin = new JFrame with InterfaceMixin with SuperMixin
protected trait SuperMixin extends JFrame {
- override def processWindowEvent(e: java.awt.event.WindowEvent) {
+ override protected def processWindowEvent(e: java.awt.event.WindowEvent) {
super.processWindowEvent(e)
if (e.getID() == java.awt.event.WindowEvent.WINDOW_CLOSING)
closeOperation()
diff --git a/test/files/neg/t3946.check b/test/files/neg/t3946.check
deleted file mode 100644
index 6379b50dba..0000000000
--- a/test/files/neg/t3946.check
+++ /dev/null
@@ -1,5 +0,0 @@
-S_1.scala:3: error: overriding method m in class J of type ()Unit;
- method m has weaker access privileges; it should be at least protected[p]
- override protected def m { }
- ^
-one error found
diff --git a/test/files/neg/t3946/J.java b/test/files/neg/t3946/J.java
deleted file mode 100644
index 189b8e1d23..0000000000
--- a/test/files/neg/t3946/J.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package p;
-public class J {
- protected void m() { return; }
-}
diff --git a/test/files/neg/t3946/S_1.scala b/test/files/neg/t3946/S_1.scala
deleted file mode 100644
index 2c52094701..0000000000
--- a/test/files/neg/t3946/S_1.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-package p
-class S extends J {
- override protected def m { }
-}
diff --git a/test/files/pos/t3946/A.java b/test/files/pos/t3946/A.java
new file mode 100644
index 0000000000..70265229df
--- /dev/null
+++ b/test/files/pos/t3946/A.java
@@ -0,0 +1,5 @@
+package p;
+
+public class A {
+ protected void f() {}
+}
diff --git a/test/files/pos/t3946/Test_1.scala b/test/files/pos/t3946/Test_1.scala
new file mode 100644
index 0000000000..0cceff3aab
--- /dev/null
+++ b/test/files/pos/t3946/Test_1.scala
@@ -0,0 +1,12 @@
+package q {
+ class B extends p.A {
+ override protected def f() { }
+ }
+}
+
+package p {
+ object T {
+ val a = new A()
+ a.f()
+ }
+}