/* sbt -- Simple Build Tool
 * Copyright 2008, 2009  Mark Harrah
 */
package sbt

import java.io.File

object object sbt.AnalysisCallbackAnalysisCallback
{
	private val scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]map = scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]new scala.collection.mutable.scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]HashMap[Int, AnalysisCallback]
	private var IntnextID: IntInt = Int(0)0
	def (sbt.AnalysisCallback)Intregister(sbt.AnalysisCallbackcallback: sbt.AnalysisCallbackAnalysisCallback): IntInt =
	{
		val Intid = => IntnextID
		(Int)UnitnextID (Int)Int+= Int(1)1
		=> scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]map(Intid) = sbt.AnalysisCallbackcallback
		Intid
	}
	def (Int)Option[sbt.AnalysisCallback]apply(Intid: IntInt): Option[sbt.AnalysisCallback]Option[AnalysisCallback] = => scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]map.(Int)Option[sbt.AnalysisCallback]get(Intid)
	def (Int)Unitunregister(Intid: IntInt)
	{
		=> scala.collection.mutable.HashMap[Int,sbt.AnalysisCallback]map (Int)Unit-= Intid
	}
}

trait trait AnalysisCallback extends java.lang.Object with NotNullAnalysisCallback extends NotNullNotNull
{
	/** The names of classes that the analyzer should find subclasses of.*/
	def => Iterable[String]superclassNames: Iterable[String]Iterable[String]
	/** The base path for the project.*/
	def => sbt.PathbasePath: sbt.PathPath
	/** Called when the the given superclass could not be found on the classpath by the compiler.*/
	def (String)UnitsuperclassNotFound(StringsuperclassName: StringString): UnitUnit
	/** Called before the source at the given location is processed. */
	def (sbt.Path)UnitbeginSource(sbt.PathsourcePath: sbt.PathPath): UnitUnit
	/** Called when the a subclass of one of the classes given in <code>superclassNames</code> is
	* discovered.*/
	def (sbt.Path,String,String,Boolean)UnitfoundSubclass(sbt.PathsourcePath: sbt.PathPath, StringsubclassName: StringString, StringsuperclassName: StringString, BooleanisModule: BooleanBoolean): UnitUnit
	/** Called to indicate that the source file <code>sourcePath</code> depends on the source file
	* <code>dependsOnPath</code>.*/
	def (sbt.Path,sbt.Path)UnitsourceDependency(sbt.PathdependsOnPath: sbt.PathPath, sbt.PathsourcePath: sbt.PathPath): UnitUnit
	/** Called to indicate that the source file <code>sourcePath</code> depends on the jar
	* <code>jarPath</code>.*/
	def (java.io.File,sbt.Path)UnitjarDependency(java.io.FilejarPath: java.io.FileFile, sbt.PathsourcePath: sbt.PathPath): UnitUnit
	/** Called to indicate that the source file <code>sourcePath</code> depends on the class file
	* <code>classFile</code>.*/
	def (java.io.File,sbt.Path)UnitclassDependency(java.io.FileclassFile: java.io.FileFile, sbt.PathsourcePath: sbt.PathPath): UnitUnit
	/** Called to indicate that the source file <code>sourcePath</code> produces a class file at
	* <code>modulePath</code>.*/
	def (sbt.Path,sbt.Path)UnitgeneratedClass(sbt.PathsourcePath: sbt.PathPath, sbt.PathmodulePath: sbt.PathPath): UnitUnit
	/** Called after the source at the given location has been processed. */
	def (sbt.Path)UnitendSource(sbt.PathsourcePath: sbt.PathPath): UnitUnit
}
abstract class class BasicAnalysisCallback extends java.lang.Object with sbt.AnalysisCallback with ScalaObjectBasicAnalysisCallback(val sbt.PathbasePath: sbt.PathPath, val Iterable[String]superclassNames: Iterable[String]Iterable[String],
	protected val sbt.CompileAnalysisanalysis: sbt.CompileAnalysisCompileAnalysis) extends sbt.AnalysisCallbackAnalysisCallback
{
	def (String)UnitsuperclassNotFound(StringsuperclassName: StringString) Unit{}
	
	def (sbt.Path)UnitbeginSource(sbt.PathsourcePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(sbt.Path)UnitaddSource(sbt.PathsourcePath)
	}
	def (sbt.Path,sbt.Path)UnitsourceDependency(sbt.PathdependsOnPath: sbt.PathPath, sbt.PathsourcePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(sbt.Path,sbt.Path)UnitaddSourceDependency(sbt.PathdependsOnPath, sbt.PathsourcePath)
	}
	def (java.io.File,sbt.Path)UnitjarDependency(java.io.FilejarFile: java.io.FileFile, sbt.PathsourcePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(java.io.File,sbt.Path)UnitaddExternalDependency(java.io.FilejarFile, sbt.PathsourcePath)
	}
	def (java.io.File,sbt.Path)UnitclassDependency(java.io.FileclassFile: java.io.FileFile, sbt.PathsourcePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(java.io.File,sbt.Path)UnitaddExternalDependency(java.io.FileclassFile, sbt.PathsourcePath)
	}
	def (sbt.Path,sbt.Path)UnitgeneratedClass(sbt.PathsourcePath: sbt.PathPath, sbt.PathmodulePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(sbt.Path,sbt.Path)UnitaddProduct(sbt.PathsourcePath, sbt.PathmodulePath)
	}
	def (sbt.Path)UnitendSource(sbt.PathsourcePath: sbt.PathPath)
	{
		=> sbt.CompileAnalysisanalysis.(sbt.Path)UnitremoveSelfDependency(sbt.PathsourcePath)
	}
}