From 8372d0a75163e9814c0af7fbc85dc14ad1bcf78f Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 15 Jun 2013 23:55:05 -0400 Subject: [PATCH] handle directory classpath entries in ClasspathFilter. Fixes #783. --- util/classpath/src/main/scala/sbt/classpath/ClassLoaders.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/classpath/src/main/scala/sbt/classpath/ClassLoaders.scala b/util/classpath/src/main/scala/sbt/classpath/ClassLoaders.scala index 228228030..7eb9e1e11 100644 --- a/util/classpath/src/main/scala/sbt/classpath/ClassLoaders.scala +++ b/util/classpath/src/main/scala/sbt/classpath/ClassLoaders.scala @@ -47,6 +47,7 @@ final class SelfFirstLoader(classpath: Seq[URL], parent: ClassLoader) extends Lo /** Doesn't load any classes itself, but instead verifies that all classes loaded through `parent` either come from `root` or `classpath`.*/ final class ClasspathFilter(parent: ClassLoader, root: ClassLoader, classpath: Set[File]) extends ClassLoader(parent) { + private[this] val directories: Seq[File] = classpath.toSeq.filter(_.isDirectory) override def loadClass(className: String, resolve: Boolean): Class[_] = { val c = super.loadClass(className, resolve) @@ -64,7 +65,7 @@ final class ClasspathFilter(parent: ClassLoader, root: ClassLoader, classpath: S private[this] def onClasspath(src: URL): Boolean = (src eq null) || ( IO.urlAsFile(src) match { - case Some(f) => classpath(f) + case Some(f) => classpath(f) || directories.exists(dir => IO.relativize(dir, f).isDefined) case None => false } )