private def packageStats()

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
  }