Skip to content

Commit fb0641f

Browse files
committed
Refactor SymUtils
- Move to core package. It was for historical reasons in transform because it was originally intended as a collection of type operations that were were useful in transform phases. But it's now used from everywhere. - Make a base class of Types, so that it does not need to be imported explicitly. Also: move isDerivedValueClass to SymUtils [Cherry-picked 125321e][modified]
1 parent dadccc4 commit fb0641f

File tree

89 files changed

+89
-129
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+89
-129
lines changed

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

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import dotty.tools.dotc.core.Types.*
1919
import dotty.tools.dotc.core.StdNames.{nme, str}
2020
import dotty.tools.dotc.core.Symbols.*
2121
import dotty.tools.dotc.transform.Erasure
22-
import dotty.tools.dotc.transform.SymUtils.*
2322
import dotty.tools.dotc.util.Spans.*
2423
import dotty.tools.dotc.core.Contexts.*
2524
import dotty.tools.dotc.core.Phases.*

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import dotty.tools.dotc.core.Types.*
2020
import dotty.tools.dotc.core.Contexts.*
2121
import dotty.tools.dotc.util.Spans.*
2222
import dotty.tools.dotc.report
23-
import dotty.tools.dotc.transform.SymUtils.*
23+
2424

2525
/*
2626
*

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import dotty.tools.dotc.core.Contexts.*
1212
import dotty.tools.dotc.core.Phases.*
1313
import dotty.tools.dotc.core.Symbols.*
1414
import dotty.tools.dotc.core.Phases.Phase
15-
import dotty.tools.dotc.transform.SymUtils.*
15+
1616
import dotty.tools.dotc.core.StdNames
1717
import dotty.tools.dotc.core.Phases
1818

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import dotty.tools.dotc.core.Phases.Phase
99

1010
import scala.collection.mutable
1111
import scala.jdk.CollectionConverters.*
12-
import dotty.tools.dotc.transform.SymUtils.*
12+
1313
import dotty.tools.dotc.interfaces
1414
import dotty.tools.dotc.report
1515

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import scala.language.unsafeNulls
44

55
import dotty.tools.dotc.ast.tpd
66
import dotty.tools.dotc.core.Flags.*
7-
import dotty.tools.dotc.transform.SymUtils.*
7+
88
import java.io.{File => _}
99

1010
import scala.reflect.ClassTag

compiler/src/dotty/tools/backend/sjs/JSCodeGen.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import StdNames.*
2121
import TypeErasure.ErasedValueType
2222

2323
import dotty.tools.dotc.transform.{Erasure, ValueClasses}
24-
import dotty.tools.dotc.transform.SymUtils.*
24+
2525
import dotty.tools.dotc.util.SourcePosition
2626
import dotty.tools.dotc.report
2727

compiler/src/dotty/tools/dotc/CompilationUnit.scala

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import ast.{tpd, untpd}
1212
import tpd.{Tree, TreeTraverser}
1313
import ast.Trees.{Import, Ident}
1414
import typer.Nullables
15-
import transform.SymUtils.*
1615
import core.Decorators.*
1716
import config.{SourceVersion, Feature}
1817
import StdNames.nme

compiler/src/dotty/tools/dotc/ast/Desugar.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package ast
55
import core.*
66
import util.Spans.*, Types.*, Contexts.*, Constants.*, Names.*, NameOps.*, Flags.*
77
import Symbols.*, StdNames.*, Trees.*, ContextOps.*
8-
import Decorators.*, transform.SymUtils.*
8+
import Decorators.*
99
import Annotations.Annotation
1010
import NameKinds.{UniqueName, ContextBoundParamName, ContextFunctionParamName, DefaultGetterName, WildcardParamName}
1111
import typer.{Namer, Checking}

compiler/src/dotty/tools/dotc/ast/TreeInfo.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Flags.*, Trees.*, Types.*, Contexts.*
77
import Names.*, StdNames.*, NameOps.*, Symbols.*
88
import typer.ConstFold
99
import reporting.trace
10-
import dotty.tools.dotc.transform.SymUtils.*
10+
1111
import Decorators.*
1212
import Constants.Constant
1313
import scala.collection.mutable

compiler/src/dotty/tools/dotc/ast/TreeTypeMap.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import core.*
66
import Types.*, Contexts.*, Flags.*
77
import Symbols.*, Annotations.*, Trees.*, Symbols.*, Constants.Constant
88
import Decorators.*
9-
import dotty.tools.dotc.transform.SymUtils.*
9+
1010

1111
/** A map that applies three functions and a substitution together to a tree and
1212
* makes sure they are coordinated so that the result is well-typed. The functions are

compiler/src/dotty/tools/dotc/ast/tpd.scala

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package ast
44

55
import dotty.tools.dotc.transform.{ExplicitOuter, Erasure}
66
import typer.ProtoTypes
7-
import transform.SymUtils.*
87
import core.*
98
import Scopes.newScope
109
import util.Spans.*, Types.*, Contexts.*, Constants.*, Names.*, Flags.*, NameOps.*

compiler/src/dotty/tools/dotc/cc/CheckCaptures.scala

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import Trees.*
1313
import typer.RefChecks.{checkAllOverrides, checkSelfAgainstParents, OverridingPairsChecker}
1414
import typer.Checking.{checkBounds, checkAppliedTypesIn}
1515
import util.{SimpleIdentitySet, EqHashMap, SrcPos}
16-
import transform.SymUtils.*
1716
import transform.{Recheck, PreRecheck}
1817
import Recheck.*
1918
import scala.collection.mutable

compiler/src/dotty/tools/dotc/config/JavaPlatform.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import classpath.AggregateClassPath
77
import core.*
88
import Symbols.*, Types.*, Contexts.*, StdNames.*
99
import Flags.*
10-
import transform.ExplicitOuter, transform.SymUtils.*
10+
import transform.ExplicitOuter
1111

1212
class JavaPlatform extends Platform {
1313

compiler/src/dotty/tools/dotc/transform/SymUtils.scala renamed to compiler/src/dotty/tools/dotc/core/SymUtils.scala

+12-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package dotty.tools.dotc
2-
package transform
2+
package core
33

44
import core.*
55
import Types.*
@@ -11,18 +11,18 @@ import NameOps.*
1111
import StdNames.*
1212
import NameKinds.*
1313
import Flags.*
14-
import ValueClasses.isDerivedValueClass
1514
import Decorators.*
1615
import Constants.Constant
1716
import Annotations.Annotation
1817
import Phases.*
1918
import ast.tpd.Literal
19+
import transform.Mixin
2020

2121
import dotty.tools.dotc.transform.sjs.JSSymUtils.sjsNeedsField
2222

2323
import scala.annotation.tailrec
2424

25-
object SymUtils:
25+
class SymUtils:
2626

2727
extension (self: Symbol)
2828

@@ -79,6 +79,14 @@ object SymUtils:
7979
self.is(Enum, butNot = Case) &&
8080
self.info.parents.exists(p => p.typeSymbol == defn.JavaEnumClass)
8181

82+
def isDerivedValueClass(using Context): Boolean = self.isClass && {
83+
val d = self.denot
84+
!d.isRefinementClass &&
85+
d.isValueClass &&
86+
(d.initial.symbol ne defn.AnyValClass) && // Compare the initial symbol because AnyVal does not exist after erasure
87+
!d.isPrimitiveValueClass
88+
}
89+
8290
/** Is this a case class for which a product mirror is generated?
8391
* Excluded are value classes, abstract classes and case classes with more than one
8492
* parameter section.
@@ -100,7 +108,7 @@ object SymUtils:
100108
if (!self.is(CaseClass)) "it is not a case class"
101109
else if (self.is(Abstract)) "it is an abstract class"
102110
else if (self.primaryConstructor.info.paramInfoss.length != 1) "it takes more than one parameter list"
103-
else if (isDerivedValueClass(self)) "it is a value class"
111+
else if self.isDerivedValueClass then "it is a value class"
104112
else if (!(companionMirror || canAccessCtor)) s"the constructor of $self is inaccessible from the calling scope."
105113
else ""
106114
end whyNotGenericProduct
@@ -369,8 +377,6 @@ object SymUtils:
369377
self.hasAnnotation(defn.ExperimentalAnnot)
370378
|| isDefaultArgumentOfExperimentalMethod
371379
|| (!self.is(Package) && self.owner.isInExperimentalScope)
372-
|| self.topLevelClass.ownersIterator.exists(p =>
373-
p.is(Package) && p.owner.isRoot && p.name == tpnme.dotty)
374380

375381
/** The declared self type of this class, as seen from `site`, stripping
376382
* all refinements for opaque types.

compiler/src/dotty/tools/dotc/core/Symbols.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import util.Spans.*
1818
import DenotTransformers.*
1919
import StdNames.*
2020
import NameOps.*
21-
import transform.SymUtils.*
2221
import NameKinds.LazyImplicitName
2322
import ast.tpd
2423
import tpd.{Tree, TreeProvider, TreeOps}
@@ -32,7 +31,7 @@ import util.{SourceFile, NoSource, Property, SourcePosition, SrcPos, EqHashMap}
3231
import scala.annotation.internal.sharable
3332
import config.Printers.typr
3433

35-
object Symbols {
34+
object Symbols extends SymUtils {
3635

3736
implicit def eqSymbol: CanEqual[Symbol, Symbol] = CanEqual.derived
3837

compiler/src/dotty/tools/dotc/core/TypeComparer.scala

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import TypeErasure.{erasedLub, erasedGlb}
1616
import TypeApplications.*
1717
import Variances.{Variance, variancesConform}
1818
import Constants.Constant
19-
import transform.SymUtils.*
2019
import scala.util.control.NonFatal
2120
import typer.ProtoTypes.constrained
2221
import typer.Applications.productSelectorTypes

compiler/src/dotty/tools/dotc/core/TypeErasure.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ end SourceLanguage
7171
object TypeErasure {
7272

7373
private def erasureDependsOnArgs(sym: Symbol)(using Context) =
74-
sym == defn.ArrayClass || sym == defn.PairClass || isDerivedValueClass(sym)
74+
sym == defn.ArrayClass || sym == defn.PairClass || sym.isDerivedValueClass
7575

7676
/** The arity of this tuple type, which can be made up of EmptyTuple, TupleX and `*:` pairs.
7777
*
@@ -125,7 +125,7 @@ object TypeErasure {
125125
case tp: TypeRef =>
126126
val sym = tp.symbol
127127
sym.isClass &&
128-
(!erasureDependsOnArgs(sym) || isDerivedValueClass(sym)) &&
128+
(!erasureDependsOnArgs(sym) || sym.isDerivedValueClass) &&
129129
!defn.specialErasure.contains(sym) &&
130130
!defn.isSyntheticFunctionClass(sym)
131131
case _: TermRef =>
@@ -630,15 +630,15 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
630630
case tp: TypeRef =>
631631
val sym = tp.symbol
632632
if !sym.isClass then this(checkedSuperType(tp))
633-
else if semiEraseVCs && isDerivedValueClass(sym) then eraseDerivedValueClass(tp)
633+
else if semiEraseVCs && sym.isDerivedValueClass then eraseDerivedValueClass(tp)
634634
else if defn.isSyntheticFunctionClass(sym) then defn.functionTypeErasure(sym)
635635
else eraseNormalClassRef(tp)
636636
case tp: AppliedType =>
637637
val tycon = tp.tycon
638638
if (tycon.isRef(defn.ArrayClass)) eraseArray(tp)
639639
else if (tycon.isRef(defn.PairClass)) erasePair(tp)
640640
else if (tp.isRepeatedParam) apply(tp.translateFromRepeated(toArray = sourceLanguage.isJava))
641-
else if (semiEraseVCs && isDerivedValueClass(tycon.classSymbol)) eraseDerivedValueClass(tp)
641+
else if (semiEraseVCs && tycon.classSymbol.isDerivedValueClass) eraseDerivedValueClass(tp)
642642
else this(checkedSuperType(tp))
643643
case tp: TermRef =>
644644
this(underlyingOfTermRef(tp))
@@ -898,7 +898,7 @@ class TypeErasure(sourceLanguage: SourceLanguage, semiEraseVCs: Boolean, isConst
898898
if (!info.exists) assert(false, i"undefined: $tp with symbol $sym")
899899
return sigName(info)
900900
}
901-
if (semiEraseVCs && isDerivedValueClass(sym)) {
901+
if (semiEraseVCs && sym.isDerivedValueClass) {
902902
val erasedVCRef = eraseDerivedValueClass(tp)
903903
if (erasedVCRef.exists) return sigName(erasedVCRef)
904904
}

compiler/src/dotty/tools/dotc/core/TypeOps.scala

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import ast.tpd.*
1313
import reporting.trace
1414
import config.Printers.typr
1515
import config.Feature
16-
import transform.SymUtils.*
1716
import typer.ProtoTypes.*
1817
import typer.ForceDegree
1918
import typer.Inferencing.*

compiler/src/dotty/tools/dotc/core/Types.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import CaptureSet.{CompareResult, IdempotentCaptRefMap, IdentityCaptRefMap}
4242
import scala.annotation.internal.sharable
4343
import scala.annotation.threadUnsafe
4444

45-
import dotty.tools.dotc.transform.SymUtils.*
45+
4646

4747
object Types extends TypeUtils {
4848

compiler/src/dotty/tools/dotc/core/tasty/TreePickler.scala

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import Contexts.*, Symbols.*, Types.*, Names.*, Constants.*, Decorators.*, Annot
1414
import Comments.{Comment, CommentsContext}
1515
import NameKinds.*
1616
import StdNames.nme
17-
import transform.SymUtils.*
1817
import config.Config
1918
import collection.mutable
2019
import reporting.{Profile, NoProfile}

compiler/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import util.{SourceFile, Property}
3131
import ast.{Trees, tpd, untpd}
3232
import Trees.*
3333
import Decorators.*
34-
import transform.SymUtils.*
3534
import cc.{adaptFunctionTypeUnderPureFuns, adaptByNameArgUnderPureFuns}
3635

3736
import dotty.tools.tasty.{TastyBuffer, TastyReader}

compiler/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import util.common.*
2323
import util.NoSourcePosition
2424
import typer.Checking.checkNonCyclic
2525
import typer.Nullables.*
26-
import transform.SymUtils.*
2726
import PickleBuffer.*
2827
import PickleFormat.*
2928
import Decorators.*

compiler/src/dotty/tools/dotc/inlines/InlineReducer.scala

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package inlines
55
import ast.*, core.*
66
import Flags.*, Symbols.*, Types.*, Decorators.*, Contexts.*
77
import StdNames.nme
8-
import transform.SymUtils.*
98
import typer.*
109
import Names.TermName
1110
import NameKinds.{InlineAccessorName, InlineBinderName, InlineScrutineeName}

compiler/src/dotty/tools/dotc/inlines/Inliner.scala

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package inlines
44

55
import ast.*, core.*
66
import Flags.*, Symbols.*, Types.*, Decorators.*, Constants.*, Contexts.*
7-
import transform.SymUtils.*
87
import StdNames.nme
98
import typer.*
109
import Names.Name

compiler/src/dotty/tools/dotc/inlines/Inlines.scala

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package inlines
55
import ast.*, core.*
66
import Flags.*, Symbols.*, Types.*, Decorators.*, Constants.*, Contexts.*
77
import StdNames.{tpnme, nme}
8-
import transform.SymUtils.*
98
import typer.*
109
import NameKinds.BodyRetainerName
1110
import SymDenotations.SymDenotation

compiler/src/dotty/tools/dotc/inlines/PrepareInlineable.scala

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import NameOps.*
1919
import Annotations.*
2020
import transform.{AccessProxies, Splicer}
2121
import staging.CrossStageSafety
22-
import transform.SymUtils.*
2322
import config.Printers.inlining
2423
import util.Property
2524
import staging.StagingLevel

compiler/src/dotty/tools/dotc/interactive/Interactive.scala

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import ast.{NavigateAST, Trees, tpd, untpd}
1010
import core.*
1111
import Decorators.*, ContextOps.*
1212
import Contexts.*, Flags.*, Names.*, NameOps.*, Symbols.*, Trees.*, Types.*
13-
import transform.SymUtils.*
1413
import util.Spans.*, util.SourceFile, util.SourcePosition
1514

1615
/** High-level API to get information out of typed trees, designed to be used by IDEs.

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import Trees.*
2323
import TypeApplications.*
2424
import NameKinds.{WildcardParamName, DefaultGetterName}
2525
import util.Chars.isOperatorPart
26-
import transform.SymUtils.*
2726
import config.{Config, Feature}
2827

2928
import dotty.tools.dotc.util.SourcePosition

compiler/src/dotty/tools/dotc/reporting/DidYouMean.scala

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import core.*
66
import Contexts.*
77
import Decorators.*, Symbols.*, Names.*, Types.*, Flags.*
88
import typer.ProtoTypes.{FunProto, SelectionProto}
9-
import transform.SymUtils.isNoValue
109

1110
/** A utility object to support "did you mean" hinting */
1211
object DidYouMean:

compiler/src/dotty/tools/dotc/reporting/messages.scala

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import printing.Formatting.hl
2525
import ast.Trees.*
2626
import ast.untpd
2727
import ast.tpd
28-
import transform.SymUtils.*
2928
import scala.util.matching.Regex
3029
import java.util.regex.Matcher.quoteReplacement
3130
import cc.CaptureSet.IdentityCaptRefMap

compiler/src/dotty/tools/dotc/sbt/ExtractAPI.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import Names.*
1818
import NameOps.*
1919
import inlines.Inlines
2020
import transform.ValueClasses
21-
import transform.SymUtils.*
2221
import dotty.tools.io.File
2322
import java.io.PrintWriter
2423

@@ -274,7 +273,7 @@ private class ExtractAPICollector(using Context) extends ThunkHolder {
274273
report.error(ex, csym.sourcePos)
275274
defn.ObjectType :: Nil
276275
}
277-
if (ValueClasses.isDerivedValueClass(csym)) {
276+
if (csym.isDerivedValueClass) {
278277
val underlying = ValueClasses.valueClassUnbox(csym).info.finalResultType
279278
// The underlying type of a value class should be part of the name hash
280279
// of the value class (see the test `value-class-underlying`), this is accomplished

compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import dotty.tools.dotc.core.Phases.*
1717
import dotty.tools.dotc.core.Symbols.*
1818
import dotty.tools.dotc.core.Denotations.StaleSymbol
1919
import dotty.tools.dotc.core.Types.*
20-
import dotty.tools.dotc.transform.SymUtils.*
20+
2121
import dotty.tools.dotc.util.{SrcPos, NoSourcePosition}
2222
import dotty.tools.io
2323
import dotty.tools.io.{AbstractFile, PlainFile, ZipArchive}

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import NameOps.*
1717
import Denotations.StaleSymbol
1818
import util.Spans.Span
1919
import util.SourceFile
20-
import transform.SymUtils.*
2120

2221
import scala.collection.mutable
2322
import scala.annotation.{ threadUnsafe => tu, tailrec }

compiler/src/dotty/tools/dotc/staging/HealType.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import dotty.tools.dotc.core.Symbols.*
99
import dotty.tools.dotc.core.Types.*
1010
import dotty.tools.dotc.staging.StagingLevel.*
1111
import dotty.tools.dotc.staging.QuoteTypeTags.*
12-
import dotty.tools.dotc.transform.SymUtils.*
12+
1313
import dotty.tools.dotc.typer.Implicits.SearchFailureType
1414
import dotty.tools.dotc.util.SrcPos
1515

0 commit comments

Comments
 (0)