diff options
author | Martin Odersky <odersky@gmail.com> | 2016-08-29 15:55:44 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-10-02 16:07:00 +0200 |
commit | 56f01cdf9081b0b221a01e5ae1a9f10e4aa62da9 (patch) | |
tree | a597baa660fd6cf552dbcd1acf9f7af7b51e7422 /src/dotty/tools/dotc/typer/Namer.scala | |
parent | 93d4c8c945540d5df7ee9e8541abcf112439bb1e (diff) | |
download | dotty-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.scala | 61 |
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 _ => () |