diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-01-21 00:26:41 -0800 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-01-21 00:26:41 -0800 |
commit | af89c3d258c98351868e5ed5acee97e5b2268452 (patch) | |
tree | 91626b2cb682f87504fdca6b6ade74405b976b8b /src/reflect | |
parent | 434c21c5f101ecc7435d9577a8ee8bd576f571c1 (diff) | |
parent | e57af7dae72cae7d071f848edaf1fdbe32939ed8 (diff) | |
download | scala-af89c3d258c98351868e5ed5acee97e5b2268452.tar.gz scala-af89c3d258c98351868e5ed5acee97e5b2268452.tar.bz2 scala-af89c3d258c98351868e5ed5acee97e5b2268452.zip |
Merge pull request #3365 from retronym/ticket/8133
Fix regression with package objects, overloading
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/Mirrors.scala | 9 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/TreeGen.scala | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/reflect/scala/reflect/internal/Mirrors.scala b/src/reflect/scala/reflect/internal/Mirrors.scala index 9c5a593ca5..6cf4944d18 100644 --- a/src/reflect/scala/reflect/internal/Mirrors.scala +++ b/src/reflect/scala/reflect/internal/Mirrors.scala @@ -186,6 +186,15 @@ trait Mirrors extends api.Mirrors { def getPackageObjectIfDefined(fullname: TermName): Symbol = wrapMissing(getPackageObject(fullname)) + + final def getPackageObjectWithMember(pre: Type, sym: Symbol): Symbol = { + // The owner of a symbol which requires package qualification may be the + // package object iself, but it also could be any superclass of the package + // object. In the latter case, we must go through the qualifier's info + // to obtain the right symbol. + if (sym.owner.isModuleClass) sym.owner.sourceModule // fast path, if the member is owned by a module class, that must be linked to the package object + else pre member nme.PACKAGE // otherwise we have to findMember + } override def staticPackage(fullname: String): ModuleSymbol = ensurePackageSymbol(fullname.toString, getModuleOrClass(newTermNameCached(fullname)), allowModules = false) diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala index f6d21ec9bd..11b3707e48 100644 --- a/src/reflect/scala/reflect/internal/TreeGen.scala +++ b/src/reflect/scala/reflect/internal/TreeGen.scala @@ -191,11 +191,7 @@ abstract class TreeGen extends macros.TreeBuilder { ) val pkgQualifier = if (needsPackageQualifier) { - // The owner of a symbol which requires package qualification may be the - // package object iself, but it also could be any superclass of the package - // object. In the latter case, we must go through the qualifier's info - // to obtain the right symbol. - val packageObject = if (sym.owner.isModuleClass) sym.owner.sourceModule else qual.tpe member nme.PACKAGE + val packageObject = rootMirror.getPackageObjectWithMember(qual.tpe, sym) Select(qual, nme.PACKAGE) setSymbol packageObject setType singleType(qual.tpe, packageObject) } else qual |