Transient access to API structure from xsbt compiler interface

This commit is contained in:
Mark Harrah 2009-11-22 22:57:08 -05:00
parent 4f808aad2b
commit e988b0e51e
4 changed files with 12 additions and 4 deletions

View File

@ -1,7 +1,7 @@
#Project properties
#Mon Nov 09 21:08:39 EST 2009
#Thu Nov 19 22:26:26 EST 2009
project.organization=org.scala-tools.sbt
project.name=Simple Build Tool
sbt.version=0.5.6
project.version=0.6.3
project.version=0.6.4-p1
scala.version=2.7.5

View File

@ -164,14 +164,17 @@ import Format._ // get implicits for data types
class BasicCompileAnalysis protected (analysisPath: Path, projectPath: Path, log: Logger) extends BasicAnalysis(analysisPath, projectPath, log)
{
/*private */val hashesMap = new HashMap[Path, Array[Byte]]
val apiMap = new HashMap[Path, xsbti.api.Source]
override protected def mapsToClear = hashesMap :: super.mapsToClear
override protected def mapsToRemoveSource = hashesMap :: super.mapsToRemoveSource
override protected def mapsToClear = apiMap :: hashesMap :: super.mapsToClear
override protected def mapsToRemoveSource = apiMap :: hashesMap :: super.mapsToRemoveSource
def setHash(source: Path, hash: Array[Byte]) { hashesMap(source) = hash }
def clearHash(source: Path) { hashesMap.removeKey(source) }
def hash(source: Path) = hashesMap.get(source)
def clearHashes() { hashesMap.clear() }
def setAPI(source: Path, a: xsbti.api.Source) { apiMap(source) = a }
def getClasses(sources: PathFinder, outputDirectory: Path): PathFinder =
Path.lazyPathFinder

View File

@ -58,6 +58,7 @@ trait AnalysisCallback extends NotNull
def endSource(sourcePath: Path): Unit
/** Called when a module with a public 'main' method with the right signature is found.*/
def foundApplication(sourcePath: Path, className: String): Unit
def api(sourcePath: Path, source: xsbti.api.Source): Unit
}
abstract class BasicAnalysisCallback[A <: BasicCompileAnalysis](val basePath: Path, protected val analysis: A) extends AnalysisCallback
{
@ -84,6 +85,9 @@ abstract class BasicAnalysisCallback[A <: BasicCompileAnalysis](val basePath: Pa
def endSource(sourcePath: Path): Unit =
analysis.removeSelfDependency(sourcePath)
def api(sourcePath: Path, source: xsbti.api.Source): Unit =
analysis.setAPI(sourcePath, source)
}
abstract class BasicCompileAnalysisCallback(basePath: Path, analysis: CompileAnalysis)
extends BasicAnalysisCallback(basePath, analysis)

View File

@ -134,4 +134,5 @@ private final class AnalysisInterface(delegate: AnalysisCallback, basePath: Path
def relativizeOrAbs(base: Path, file: File) = Path.relativize(base, file).getOrElse(Path.fromFile(file))
def classPath(file: File) = relativizeOrAbs(outputPath, file)
def srcPath(file: File) = relativizeOrAbs(basePath, file)
def api(file: File, source: xsbti.api.Source) = delegate.api(srcPath(file), source)
}