Skip to content

Commit f370799

Browse files
committed
Fix ClassfileParser
#2158 has uncovered flaws in the classfile parser. Matches that used to always miss led to code that made no sense. The function naming was terrible too, that's why nobody understood what was going on. `findSourceFile` to find the class file, seriously?
1 parent 03f1304 commit f370799

File tree

2 files changed

+4
-11
lines changed

2 files changed

+4
-11
lines changed

compiler/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ class ClassfileParser(
661661
for (entry <- innerClasses.values) {
662662
// create a new class member for immediate inner classes
663663
if (entry.outerName == currentClassName) {
664-
val file = ctx.platform.classPath.findSourceFile(entry.externalName.toString) getOrElse {
664+
val file = ctx.platform.classPath.findBinaryFile(entry.externalName.toString) getOrElse {
665665
throw new AssertionError(entry.externalName)
666666
}
667667
enterClassAndModule(entry, file, entry.jflags)

compiler/src/dotty/tools/io/ClassPath.scala

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,20 +240,13 @@ abstract class ClassPath {
240240
def findClass(name: String): Option[AnyClassRep] =
241241
name.splitWhere(_ == '.', doDropIndex = true) match {
242242
case Some((pkg, rest)) =>
243-
val rep = packages find (_.name == pkg) flatMap (_ findClass rest)
244-
rep map {
245-
case x: AnyClassRep => x
246-
case x => throw new FatalError("Unexpected ClassRep '%s' found searching for name '%s'".format(x, name))
247-
}
243+
packages find (_.name == pkg) flatMap (_ findClass rest)
248244
case _ =>
249245
classes find (_.name == name)
250246
}
251247

252-
def findSourceFile(name: String): Option[AbstractFile] =
253-
findClass(name) match {
254-
case Some(ClassRep(Some(x: AbstractFile), _)) => Some(x)
255-
case _ => None
256-
}
248+
def findBinaryFile(name: String): Option[AbstractFile] =
249+
findClass(name).flatMap(_.binary)
257250

258251
def sortString = join(split(asClasspathString).sorted: _*)
259252

0 commit comments

Comments
 (0)