diff --git a/src/main/scala/sbt/FileUtilities.scala b/src/main/scala/sbt/FileUtilities.scala index ea87b8895..50a19fd0e 100644 --- a/src/main/scala/sbt/FileUtilities.scala +++ b/src/main/scala/sbt/FileUtilities.scala @@ -797,7 +797,7 @@ object FileUtilities def classLocation(cl: Class[_]): URL = { val codeSource = cl.getProtectionDomain.getCodeSource - if(codeSource == null) null // TODO: return something nicer, probably the location of rt.jar + if(codeSource == null) error("No class location for " + cl) else codeSource.getLocation } def classLocationFile(cl: Class[_]): File = toFile(classLocation(cl)) diff --git a/src/main/scala/sbt/classfile/Analyze.scala b/src/main/scala/sbt/classfile/Analyze.scala index 698cf3dec..5d6262644 100644 --- a/src/main/scala/sbt/classfile/Analyze.scala +++ b/src/main/scala/sbt/classfile/Analyze.scala @@ -51,25 +51,27 @@ object Analyze Control.trapAndLog(log) { val clazz = Class.forName(tpe, false, loader) - val file = FileUtilities.classLocationFile(clazz) - if(file.isDirectory) + for(file <- Control.convertException(FileUtilities.classLocationFile(clazz)).right) { - val resolved = resolveClassFile(file, tpe) - require(resolved.exists, "Resolved class file " + resolved + " did not exist") - val resolvedPath = Path.fromFile(resolved) - if(Path.fromFile(file) == outputDirectory) + if(file.isDirectory) { - productToSource.get(resolvedPath) match + val resolved = resolveClassFile(file, tpe) + assume(resolved.exists, "Resolved class file " + resolved + " from " + source + " did not exist") + val resolvedPath = Path.fromFile(resolved) + if(Path.fromFile(file) == outputDirectory) { - case Some(dependsOn) => analysis.sourceDependency(dependsOn, source) - case None => analysis.productDependency(resolvedPath, source) + productToSource.get(resolvedPath) match + { + case Some(dependsOn) => analysis.sourceDependency(dependsOn, source) + case None => analysis.productDependency(resolvedPath, source) + } } + else + analysis.classDependency(resolved, source) } else - analysis.classDependency(resolved, source) + analysis.jarDependency(file, source) } - else - analysis.jarDependency(file, source) } } diff --git a/src/main/scala/sbt/classfile/Parser.scala b/src/main/scala/sbt/classfile/Parser.scala index 9d622f621..a80331289 100644 --- a/src/main/scala/sbt/classfile/Parser.scala +++ b/src/main/scala/sbt/classfile/Parser.scala @@ -88,7 +88,12 @@ object Parser constants.flatMap { constant => constant.tag match { - case ConstantClass => slashesToDots(toUTF8(constant.nameIndex)) :: Nil + case ConstantClass => + val name = toUTF8(constant.nameIndex) + if(name.startsWith("[")) + descriptorToTypes(Some(name)) + else + slashesToDots(name) :: Nil case _ => Nil } }