diff options
Diffstat (limited to 'src/compiler/scala/reflect/internal/Symbols.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Symbols.scala | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/compiler/scala/reflect/internal/Symbols.scala b/src/compiler/scala/reflect/internal/Symbols.scala index 3167bbc5de..30e9f38cbe 100644 --- a/src/compiler/scala/reflect/internal/Symbols.scala +++ b/src/compiler/scala/reflect/internal/Symbols.scala @@ -1644,13 +1644,13 @@ trait Symbols extends api.Symbols { self: SymbolTable => final def makeNotPrivate(base: Symbol) { if (this.isPrivate) { setFlag(notPRIVATE) - // Marking these methods final causes problems for proxies - // which use subclassing. If people write their code with no - // usage of final, we probably shouldn't introduce it ourselves - // unless we know it is safe. - // - // if (isMethod && !isDeferred) - // setFlag(lateFINAL) + // Marking these methods final causes problems for proxies which use subclassing. If people + // write their code with no usage of final, we probably shouldn't introduce it ourselves + // unless we know it is safe. ... Unfortunately if they aren't marked final the inliner + // thinks it can't inline them. So once again marking lateFINAL, and in genjvm we no longer + // generate ACC_FINAL on "final" methods which are actually lateFINAL. + if (isMethod && !isDeferred) + setFlag(lateFINAL) if (!isStaticModule && !isClassConstructor) { expandName(base) if (isModule) moduleClass.makeNotPrivate(base) |