Skip to content

Commit 0f9a704

Browse files
committed
faster AggregateClassPath.findClass
1 parent 43f7a86 commit 0f9a704

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

src/compiler/scala/tools/nsc/classpath/AggregateFlatClassPath.scala

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,23 @@ case class AggregateFlatClassPath(aggregates: Seq[FlatClassPath]) extends FlatCl
3131
}
3232

3333
override def findClass(className: String): Option[ClassRepresentation] = {
34-
val (pkg, simpleClassName) = PackageNameUtils.separatePkgAndClassNames(className)
35-
3634
@tailrec
37-
def findEntry[T <: ClassRepClassPathEntry](aggregates: Seq[FlatClassPath], getEntries: FlatClassPath => Seq[T]): Option[T] =
35+
def findEntry(aggregates: Seq[FlatClassPath], isSource: Boolean): Option[ClassRepresentation] =
3836
if (aggregates.nonEmpty) {
39-
val entry = getEntries(aggregates.head).find(_.name == simpleClassName)
37+
val entry = aggregates.head.findClass(className) match {
38+
case s @ Some(_: SourceFileEntry) if isSource => s
39+
case s @ Some(_: ClassFileEntry) if !isSource => s
40+
case _ => None
41+
}
4042
if (entry.isDefined) entry
41-
else findEntry(aggregates.tail, getEntries)
43+
else findEntry(aggregates.tail, isSource)
4244
} else None
4345

44-
val classEntry = findEntry(aggregates, classesGetter(pkg))
45-
val sourceEntry = findEntry(aggregates, sourcesGetter(pkg))
46+
val classEntry = findEntry(aggregates, isSource = false)
47+
val sourceEntry = findEntry(aggregates, isSource = true)
4648

4749
(classEntry, sourceEntry) match {
48-
case (Some(c), Some(s)) => Some(ClassAndSourceFilesEntry(c.file, s.file))
50+
case (Some(c: ClassFileEntry), Some(s: SourceFileEntry)) => Some(ClassAndSourceFilesEntry(c.file, s.file))
4951
case (c @ Some(_), _) => c
5052
case (_, s) => s
5153
}
@@ -63,10 +65,10 @@ case class AggregateFlatClassPath(aggregates: Seq[FlatClassPath]) extends FlatCl
6365
}
6466

6567
override private[nsc] def classes(inPackage: String): Seq[ClassFileEntry] =
66-
getDistinctEntries(classesGetter(inPackage))
68+
getDistinctEntries(_.classes(inPackage))
6769

6870
override private[nsc] def sources(inPackage: String): Seq[SourceFileEntry] =
69-
getDistinctEntries(sourcesGetter(inPackage))
71+
getDistinctEntries(_.sources(inPackage))
7072

7173
override private[nsc] def list(inPackage: String): FlatClassPathEntries = {
7274
val (packages, classesAndSources) = aggregates.map(_.list(inPackage)).unzip
@@ -121,9 +123,6 @@ case class AggregateFlatClassPath(aggregates: Seq[FlatClassPath]) extends FlatCl
121123
}
122124
entriesBuffer.toIndexedSeq
123125
}
124-
125-
private def classesGetter(pkg: String) = (cp: FlatClassPath) => cp.classes(pkg)
126-
private def sourcesGetter(pkg: String) = (cp: FlatClassPath) => cp.sources(pkg)
127126
}
128127

129128
object AggregateFlatClassPath {

0 commit comments

Comments
 (0)