Skip to content

Commit c37175b

Browse files
authored
Merge pull request #15499 from dotty-staging/spurious-bridge-for-java-inner-class
Fix #15199: Exclude JavaDefined Modules from bridge generation.
2 parents dc5a9a4 + cf21a07 commit c37175b

File tree

5 files changed

+15
-2
lines changed

5 files changed

+15
-2
lines changed

compiler/src/dotty/tools/dotc/transform/Bridges.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Bridges(root: ClassSymbol, thisPhase: DenotTransformer)(using Context) {
3737
override def parents = Array(root.superClass)
3838

3939
override def exclude(sym: Symbol) =
40-
!sym.isOneOf(MethodOrModule) || super.exclude(sym)
40+
!sym.isOneOf(MethodOrModule) || sym.isAllOf(Module | JavaDefined) || super.exclude(sym)
4141

4242
override def canBeHandledByParent(sym1: Symbol, sym2: Symbol, parent: Symbol): Boolean =
4343
OverridingPairs.isOverridingPair(sym1, sym2, parent.thisType)

compiler/src/dotty/tools/dotc/typer/Checking.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ object Checking {
540540
fail("Traits cannot have secondary constructors" + addendum)
541541
checkApplicable(Inline, sym.isTerm && !sym.isOneOf(Mutable | Module))
542542
checkApplicable(Lazy, !sym.isOneOf(Method | Mutable))
543-
if (sym.isType && !sym.is(Deferred))
543+
if (sym.isType && !sym.isOneOf(Deferred | JavaDefined))
544544
for (cls <- sym.allOverriddenSymbols.filter(_.isClass)) {
545545
fail(CannotHaveSameNameAs(sym, cls, CannotHaveSameNameAs.CannotBeOverridden))
546546
sym.setFlag(Private) // break the overriding relationship by making sym Private

tests/run/i15199/Child_1.java

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class Child_1 extends Parent_1 {
2+
public class Inner {
3+
}
4+
}

tests/run/i15199/Parent_1.java

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
public class Parent_1 {
2+
public class Inner {
3+
}
4+
}

tests/run/i15199/Test_2.scala

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class ScalaChild extends Child_1
2+
3+
@main def Test(): Unit =
4+
val methods = classOf[ScalaChild].getDeclaredMethods()
5+
assert(methods.length == 0, methods.mkString(", "))

0 commit comments

Comments
 (0)