Skip to content

Commit 1513eb6

Browse files
committed
Add isScalaStatic to SymUtils
1 parent 2caf4bf commit 1513eb6

File tree

5 files changed

+13
-5
lines changed

5 files changed

+13
-5
lines changed

compiler/src/dotty/tools/backend/jvm/BCodeBodyBuilder.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import dotty.tools.dotc.core.Types._
1717
import dotty.tools.dotc.core.StdNames.{nme, str}
1818
import dotty.tools.dotc.core.Symbols._
1919
import dotty.tools.dotc.transform.Erasure
20+
import dotty.tools.dotc.transform.SymUtils._
2021
import dotty.tools.dotc.util.Spans._
2122

2223
/*
@@ -464,7 +465,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
464465
* must-single-thread
465466
*/
466467
private def fieldOp(field: Symbol, isLoad: Boolean, specificReceiver: Symbol): Unit = {
467-
val useSpecificReceiver = specificReceiver != null && !field.hasAnnotation(ctx.definitions.ScalaStaticAnnot)
468+
val useSpecificReceiver = specificReceiver != null && !field.isScalaStatic
468469

469470
val owner = internalName(if (useSpecificReceiver) specificReceiver else field.owner)
470471
val fieldJName = field.name.mangledString.toString
@@ -1126,7 +1127,7 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
11261127
if (specificReceiver != null)
11271128
assert(style.isVirtual || specificReceiver == methodOwner, s"specificReceiver can only be specified for virtual calls. $method - $specificReceiver")
11281129

1129-
val useSpecificReceiver = specificReceiver != null && (specificReceiver ne defn.NullClass) && (specificReceiver ne defn.NothingClass) && !method.hasAnnotation(ctx.definitions.ScalaStaticAnnot)
1130+
val useSpecificReceiver = specificReceiver != null && (specificReceiver ne defn.NullClass) && (specificReceiver ne defn.NothingClass) && !method.isScalaStatic
11301131
val receiver = if (useSpecificReceiver) specificReceiver else methodOwner
11311132

11321133
// workaround for a JVM bug: https://bugs.openjdk.java.net/browse/JDK-8154587

compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ object DottyBackendInterface {
123123
def isStaticConstructor(using Context): Boolean = (sym.isStaticMember && sym.isClassConstructor) || (sym.name eq nme.STATIC_CONSTRUCTOR)
124124

125125
def isStaticMember(using Context): Boolean = (sym ne NoSymbol) &&
126-
(sym.is(Flags.JavaStatic) || sym.hasAnnotation(ctx.definitions.ScalaStaticAnnot))
126+
(sym.is(Flags.JavaStatic) || sym.isScalaStatic)
127127
// guard against no sumbol cause this code is executed to select which call type(static\dynamic) to use to call array.clone
128128

129129
/**

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import dotty.tools.dotc.ast.tpd
1010
import Decorators._
1111
import reporting.messages._
1212

13+
import dotty.tools.dotc.transform.SymUtils._
14+
1315
/** A transformer that check that requirements of Static fields\methods are implemented:
1416
* 1. Only objects can have members annotated with `@static`
1517
* 2. The fields annotated with `@static` should precede any non-`@static` fields.
@@ -31,7 +33,7 @@ class CheckStatic extends MiniPhase {
3133
val defns = tree.body.collect{case t: ValOrDefDef => t}
3234
var hadNonStaticField = false
3335
for (defn <- defns)
34-
if (defn.symbol.hasAnnotation(ctx.definitions.ScalaStaticAnnot)) {
36+
if (defn.symbol.isScalaStatic) {
3537
if (!ctx.owner.is(Module))
3638
ctx.error(StaticFieldsOnlyAllowedInObjects(defn.symbol), defn.sourcePos)
3739

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import dotty.tools.dotc.core.Flags._
99
import dotty.tools.dotc.core.Symbols._
1010
import dotty.tools.dotc.core._
1111
import dotty.tools.dotc.transform.MegaPhase._
12+
import dotty.tools.dotc.transform.SymUtils._
1213

1314
/** Removes selects that would be compiled into GetStatic
1415
* otherwise backend needs to be aware that some qualifiers need to be dropped.
@@ -25,7 +26,7 @@ class SelectStatic extends MiniPhase with IdentityDenotTransformer {
2526
def isStaticMember =
2627
(sym is Flags.Module) && sym.initial.maybeOwner.initial.isStaticOwner ||
2728
(sym is Flags.JavaStatic) ||
28-
sym.hasAnnotation(ctx.definitions.ScalaStaticAnnot)
29+
sym.isScalaStatic
2930
val isStaticRef = !sym.is(Package) && !sym.maybeOwner.is(Package) && isStaticMember
3031
val tree1 =
3132
if (isStaticRef && !tree.qualifier.symbol.isAllOf(JavaModule) && !tree.qualifier.isType)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,4 +227,8 @@ class SymUtils(val self: Symbol) extends AnyVal {
227227

228228
def isCollectiveExtensionClass(using Context): Boolean =
229229
self.is(ModuleClass) && self.sourceModule.is(Extension, butNot = Method)
230+
231+
def isScalaStatic(using Context): Boolean =
232+
self.hasAnnotation(ctx.definitions.ScalaStaticAnnot)
233+
230234
}

0 commit comments

Comments
 (0)