From dd32ac75dac14fd951b54713dbd07eedd84aee47 Mon Sep 17 00:00:00 2001 From: dmharrah Date: Mon, 27 Jul 2009 13:52:38 +0000 Subject: [PATCH] Fix class file resolution issue git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@893 d89573ee-9141-11dd-94d4-bdf5e562f29c --- src/main/scala/sbt/classfile/Analyze.scala | 12 ++++++------ src/main/scala/sbt/classfile/Parser.scala | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/scala/sbt/classfile/Analyze.scala b/src/main/scala/sbt/classfile/Analyze.scala index 2e53a76a2..698cf3dec 100644 --- a/src/main/scala/sbt/classfile/Analyze.scala +++ b/src/main/scala/sbt/classfile/Analyze.scala @@ -46,17 +46,16 @@ object Analyze for(classFile <- classFiles if isTopLevel(classFile); method <- classFile.methods; if method.isMain) analysis.foundApplication(source, classFile.className) - def processDependency(tpeSlashed: String) + def processDependency(tpe: String) { - val tpe = tpeSlashed.replace('/','.') Control.trapAndLog(log) { val clazz = Class.forName(tpe, false, loader) val file = FileUtilities.classLocationFile(clazz) if(file.isDirectory) { - val resolved = resolveClassFile(file, tpeSlashed) - require(resolved.exists) + 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) { @@ -81,12 +80,13 @@ object Analyze compile orElse Control.convertErrorMessage(log)(analyze()).left.toOption } - private def resolveClassFile(file: File, className: String): File = (file /: (className + ".class").split("""\\"""))(new File(_, _)) + private def resolveClassFile(file: File, className: String): File = (file /: (className.replace('.','/') + ".class").split("/"))(new File(_, _)) private def guessSourcePath(sources: scala.collection.Set[Path], roots: Iterable[Path], classFile: ClassFile, log: Logger) = { val classNameParts = classFile.className.split("""\.""") val lastIndex = classNameParts.length - 1 - val (pkg, simpleClassName) = (classNameParts.take(lastIndex), classNameParts(lastIndex)) + val pkg = classNameParts.take(lastIndex) + val simpleClassName = classNameParts(lastIndex) val sourceFileName = classFile.sourceFile.getOrElse(simpleClassName.takeWhile(_ != '$').mkString("", "", ".java")) val relativeSourceFile = (pkg ++ (sourceFileName :: Nil)).mkString("/") val candidates = roots.map(root => Path.fromString(root, relativeSourceFile)).filter(sources.contains).toList diff --git a/src/main/scala/sbt/classfile/Parser.scala b/src/main/scala/sbt/classfile/Parser.scala index 2c9c0eea6..9d622f621 100644 --- a/src/main/scala/sbt/classfile/Parser.scala +++ b/src/main/scala/sbt/classfile/Parser.scala @@ -88,7 +88,7 @@ object Parser constants.flatMap { constant => constant.tag match { - case ConstantClass => toUTF8(constant.nameIndex) :: Nil + case ConstantClass => slashesToDots(toUTF8(constant.nameIndex)) :: Nil case _ => Nil } }