Skip to content

Commit 5c5145d

Browse files
committed
Annotate lazy vals in Scala2 traits with @volatile
Scala-2 lazy vals are @volatile according to Dotty conventions.
1 parent 0584e0f commit 5c5145d

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/dotty/tools/dotc/transform/AugmentScala2Traits.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SymDenotations._
1111
import Types._
1212
import Decorators._
1313
import DenotTransformers._
14+
import Annotations._
1415
import StdNames._
1516
import NameOps._
1617
import ast.Trees._
@@ -80,9 +81,14 @@ class AugmentScala2Traits extends MiniPhaseTransform with IdentityDenotTransform
8081
for (sym <- mixin.info.decls) {
8182
if (needsForwarder(sym) || sym.isConstructor || sym.isGetter && sym.is(Lazy))
8283
implClass.enter(implMethod(sym.asTerm))
83-
if (sym.isGetter && !sym.is(LazyOrDeferred) &&
84-
!sym.setter.exists && !sym.info.resultType.isInstanceOf[ConstantType])
85-
traitSetter(sym.asTerm).enteredAfter(thisTransform)
84+
if (sym.isGetter)
85+
if (sym.is(Lazy)) {
86+
if (!sym.hasAnnotation(defn.VolatileAnnot))
87+
sym.addAnnotation(Annotation(defn.VolatileAnnot, Nil))
88+
}
89+
else if (!sym.is(Deferred) && !sym.setter.exists &&
90+
!sym.info.resultType.isInstanceOf[ConstantType])
91+
traitSetter(sym.asTerm).enteredAfter(thisTransform)
8692
if (sym.is(PrivateAccessor, butNot = ExpandedName) &&
8793
(sym.isGetter || sym.isSetter)) // strangely, Scala 2 fields are also methods that have Accessor set.
8894
sym.ensureNotPrivate.installAfter(thisTransform)

0 commit comments

Comments
 (0)