More fixes for tracking Java sources.

git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@894 d89573ee-9141-11dd-94d4-bdf5e562f29c
This commit is contained in:
dmharrah 2009-07-27 15:13:55 +00:00
parent dd32ac75da
commit 3cd6f75b4a
3 changed files with 21 additions and 14 deletions

View File

@ -797,7 +797,7 @@ object FileUtilities
def classLocation(cl: Class[_]): URL = def classLocation(cl: Class[_]): URL =
{ {
val codeSource = cl.getProtectionDomain.getCodeSource 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 else codeSource.getLocation
} }
def classLocationFile(cl: Class[_]): File = toFile(classLocation(cl)) def classLocationFile(cl: Class[_]): File = toFile(classLocation(cl))

View File

@ -51,25 +51,27 @@ object Analyze
Control.trapAndLog(log) Control.trapAndLog(log)
{ {
val clazz = Class.forName(tpe, false, loader) val clazz = Class.forName(tpe, false, loader)
val file = FileUtilities.classLocationFile(clazz) for(file <- Control.convertException(FileUtilities.classLocationFile(clazz)).right)
if(file.isDirectory)
{ {
val resolved = resolveClassFile(file, tpe) if(file.isDirectory)
require(resolved.exists, "Resolved class file " + resolved + " did not exist")
val resolvedPath = Path.fromFile(resolved)
if(Path.fromFile(file) == outputDirectory)
{ {
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) productToSource.get(resolvedPath) match
case None => analysis.productDependency(resolvedPath, source) {
case Some(dependsOn) => analysis.sourceDependency(dependsOn, source)
case None => analysis.productDependency(resolvedPath, source)
}
} }
else
analysis.classDependency(resolved, source)
} }
else else
analysis.classDependency(resolved, source) analysis.jarDependency(file, source)
} }
else
analysis.jarDependency(file, source)
} }
} }

View File

@ -88,7 +88,12 @@ object Parser
constants.flatMap { constant => constants.flatMap { constant =>
constant.tag match 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 case _ => Nil
} }
} }