@@ -1007,9 +1007,16 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
1007
1007
(! implicitlyAdded || m.implicitlyAdded)
1008
1008
1009
1009
def add (sym : Symbol , pre : Type , implicitlyAdded : Boolean )(toMember : (Symbol , Type ) => M ): Unit = {
1010
+ // cannot exclude `isSynthetic` because, eg, synthetic case class members
1011
+ def exclude =
1012
+ sym.isError || ! sym.hasRawInfo ||
1013
+ sym.isArtifact || sym.isDefaultGetter || sym.isMixinConstructor ||
1014
+ // Exclude top-level class symbols with a `$`. The compiler creates a symbol for every `.class` file, but there
1015
+ // are many that we don't want in completions (inner / module / specialized classes). See scala/scala-dev#905.
1016
+ sym.isTopLevel && ! sym.rawInfo.isComplete && sym.name.decodedName.containsChar('$' )
1010
1017
if ((sym.isGetter || sym.isSetter) && sym.accessed != NoSymbol ) {
1011
1018
add(sym.accessed, pre, implicitlyAdded)(toMember)
1012
- } else if (! sym.isError && ! sym.isArtifact && sym.hasRawInfo && ! sym.isDefaultGetter && ! sym.isMixinConstructor ) {
1019
+ } else if (! exclude ) {
1013
1020
val symtpe = pre.memberType(sym) onTypeError ErrorType
1014
1021
matching(sym, symtpe, this (sym.name)) match {
1015
1022
case Some (m) =>
@@ -1199,7 +1206,7 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
1199
1206
def aliasTypeOk : Boolean = {
1200
1207
matcher(member.aliasInfo.map(_.sym.name).getOrElse(NoSymbol .name)) && ! forImport && symbol.name.isTermName == name.isTermName
1201
1208
}
1202
-
1209
+
1203
1210
! isJunk && member.accessible && (name.isEmpty || (matcher(member.sym.name) || aliasTypeOk)
1204
1211
&& nameTypeOk)
1205
1212
0 commit comments