From 60d5bbdf4aafb8a5d49bafc7db2b4481b94ec4f9 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 11 Jan 2010 08:55:42 +0000 Subject: speed up ClassPath.findClass. review by community --- src/compiler/scala/tools/nsc/util/ClassPath.scala | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/scala/tools/nsc/util/ClassPath.scala b/src/compiler/scala/tools/nsc/util/ClassPath.scala index a906aa40c3..a6b0a1244d 100644 --- a/src/compiler/scala/tools/nsc/util/ClassPath.scala +++ b/src/compiler/scala/tools/nsc/util/ClassPath.scala @@ -90,7 +90,7 @@ object ClassPath { } /** - * A represents classes which can be loaded with a ClassfileLoader/MSILTypeLoader + * Represents classes which can be loaded with a ClassfileLoader/MSILTypeLoader * and / or a SourcefileLoader. */ case class ClassRep[T](binary: Option[T], source: Option[AbstractFile]) { @@ -124,9 +124,9 @@ abstract class ClassPath[T] { * The short name of the package (without prefix) */ def name: String - def classes: List[ClassRep[T]] - def packages: List[ClassPath[T]] - def sourcepaths: List[AbstractFile] + val classes: List[ClassRep[T]] + val packages: List[ClassPath[T]] + val sourcepaths: List[AbstractFile] /** * Find a ClassRep given a class name of the form "package.subpackage.ClassName". @@ -150,7 +150,7 @@ abstract class ClassPath[T] { class SourcePath[T](dir: AbstractFile) extends ClassPath[T] { def name = dir.name - def classes = { + lazy val classes = { val cls = new ListBuffer[ClassRep[T]] for (f <- dir.iterator) { if (!f.isDirectory && ClassPath.validSourceFile(f.name)) @@ -159,7 +159,7 @@ class SourcePath[T](dir: AbstractFile) extends ClassPath[T] { cls.toList } - def packages = { + lazy val packages = { val pkg = new ListBuffer[SourcePath[T]] for (f <- dir.iterator) { if (f.isDirectory && ClassPath.validPackage(f.name)) @@ -168,7 +168,7 @@ class SourcePath[T](dir: AbstractFile) extends ClassPath[T] { pkg.toList } - def sourcepaths: List[AbstractFile] = List(dir) + val sourcepaths: List[AbstractFile] = List(dir) override def toString() = "sourcepath: "+ dir.toString() } @@ -179,7 +179,7 @@ class SourcePath[T](dir: AbstractFile) extends ClassPath[T] { class DirectoryClassPath(dir: AbstractFile) extends ClassPath[AbstractFile] { def name = dir.name - def classes = { + lazy val classes = { val cls = new ListBuffer[ClassRep[AbstractFile]] for (f <- dir.iterator) { if (!f.isDirectory && ClassPath.validClassFile(f.name)) @@ -188,7 +188,7 @@ class DirectoryClassPath(dir: AbstractFile) extends ClassPath[AbstractFile] { cls.toList } - def packages = { + lazy val packages = { val pkg = new ListBuffer[DirectoryClassPath] for (f <- dir.iterator) { if (f.isDirectory && ClassPath.validPackage(f.name)) @@ -197,7 +197,7 @@ class DirectoryClassPath(dir: AbstractFile) extends ClassPath[AbstractFile] { pkg.toList } - def sourcepaths: List[AbstractFile] = Nil + val sourcepaths: List[AbstractFile] = Nil override def toString() = "directory classpath: "+ dir.toString() } @@ -230,7 +230,7 @@ class AssemblyClassPath(types: Array[MSILType], namespace: String) extends Class if (types(m).FullName.startsWith(namespace)) m else types.length } - def classes = { + lazy val classes = { val cls = new ListBuffer[ClassRep[MSILType]] var i = first while (i < types.length && types(i).Namespace.startsWith(namespace)) { @@ -242,7 +242,7 @@ class AssemblyClassPath(types: Array[MSILType], namespace: String) extends Class cls.toList } - def packages = { + lazy val packages = { val nsSet = new MutHashSet[String] var i = first while (i < types.length && types(i).Namespace.startsWith(namespace)) { @@ -260,7 +260,7 @@ class AssemblyClassPath(types: Array[MSILType], namespace: String) extends Class yield new AssemblyClassPath(types, ns) } - def sourcepaths: List[AbstractFile] = Nil + val sourcepaths: List[AbstractFile] = Nil override def toString() = "assembly classpath "+ namespace } @@ -273,7 +273,7 @@ abstract class MergedClassPath[T] extends ClassPath[T] { def name = entries.head.name - def classes: List[ClassRep[T]] = { + lazy val classes: List[ClassRep[T]] = { val cls = new ListBuffer[ClassRep[T]] for (e <- entries; c <- e.classes) { val name = c.name @@ -291,7 +291,7 @@ abstract class MergedClassPath[T] extends ClassPath[T] { cls.toList } - def packages: List[ClassPath[T]] = { + lazy val packages: List[ClassPath[T]] = { val pkg = new ListBuffer[ClassPath[T]] for (e <- entries; p <- e.packages) { val name = p.name @@ -305,7 +305,7 @@ abstract class MergedClassPath[T] extends ClassPath[T] { pkg.toList } - def sourcepaths: List[AbstractFile] = entries.flatMap(_.sourcepaths) + lazy val sourcepaths: List[AbstractFile] = entries.flatMap(_.sourcepaths) private def addPackage(to: ClassPath[T], pkg: ClassPath[T]) = to match { case cp: MergedClassPath[_] => -- cgit v1.2.3