Skip to content

Commit 487e677

Browse files
authored
Merge pull request #11618 from dotty-staging/fix-11616
Treat packages as flat when access checking Java-defined symbols
2 parents 17fe2b0 + a355e3e commit 487e677

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,8 +818,12 @@ object SymDenotations {
818818
*/
819819
final def isAccessibleFrom(pre: Type, superAccess: Boolean = false, whyNot: StringBuffer = null)(using Context): Boolean = {
820820

821-
/** Are we inside definition of `boundary`? */
822-
def accessWithin(boundary: Symbol) = ctx.owner.isContainedIn(boundary)
821+
/** Are we inside definition of `boundary`?
822+
* If this symbol is Java defined, package structure is interpreted to be flat.
823+
*/
824+
def accessWithin(boundary: Symbol) =
825+
ctx.owner.isContainedIn(boundary)
826+
&& !(is(JavaDefined) && boundary.is(PackageClass) && ctx.owner.enclosingPackageClass != boundary)
823827

824828
/** Are we within definition of linked class of `boundary`? */
825829
def accessWithinLinked(boundary: Symbol) = {

tests/neg/i11616/A.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package pkg;
2+
3+
public class A {
4+
5+
protected void fn1() { System.out.println("A#fn1()"); }
6+
void fn2() { System.out.println("A#fn2()"); }
7+
8+
}

tests/neg/i11616/B.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package pkg.sub
2+
3+
import pkg.A
4+
5+
class B extends A {
6+
7+
def test(): Unit = {
8+
super.fn1()
9+
super.fn2() // error: cannot be acesssed
10+
11+
val b: B = new B()
12+
b.fn1()
13+
b.fn2() // error: cannot be acesssed
14+
}
15+
16+
}

0 commit comments

Comments
 (0)