@@ -19,6 +19,7 @@ import annotation.constructorOnly
1919import printing .Formatting .hl
2020import config .Printers
2121import parsing .Parsers
22+ import dotty .tools .dotc .util .chaining .*
2223
2324import scala .annotation .internal .sharable
2425import scala .annotation .threadUnsafe
@@ -1268,25 +1269,29 @@ object desugar {
12681269 else tree
12691270 }
12701271
1271- def checkPackageName (mdef : ModuleDef | PackageDef )(using Context ): Unit =
1272-
1273- def check (name : Name , errSpan : Span ): Unit = name match
1274- case name : SimpleName if ! errSpan.isSynthetic && name.exists(Chars .willBeEncoded) =>
1275- report.warning(em " The package name ` $name` will be encoded on the classpath, and can lead to undefined behaviour. " , mdef.source.atSpan(errSpan))
1276- case _ =>
1277-
1278- def loop (part : RefTree ): Unit = part match
1279- case part @ Ident (name) => check(name, part.span)
1280- case part @ Select (qual : RefTree , name) =>
1281- check(name, part.nameSpan)
1282- loop(qual)
1272+ def checkSimplePackageName (name : Name , errSpan : Span , source : SourceFile , isPackageObject : Boolean )(using Context ) =
1273+ if ! ctx.isAfterTyper then
1274+ name match
1275+ case name : SimpleName if (isPackageObject || ! errSpan.isSynthetic) && name.exists(Chars .willBeEncoded) =>
1276+ report.warning(
1277+ em " The package name ` $name` will be encoded on the classpath, and can lead to undefined behaviour. " ,
1278+ source.atSpan(errSpan))
12831279 case _ =>
12841280
1281+ def checkPackageName (mdef : ModuleDef | PackageDef )(using Context ): Unit =
1282+ def check (name : Name , errSpan : Span ) = checkSimplePackageName(name, errSpan, mdef.source, isPackageObject = false )
12851283 mdef match
1286- case pdef : PackageDef => loop(pdef.pid)
1287- case mdef : ModuleDef if mdef.mods.is(Package ) => check(mdef.name, mdef.nameSpan)
1288- case _ =>
1289- end checkPackageName
1284+ case pdef : PackageDef =>
1285+ def loop (part : RefTree ): Unit = part match
1286+ case part @ Ident (name) => check(name, part.span)
1287+ case part @ Select (qual : RefTree , name) =>
1288+ check(name, part.nameSpan)
1289+ loop(qual)
1290+ case _ =>
1291+ loop(pdef.pid)
1292+ case mdef : ModuleDef if mdef.mods.is(Package ) =>
1293+ check(mdef.name, mdef.nameSpan)
1294+ case _ =>
12901295
12911296 /** The normalized name of `mdef`. This means
12921297 * 1. Check that the name does not redefine a Scala core class.
@@ -1795,10 +1800,11 @@ object desugar {
17951800 /** Assuming `src` contains top-level definition, returns the name that should
17961801 * be using for the package object that will wrap them.
17971802 */
1798- def packageObjectName (src : SourceFile ): TermName =
1803+ def packageObjectName (src : SourceFile , srcPos : SrcPos )( using Context ): TermName =
17991804 val fileName = src.file.name
18001805 val sourceName = fileName.take(fileName.lastIndexOf('.' ))
18011806 (sourceName ++ str.TOPLEVEL_SUFFIX ).toTermName
1807+ .tap(nm => checkSimplePackageName(nm, srcPos.span, src, isPackageObject = true ))
18021808
18031809 /** Group all definitions that can't be at the toplevel in
18041810 * an object named `<source>$package` where `<source>` is the name of the source file.
@@ -1826,7 +1832,7 @@ object desugar {
18261832 val (nestedStats, topStats) = pdef.stats.partition(inPackageObject)
18271833 if (nestedStats.isEmpty) pdef
18281834 else {
1829- val name = packageObjectName(ctx.source)
1835+ val name = packageObjectName(ctx.source, pdef.srcPos )
18301836 val grouped =
18311837 ModuleDef (name, Template (emptyConstructor, Nil , Nil , EmptyValDef , nestedStats))
18321838 .withMods(Modifiers (Synthetic ))
0 commit comments