diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2016-12-06 12:48:30 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2016-12-06 12:48:30 +0100 |
commit | 34dad77513d08535adaf26989bd0cd84993ceab1 (patch) | |
tree | 5fb4e31c2ca9f9d2c5c7f4eb365d6381c0367f3f /src/reflect/scala/reflect/internal/Flags.scala | |
parent | ee1c02b374a4b8a053e9a8b14af5e205afa67e14 (diff) | |
download | scala-34dad77513d08535adaf26989bd0cd84993ceab1.tar.gz scala-34dad77513d08535adaf26989bd0cd84993ceab1.tar.bz2 scala-34dad77513d08535adaf26989bd0cd84993ceab1.zip |
SI-10093 don't move member traits to constructor body in constructors
Fixes a regression introduced in c8e6050. Member traits with only
abstract definitions (`isInterface`) were moved into the primary
constructor by mistake. (Flatten moved the classes back.)
The member trait was duplicated into the constructor of specialized
subclasses, causing it to be generated multiple times.
Also removes some unnecessary `isMixinConstructor` checks: the mixin
constructor is always the primary constructor.
This commit also clarifies (and tests) what `isInterface` means: for
scala-defined traits, it means there are only abstract members. For
java-defined interfaces, it is always true.
Diffstat (limited to 'src/reflect/scala/reflect/internal/Flags.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Flags.scala | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Flags.scala b/src/reflect/scala/reflect/internal/Flags.scala index a146f9aea5..8aa6b16e06 100644 --- a/src/reflect/scala/reflect/internal/Flags.scala +++ b/src/reflect/scala/reflect/internal/Flags.scala @@ -92,7 +92,9 @@ class ModifierFlags { final val ABSTRACT = 1 << 3 // abstract class, or used in conjunction with abstract override. // Note difference to DEFERRED! final val DEFERRED = 1 << 4 // was `abstract' for members | trait is virtual - final val INTERFACE = 1 << 7 // symbol is an interface (i.e. a trait which defines only abstract methods) + final val INTERFACE = 1 << 7 // symbol is an interface. the flag is set for: + // - scala-defined traits with only abstract methods or fields + // - any java-defined interface (even if it has default methods) final val MUTABLE = 1 << 12 // symbol is a mutable variable. final val PARAM = 1 << 13 // symbol is a (value or type) parameter to a method final val MACRO = 1 << 15 // symbol is a macro definition |