summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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/pos/t3946/A.java5
-rw-r--r--test/files/pos/t3946/Test_1.scala5
5 files changed, 16 insertions, 5 deletions
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/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..542b9b160d
--- /dev/null
+++ b/test/files/pos/t3946/Test_1.scala
@@ -0,0 +1,5 @@
+package q {
+ class B extends p.A {
+ override protected def f() { }
+ }
+}