diff options
author | Paul Phillips <paulp@improving.org> | 2011-06-14 16:34:02 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-06-14 16:34:02 +0000 |
commit | e4f800b20550b62d5186130c6f06281f3df3ed90 (patch) | |
tree | 869779cb8fbc32b9888e34b7ec67813bcf884a89 /src/compiler/scala/tools/nsc/util/ClassPath.scala | |
parent | 7fa4ca91ffc1d36f0cb1fe89998578aea242e2f9 (diff) | |
download | scala-e4f800b20550b62d5186130c6f06281f3df3ed90.tar.gz scala-e4f800b20550b62d5186130c6f06281f3df3ed90.tar.bz2 scala-e4f800b20550b62d5186130c6f06281f3df3ed90.zip |
More batched performance improvements for io.{ ...
More batched performance improvements for io.{ File, Classpath } and
others in the neighborhood. Avoids calling the expensive
getCanonicalPath in favor of getAbsolutePath: I note that because
it has the potential to change compiler behavior at the borders.
No review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/util/ClassPath.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/util/ClassPath.scala | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/util/ClassPath.scala b/src/compiler/scala/tools/nsc/util/ClassPath.scala index 2b3aa8696c..23b53fb29f 100644 --- a/src/compiler/scala/tools/nsc/util/ClassPath.scala +++ b/src/compiler/scala/tools/nsc/util/ClassPath.scala @@ -165,7 +165,7 @@ object ClassPath { class JavaContext extends ClassPathContext[AbstractFile] { def toBinaryName(rep: AbstractFile) = { val name = rep.name - assert(name.length > 6 && name.substring(name.length - 6) == ".class", name) + assert(endsClass(name), name) name.substring(0, name.length - 6) } def newClassPath(dir: AbstractFile) = new DirectoryClassPath(dir, this) @@ -175,16 +175,18 @@ object ClassPath { override def isValidName(name: String) = !isTraitImplementation(name) } + @inline private def endsClass(s: String) = s.length > 6 && s.substring(s.length - 6) == ".class" + @inline private def endsScala(s: String) = s.length > 6 && s.substring(s.length - 6) == ".scala" + @inline private def endsJava(s: String) = s.length > 5 && s.substring(s.length - 5) == ".java" + /** From the source file to its identifier. */ def toSourceName(f: AbstractFile): String = { val name = f.name - if (name.length > 6 && name.substring(name.length - 6) == ".scala") - name.substring(0, name.length - 6) - else if (name.length > 5 && name.substring(name.length - 5) == ".java") - name.substring(0, name.length - 5) - else - throw new FatalError("Unexpected source file ending: " + name) + + if (endsScala(name)) name.substring(0, name.length - 6) + else if (endsJava(name)) name.substring(0, name.length - 5) + else throw new FatalError("Unexpected source file ending: " + name) } } import ClassPath._ @@ -259,10 +261,9 @@ abstract class ClassPath[T] { /** Filters for assessing validity of various entities. */ - def validClassFile(name: String) = (name endsWith ".class") && context.isValidName(name) - def validPackage(name: String) = (name != "META-INF") && (name != "") && (name(0) != '.') - def validSourceFile(name: String) = validSourceExtensions exists (name endsWith _) - def validSourceExtensions = List(".scala", ".java") + def validClassFile(name: String) = endsClass(name) && context.isValidName(name) + def validPackage(name: String) = (name != "META-INF") && (name != "") && (name.charAt(0) != '.') + def validSourceFile(name: String) = endsScala(name) || endsJava(name) /** * Find a ClassRep given a class name of the form "package.subpackage.ClassName". @@ -291,7 +292,7 @@ abstract class ClassPath[T] { case x: ClassPath[_] => this.sortString == x.sortString case _ => false } - override def hashCode = sortString.## + override def hashCode = sortString.hashCode() } /** @@ -300,10 +301,7 @@ abstract class ClassPath[T] { class SourcePath[T](dir: AbstractFile, val context: ClassPathContext[T]) extends ClassPath[T] { def name = dir.name override def origin = dir.underlyingSource map (_.path) - def asURLs = dir.file match { - case null => Nil - case file => File(file).toURL :: Nil - } + def asURLs = if (dir.file == null) Nil else List(dir.toURL) def asClasspathString = dir.path val sourcepaths: IndexedSeq[AbstractFile] = IndexedSeq(dir) @@ -329,10 +327,7 @@ class SourcePath[T](dir: AbstractFile, val context: ClassPathContext[T]) extends class DirectoryClassPath(val dir: AbstractFile, val context: ClassPathContext[AbstractFile]) extends ClassPath[AbstractFile] { def name = dir.name override def origin = dir.underlyingSource map (_.path) - def asURLs = dir.file match { - case null => Nil - case file => File(file).toURL :: Nil - } + def asURLs = if (dir.file == null) Nil else List(dir.toURL) def asClasspathString = dir.path val sourcepaths: IndexedSeq[AbstractFile] = IndexedSeq() |