Skip to content

Commit 63e309c

Browse files
committed
More modifier lock down in SymbolLoaders.
1 parent cbf86b8 commit 63e309c

File tree

1 file changed

+13
-45
lines changed

1 file changed

+13
-45
lines changed

src/dotty/tools/dotc/core/SymbolLoaders.scala

Lines changed: 13 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,30 @@ import pickling.ClassfileParser
1717
/** A base class for Symbol loaders with some overridable behavior */
1818
class SymbolLoaders {
1919

20-
protected def enterIfNew(owner: Symbol, member: Symbol, completer: SymbolLoader)(implicit ctx: Context): Symbol = {
20+
protected final def enterIfNew(owner: Symbol, member: Symbol, completer: SymbolLoader)(implicit ctx: Context): Symbol = {
2121
assert(owner.info.decls.lookup(member.name) == NoSymbol, owner.fullName + "." + member.name)
2222
owner.info.decls enter member
2323
member
2424
}
2525

2626
/** Enter class with given `name` into scope of `owner`.
2727
*/
28-
def enterClass(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context): Symbol = {
28+
final def enterClass(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context): Symbol = {
2929
val cls = ctx.newLazyClassSymbol(owner, name.toTypeName, flags, completer, assocFile = completer.sourceFileOrNull)
3030
enterIfNew(owner, cls, completer)
3131
}
3232

3333
/** Enter module with given `name` into scope of `owner`.
3434
*/
35-
def enterModule(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context): Symbol = {
35+
final def enterModule(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context): Symbol = {
3636
val module = ctx.newLazyModuleSymbols(owner, name.toTermName, flags, completer, assocFile = completer.sourceFileOrNull)._1
3737
enterIfNew(owner, module, completer)
3838
}
3939

4040
/** Enter package with given `name` into scope of `owner`
4141
* and give them `completer` as type.
4242
*/
43-
def enterPackage(owner: Symbol, name: PreName, completer: SymbolLoader)(implicit ctx: Context): Symbol = {
43+
final def enterPackage(owner: Symbol, name: PreName, completer: SymbolLoader)(implicit ctx: Context): Symbol = {
4444
val pname = name.toTermName
4545
val preExisting = owner.info.decls lookup pname
4646
if (preExisting != NoSymbol) {
@@ -69,7 +69,7 @@ class SymbolLoaders {
6969
/** Enter class and module with given `name` into scope of `owner`
7070
* and give them `completer` as type.
7171
*/
72-
def enterClassAndModule(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context) {
72+
final def enterClassAndModule(owner: Symbol, name: PreName, completer: SymbolLoader, flags: FlagSet = EmptyFlags)(implicit ctx: Context) {
7373
val clazz = enterClass(owner, name, completer, flags)
7474
val module = enterModule(owner, name, completer, flags)
7575
if (!clazz.isAnonymousClass) {
@@ -84,7 +84,7 @@ class SymbolLoaders {
8484
* with source completer for given `src` as type.
8585
* (overridden in interactive.Global).
8686
*/
87-
def enterToplevelsFromSource(owner: Symbol, name: PreName, src: AbstractFile)(implicit ctx: Context) {
87+
final def enterToplevelsFromSource(owner: Symbol, name: PreName, src: AbstractFile)(implicit ctx: Context) {
8888
??? // !!! enterClassAndModule(owner, name, new SourcefileLoader(src))
8989
}
9090

@@ -95,13 +95,13 @@ class SymbolLoaders {
9595
* Note: We do a name-base comparison here because the method is called before we even
9696
* have ReflectPackage defined.
9797
*/
98-
def binaryOnly(owner: Symbol, name: String)(implicit ctx: Context): Boolean =
98+
final def binaryOnly(owner: Symbol, name: String)(implicit ctx: Context): Boolean =
9999
name == "package" &&
100100
(owner.fullName == "scala" || owner.fullName == "scala.reflect")
101101

102102
/** Initialize toplevel class and module symbols in `owner` from class path representation `classRep`
103103
*/
104-
def initializeFromClassPath(owner: Symbol, classRep: ClassPath#ClassRep)(implicit ctx: Context) {
104+
final def initializeFromClassPath(owner: Symbol, classRep: ClassPath#ClassRep)(implicit ctx: Context) {
105105
((classRep.binary, classRep.source): @unchecked) match {
106106
case (Some(bin), Some(src)) if needCompile(bin, src) && !binaryOnly(owner, classRep.name) =>
107107
if (ctx.settings.verbose.value) ctx.inform("[symloader] picked up newer source file for " + src.path)
@@ -114,12 +114,12 @@ class SymbolLoaders {
114114
}
115115
}
116116

117-
def needCompile(bin: AbstractFile, src: AbstractFile) =
117+
final def needCompile(bin: AbstractFile, src: AbstractFile) =
118118
src.lastModified >= bin.lastModified
119119

120120
/** Load contents of a package
121121
*/
122-
class PackageLoader(classpath: ClassPath)(cctx: CondensedContext) extends SymbolLoader {
122+
final class PackageLoader(classpath: ClassPath)(cctx: CondensedContext) extends SymbolLoader {
123123
implicit val ctx: Context = cctx
124124
protected def description = "package loader " + classpath.name
125125

@@ -151,7 +151,7 @@ class SymbolLoaders {
151151
* Todo: consider factoring out behavior from TopClassCompleter/SymbolLoader into
152152
* supertrait SymLoader
153153
*/
154-
abstract class SymbolLoader extends ClassCompleter {
154+
sealed abstract class SymbolLoader extends ClassCompleter {
155155
implicit val ctx: Context
156156

157157
/** Load source or class file for `root`, return */
@@ -164,7 +164,7 @@ abstract class SymbolLoader extends ClassCompleter {
164164
*/
165165
protected def description: String
166166

167-
override def apply(root: LazyClassDenotation) = {
167+
override final def apply(root: LazyClassDenotation) = {
168168
def signalError(ex: Exception) {
169169
if (ctx.settings.debug.value) ex.printStackTrace()
170170
val msg = ex.getMessage()
@@ -187,7 +187,7 @@ abstract class SymbolLoader extends ClassCompleter {
187187
}
188188
}
189189

190-
class ClassfileLoader(val classfile: AbstractFile)(cctx: CondensedContext) extends SymbolLoader {
190+
final class ClassfileLoader(val classfile: AbstractFile)(cctx: CondensedContext) extends SymbolLoader {
191191
implicit val ctx: Context = cctx
192192

193193
override def sourceFileOrNull: AbstractFile = classfile
@@ -209,38 +209,6 @@ class ClassfileLoader(val classfile: AbstractFile)(cctx: CondensedContext) exten
209209
}
210210
}
211211
/*
212-
class MsilFileLoader(msilFile: MsilFile) extends SymbolLoader with FlagAssigningCompleter {
213-
private def typ = msilFile.msilType
214-
private object typeParser extends clr.TypeParser {
215-
val global: SymbolLoaders.this.global.type = SymbolLoaders.this.global
216-
}
217-
218-
protected def description = "MsilFile "+ typ.FullName + ", assembly "+ typ.Assembly.FullName
219-
protected def doComplete(root: Symbol) { typeParser.parse(typ, root) }
220-
}
221-
222-
class SourcefileLoader(val srcfile: AbstractFile) extends SymbolLoader with FlagAssigningCompleter {
223-
protected def description = "source file "+ srcfile.toString
224-
override def fromSource = true
225-
override def sourcefile = Some(srcfile)
226-
protected def doComplete(root: Symbol): Unit = global.currentRun.compileLate(srcfile)
227-
}
228-
229-
object moduleClassLoader extends SymbolLoader with FlagAssigningCompleter {
230-
protected def description = "module class loader"
231-
protected def doComplete(root: Symbol) { root.sourceModule.initialize }
232-
}
233-
234-
object clrTypes extends clr.CLRTypes {
235-
val global: SymbolLoaders.this.global.type = SymbolLoaders.this.global
236-
if (global.forMSIL) init()
237-
}
238-
239-
/** used from classfile parser to avoid cyclies */
240-
var parentsLevel = 0
241-
var pendingLoadActions: List[() => Unit] = Nil
242-
}
243-
244212
object SymbolLoadersStats {
245213
import scala.reflect.internal.TypesStats.typerNanos
246214
val classReadNanos = Statistics.newSubTimer ("time classfilereading", typerNanos)

0 commit comments

Comments
 (0)