@@ -106,7 +106,7 @@ class ClassfileParser(
106106
107107 /** Return the class symbol of the given name. */
108108 def classNameToSymbol (name : Name )(implicit ctx : Context ): Symbol = innerClasses.get(name) match {
109- case Some (entry) => innerClasses.classSymbol(entry.externalName )
109+ case Some (entry) => innerClasses.classSymbol(entry)
110110 case None => ctx.requiredClass(name)
111111 }
112112
@@ -890,54 +890,38 @@ class ClassfileParser(
890890 classNameToSymbol(tlName)
891891 }
892892
893- /** Return the class symbol for `externalName `. It looks it up in its outer class.
893+ /** Return the class symbol for `entry `. It looks it up in its outer class.
894894 * Forces all outer class symbols to be completed.
895- *
896- * If the given name is not an inner class, it returns the symbol found in `defn`.
897895 */
898- def classSymbol (externalName : Name )(implicit ctx : Context ): Symbol = {
899- /** Return the symbol of `innerName`, having the given `externalName`. */
900- def innerSymbol (externalName : Name , innerName : Name , static : Boolean ): Symbol = {
901- def getMember (sym : Symbol , name : Name )(implicit ctx : Context ): Symbol =
902- if (static)
903- if (sym == classRoot.symbol) staticScope.lookup(name)
904- else {
905- var module = sym.companionModule
906- if (! module.exists && sym.isAbsent)
907- module = sym.scalacLinkedClass
908- module.info.member(name).symbol
909- }
910- else
911- if (sym == classRoot.symbol) instanceScope.lookup(name)
912- else sym.info.member(name).symbol
913-
914- innerClasses.get(externalName) match {
915- case Some (entry) =>
916- val outerName = entry.outerName.stripModuleClassSuffix
917- val owner = classSymbol(outerName)
918- val result = ctx.atPhaseNotLaterThan(ctx.typerPhase) { implicit ctx =>
919- getMember(owner, innerName.toTypeName)
920- }
921- assert(result ne NoSymbol ,
922- i """ failure to resolve inner class:
923- |externalName = $externalName,
924- |outerName = $outerName,
925- |innerName = $innerName
926- |owner.fullName = ${owner.showFullName}
927- |while parsing ${classfile}""" )
928- result
929-
930- case None =>
931- classNameToSymbol(externalName)
896+ def classSymbol (entry : InnerClassEntry )(implicit ctx : Context ): Symbol = {
897+ def getMember (sym : Symbol , name : Name )(implicit ctx : Context ): Symbol =
898+ if (isStatic(entry.jflags)) {
899+ if (sym == classRoot.symbol)
900+ staticScope.lookup(name)
901+ else {
902+ var module = sym.companionModule
903+ if (! module.exists && sym.isAbsent)
904+ module = sym.scalacLinkedClass
905+ module.info.member(name).symbol
906+ }
932907 }
933- }
934-
935- get(externalName) match {
936- case Some (entry) =>
937- innerSymbol(entry.externalName, entry.originalName, isStatic(entry.jflags))
938- case None =>
939- classNameToSymbol(externalName)
940- }
908+ else if (sym == classRoot.symbol)
909+ instanceScope.lookup(name)
910+ else
911+ sym.info.member(name).symbol
912+
913+ val outerName = entry.outerName.stripModuleClassSuffix
914+ val innerName = entry.originalName
915+ val owner = classNameToSymbol(outerName)
916+ val result = getMember(owner, innerName.toTypeName)(ctx.withPhase(ctx.typerPhase))
917+ assert(result ne NoSymbol ,
918+ i """ failure to resolve inner class:
919+ |externalName = ${entry.externalName},
920+ |outerName = $outerName,
921+ |innerName = $innerName
922+ |owner.fullName = ${owner.showFullName}
923+ |while parsing ${classfile}""" )
924+ result
941925 }
942926 }
943927
0 commit comments