@@ -4,24 +4,29 @@ package core
44
55import java .io .{IOException , File }
66import java .nio .channels .ClosedByInterruptException
7+
78import scala .compat .Platform .currentTime
9+ import scala .util .control .NonFatal
10+
811import dotty .tools .io .{ ClassPath , ClassRepresentation , AbstractFile }
9- import config .Config
12+ import dotty .tools .backend .jvm .DottyBackendInterface .symExtensions
13+
1014import Contexts ._ , Symbols ._ , Flags ._ , SymDenotations ._ , Types ._ , Scopes ._ , Names ._
1115import NameOps ._
12- import StdNames .str
13- import Decorators ._
16+ import StdNames ._
1417import classfile .ClassfileParser
15- import util .Stats
1618import Decorators ._
17- import scala .util .control .NonFatal
19+
20+ import util .Stats
21+ import reporting .trace
22+ import config .Config
23+
1824import ast .Trees ._
25+ import ast .desugar
26+
1927import parsing .JavaParsers .OutlineJavaParser
2028import parsing .Parsers .OutlineParser
21- import reporting .trace
22- import ast .desugar
2329
24- import dotty .tools .backend .jvm .DottyBackendInterface .symExtensions
2530
2631object SymbolLoaders {
2732 import ast .untpd ._
@@ -178,27 +183,30 @@ object SymbolLoaders {
178183 * Note: We do a name-base comparison here because the method is called before we even
179184 * have ReflectPackage defined.
180185 */
181- def binaryOnly (owner : Symbol , name : String )(using Context ): Boolean =
182- name == " package " &&
183- (owner.fullName.toString == " scala" || owner.fullName.toString == " scala .reflect" )
186+ def binaryOnly (owner : Symbol , name : TermName )(using Context ): Boolean =
187+ name == nme. PACKAGEkw &&
188+ (owner.name == nme. scala || owner.name == nme .reflect && owner.owner.name == nme.scala )
184189
185190 /** Initialize toplevel class and module symbols in `owner` from class path representation `classRep`
186191 */
187192 def initializeFromClassPath (owner : Symbol , classRep : ClassRepresentation )(using Context ): Unit =
188193 ((classRep.binary, classRep.source): @ unchecked) match {
189- case (Some (bin), Some (src)) if needCompile(bin, src) && ! binaryOnly(owner, classRep.name ) =>
194+ case (Some (bin), Some (src)) if needCompile(bin, src) && ! binaryOnly(owner, nameOf( classRep) ) =>
190195 if (ctx.settings.verbose.value) report.inform(" [symloader] picked up newer source file for " + src.path)
191- enterToplevelsFromSource(owner, classRep.name , src)
196+ enterToplevelsFromSource(owner, nameOf( classRep) , src)
192197 case (None , Some (src)) =>
193198 if (ctx.settings.verbose.value) report.inform(" [symloader] no class, picked up source file for " + src.path)
194- enterToplevelsFromSource(owner, classRep.name , src)
199+ enterToplevelsFromSource(owner, nameOf( classRep) , src)
195200 case (Some (bin), _) =>
196- enterClassAndModule(owner, classRep.name , ctx.platform.newClassLoader(bin))
201+ enterClassAndModule(owner, nameOf( classRep) , ctx.platform.newClassLoader(bin))
197202 }
198203
199204 def needCompile (bin : AbstractFile , src : AbstractFile ): Boolean =
200205 src.lastModified >= bin.lastModified
201206
207+ private def nameOf (classRep : ClassRepresentation )(using Context ): TermName =
208+ classRep.fileName.sliceToTermName(0 , classRep.nameLength)
209+
202210 /** Load contents of a package
203211 */
204212 class PackageLoader (_sourceModule : TermSymbol , classPath : ClassPath )
0 commit comments