Closed
Description
It seems like the flags of Anonymous classes are somehow lost during compilation. Despite these lines in Typer.scala:
val x = tpnme.ANON_CLASS
val clsDef = TypeDef(x, templ1).withFlags(Final)
Anonymous classes are compiled without the public final
.
Compiling this:
class Car
final class Volvo extends Car
object Car {
val car = new Car {}
}
with dotc yields this:
$ dotc Anon.scala
$ javap Car Volvo 'Car$$anon$1'
Compiled from "Anon.scala"
public class Car {
public static Car car();
public Car();
}
Compiled from "Anon.scala"
public final class Volvo extends Car {
public Volvo();
}
Compiled from "Anon.scala"
class Car$$anon$1 extends Car {
public Car$$anon$1();
}
scalac instead yields this:
$ scalac Anon.scala
$ javap Car Volvo 'Car$$anon$1'
Compiled from "Anon.scala"
public class Car {
public static Car car();
public Car();
}
Compiled from "Anon.scala"
public final class Volvo extends Car {
public Volvo();
}
Compiled from "Anon.scala"
public final class Car$$anon$1 extends Car {
public Car$$anon$1();
}