aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Namer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-08-29 15:55:44 +0200
committerMartin Odersky <odersky@gmail.com>2016-10-02 16:07:00 +0200
commit56f01cdf9081b0b221a01e5ae1a9f10e4aa62da9 (patch)
treea597baa660fd6cf552dbcd1acf9f7af7b51e7422 /src/dotty/tools/dotc/typer/Namer.scala
parent93d4c8c945540d5df7ee9e8541abcf112439bb1e (diff)
downloaddotty-56f01cdf9081b0b221a01e5ae1a9f10e4aa62da9.tar.gz
dotty-56f01cdf9081b0b221a01e5ae1a9f10e4aa62da9.tar.bz2
dotty-56f01cdf9081b0b221a01e5ae1a9f10e4aa62da9.zip
Namer refactoing
- DRY - Refactor out special path operations
Diffstat (limited to 'src/dotty/tools/dotc/typer/Namer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Namer.scala61
1 files changed, 31 insertions, 30 deletions
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala
index cfd49fd87..6eca9be41 100644
--- a/src/dotty/tools/dotc/typer/Namer.scala
+++ b/src/dotty/tools/dotc/typer/Namer.scala
@@ -403,37 +403,28 @@ class Namer { typer: Typer =>
/** Create top-level symbols for all statements in the expansion of this statement and
* enter them into symbol table
*/
- def indexExpanded(stat: Tree)(implicit ctx: Context): Context = expanded(stat) match {
- case pcl: PackageDef =>
- val pkg = createPackageSymbol(pcl.pid)
- index(pcl.stats)(ctx.fresh.setOwner(pkg.moduleClass))
- invalidateCompanions(pkg, Trees.flatten(pcl.stats map expanded))
- setDocstring(pkg, stat)
- ctx
- case imp: Import =>
- importContext(createSymbol(imp), imp.selectors)
- case mdef: DefTree =>
- val sym = enterSymbol(createSymbol(mdef))
- setDocstring(sym, stat)
-
- // add java enum constants
- mdef match {
- case vdef: ValDef if (isEnumConstant(vdef)) =>
- val enumClass = sym.owner.linkedClass
- if (!(enumClass is Flags.Sealed)) enumClass.setFlag(Flags.AbstractSealed)
- enumClass.addAnnotation(Annotation.makeChild(sym))
- case _ =>
- }
-
- ctx
- case stats: Thicket =>
- for (tree <- stats.toList) {
- val sym = enterSymbol(createSymbol(tree))
+ def indexExpanded(stat: Tree)(implicit ctx: Context): Context = {
+ def recur(stat: Tree): Context = stat match {
+ case pcl: PackageDef =>
+ val pkg = createPackageSymbol(pcl.pid)
+ index(pcl.stats)(ctx.fresh.setOwner(pkg.moduleClass))
+ invalidateCompanions(pkg, Trees.flatten(pcl.stats map expanded))
+ setDocstring(pkg, stat)
+ ctx
+ case imp: Import =>
+ importContext(createSymbol(imp), imp.selectors)
+ case mdef: DefTree =>
+ val sym = enterSymbol(createSymbol(mdef))
setDocstring(sym, stat)
- }
- ctx
- case _ =>
- ctx
+ addEnumConstants(mdef, sym)
+ ctx
+ case stats: Thicket =>
+ stats.toList.foreach(recur)
+ ctx
+ case _ =>
+ ctx
+ }
+ recur(expanded(stat))
}
/** Determines whether this field holds an enum constant.
@@ -454,6 +445,16 @@ class Namer { typer: Typer =>
vd.mods.is(allOf(Enum, Stable, JavaStatic, JavaDefined)) // && ownerHasEnumFlag
}
+ /** Add java enum constants */
+ def addEnumConstants(mdef: DefTree, sym: Symbol)(implicit ctx: Context): Unit = mdef match {
+ case vdef: ValDef if (isEnumConstant(vdef)) =>
+ val enumClass = sym.owner.linkedClass
+ if (!(enumClass is Flags.Sealed)) enumClass.setFlag(Flags.AbstractSealed)
+ enumClass.addAnnotation(Annotation.makeChild(sym))
+ case _ =>
+ }
+
+
def setDocstring(sym: Symbol, tree: Tree)(implicit ctx: Context) = tree match {
case t: MemberDef => ctx.docbase.addDocstring(sym, t.rawComment)
case _ => ()