diff options
author | Paul Phillips <paulp@improving.org> | 2012-10-28 12:08:37 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-11-09 16:44:53 -0700 |
commit | 632daed4ed846f773bb9a730c0721d21f3fa53c0 (patch) | |
tree | cdcee82e8f75e686442ccf1abdcfce5f7c68ae18 /src/reflect/scala/reflect/internal/Types.scala | |
parent | 2a1d0202f1b7f59f6312263b7a80ea750657296d (diff) | |
download | scala-632daed4ed846f773bb9a730c0721d21f3fa53c0.tar.gz scala-632daed4ed846f773bb9a730c0721d21f3fa53c0.tar.bz2 scala-632daed4ed846f773bb9a730c0721d21f3fa53c0.zip |
Minor tweaks in Types/Scopes.
All methods to do with handling imports more uniformly and early
filtering of symbols which cannot be imported. Also make TypeBounds
treat a Wildcard in lower or upper bounds as an empty bound, so we
don't see all these method signatures like
def f[T >: ? <: ?]
because that's not helpful.
Diffstat (limited to 'src/reflect/scala/reflect/internal/Types.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index 91a64def83..3104c1e74e 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -1516,8 +1516,8 @@ trait Types extends api.Types { self: SymbolTable => } private def lowerString = if (emptyLowerBound) "" else " >: " + lo private def upperString = if (emptyUpperBound) "" else " <: " + hi - private def emptyLowerBound = typeIsNothing(lo) - private def emptyUpperBound = typeIsAny(hi) + private def emptyLowerBound = typeIsNothing(lo) || lo.isWildcard + private def emptyUpperBound = typeIsAny(hi) || hi.isWildcard def isEmptyBounds = emptyLowerBound && emptyUpperBound // override def isNullable: Boolean = NullClass.tpe <:< lo; @@ -7240,8 +7240,12 @@ trait Types extends api.Types { self: SymbolTable => /** Members of the given class, other than those inherited * from Any or AnyRef. */ - def nonTrivialMembers(clazz: Symbol): Iterable[Symbol] = - clazz.info.members filterNot (sym => sym.owner == ObjectClass || sym.owner == AnyClass) + def nonTrivialMembers(clazz: Symbol): Scope = clazz.info.members filterNot isUniversalMember + + /** Members which can be imported into other scopes. + */ + def importableMembers(clazz: Symbol): Scope = importableMembers(clazz.info) + def importableMembers(pre: Type): Scope = pre.members filter isImportable def objToAny(tp: Type): Type = if (!phase.erasedTypes && tp.typeSymbol == ObjectClass) AnyClass.tpe |