in rsc/src/main/scala/rsc/parse/scala/Sources.scala [53:108]
private def packageStats(): List[Stat] = banEscapingWildcards {
val stats = List.newBuilder[Stat]
while (!in.token.isStatSeqEnd) {
if (in.token == IMPORT) {
stats += `import`()
} else if (in.token.isPackageDefnIntro) {
val start = in.offset
val mods = defnMods(modTokens.packageDefn)
val stat = in.token match {
case CASECLASS =>
val modCase = atPos(in.offset)(ModCase())
val modClass = atPos(in.offset)(ModClass())
in.nextToken()
defnClass(mods :+ modCase :+ modClass)
case CASEOBJECT =>
val modCase = atPos(in.offset)(ModCase())
in.nextToken()
defnObject(mods :+ modCase)
case CLASS =>
val modClass = atPos(in.offset)(ModClass())
in.nextToken()
defnClass(mods :+ modClass)
case OBJECT =>
in.nextToken()
defnObject(mods)
case PACKAGE =>
in.nextToken()
if (in.token == OBJECT) {
in.nextToken()
defnPackageObject(mods)
} else {
val id = termPath()
newLineOptWhenFollowedBy(LBRACE)
inBraces(atPos(start)(DefnPackage(mods, id, packageStats)))
}
case TRAIT =>
val modTrait = atPos(in.offset)(ModTrait())
in.nextToken()
defnClass(mods :+ modTrait)
case _ =>
val errOffset = in.offset
reportOffset(errOffset, ExpectedStartOfDefinition)
atPos(errOffset)(errorStat())
}
stats += stat
} else if (!in.token.isStatSep) {
if (in.token == CASE) {
reportOffset(in.offset, IllegalStartOfDefinition)
} else {
reportOffset(in.offset, ExpectedClassOrObjectDefinition)
}
}
acceptStatSepUnlessAtEnd()
}
stats.result
}