diff --git a/compiler/src/dotty/tools/dotc/transform/Erasure.scala b/compiler/src/dotty/tools/dotc/transform/Erasure.scala index a2edb50b3982..8403a55b6b36 100644 --- a/compiler/src/dotty/tools/dotc/transform/Erasure.scala +++ b/compiler/src/dotty/tools/dotc/transform/Erasure.scala @@ -748,13 +748,8 @@ object Erasure { // Scala classes are always emitted as public, unless the // `private` modifier is used, but a non-private class can never // extend a private class, so such a class will never be a cast target. - !cls.is(Flags.JavaDefined) || { - // We can't rely on `isContainedWith` here because packages are - // not nested from the JVM point of view. - val boundary = cls.accessBoundary(cls.owner)(using preErasureCtx) - (boundary eq defn.RootClass) || - (ctx.owner.enclosingPackageClass eq boundary) - } + !cls.is(Flags.JavaDefined) || + cls.isAccessibleFrom(cls.owner.thisType)(using preErasureCtx) @tailrec def recur(qual: Tree): Tree = diff --git a/tests/pos/i24507-jframe.scala b/tests/pos/i24507-jframe.scala new file mode 100644 index 000000000000..ec67ff9e9b49 --- /dev/null +++ b/tests/pos/i24507-jframe.scala @@ -0,0 +1,2 @@ +class Test extends javax.swing.JFrame { class Acc extends AccessibleJFrame } + diff --git a/tests/run/i24507.check b/tests/run/i24507.check new file mode 100644 index 000000000000..257cc5642cb1 --- /dev/null +++ b/tests/run/i24507.check @@ -0,0 +1 @@ +foo diff --git a/tests/run/i24507/A.java b/tests/run/i24507/A.java new file mode 100644 index 000000000000..489beb4dd6cb --- /dev/null +++ b/tests/run/i24507/A.java @@ -0,0 +1,9 @@ +package a; + +public class A { + protected class B { + public String foo() { + return "foo"; + } + } +} diff --git a/tests/run/i24507/test.scala b/tests/run/i24507/test.scala new file mode 100644 index 000000000000..38f1e6465f98 --- /dev/null +++ b/tests/run/i24507/test.scala @@ -0,0 +1,12 @@ +// scalajs: --skip +import a._ + +class T extends A { + class Acc extends B + val acc = new Acc + def foo(): String = acc.foo() +} + +@main def Test = + val t = new T + println(t.foo())