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

/** The project definition used to build project definitions. */
final class class BuilderProject extends java.lang.Object with sbt.ScalaProject with ScalaObjectBuilderProject(val sbt.ProjectInfoinfo: sbt.ProjectInfoProjectInfo, override protected val sbt.LoggerlogImpl: sbt.LoggerLogger) extends sbt.ScalaProjectScalaProject
{	
	import BasicProjectPaths._
	
	def => sbt.PathcompilePath = => sbt.PathoutputPath (String)sbt.Path/ => java.lang.StringDefaultMainCompileDirectoryName
	def => sbt.PathsourcePath = implicit sbt.Project.path : (String)sbt.Pathpath(=> java.lang.StringDefaultSourceDirectoryName)
	def => sbt.PathmainResourcesPath = implicit sbt.Project.path : (String)sbt.Pathpath(=> java.lang.StringDefaultResourcesDirectoryName)
	def => sbt.PathdependencyPath = implicit sbt.Project.path : (String)sbt.Pathpath(=> java.lang.StringDefaultDependencyDirectoryName)
	
	def => sbt.PathFinderlibraries = (sbt.PathFinder,sbt.FileFilter)sbt.PathFinderdescendents(=> sbt.PathdependencyPath, implicit sbt.Project.filter : (String)sbt.NameFilter"*.jar")
	
	def => List[BuilderProject.this.CompileOption]compileOptions = => BuilderProject.this.CompileOptionDeprecation (BuilderProject.this.CompileOption)List[BuilderProject.this.CompileOption]:: => BuilderProject.this.CompileOptionUnchecked (BuilderProject.this.CompileOption)List[BuilderProject.this.CompileOption]:: object NilNil
	override def => scala.collection.immutable.Map[String,Nothing]tasks = => collection.immutable.Map.typeMap.scala.collection.immutable.Map[String,Nothing]empty
	override def => scala.collection.immutable.Map[String,Nothing]methods = => collection.immutable.Map.typeMap.scala.collection.immutable.Map[String,Nothing]empty
	def => object Nildependencies = object NilNil
	
	def => sbt.PathFinderprojectClasspath = => sbt.PathcompilePath (sbt.PathFinder)sbt.PathFinder+++ => sbt.PathFinderlibraries (sbt.PathFinder)sbt.PathFinder+++
		object sbt.PathPath.(=> Iterable[sbt.Path])sbt.PathFinderlazyPathFinder { sbt.ProjectDirectorynew sbt.ProjectDirectoryProjectDirectory(object sbt.FileUtilitiesFileUtilities.=> java.io.FilesbtJar) (sbt.ProjectDirectory)List[sbt.ProjectDirectory]:: object NilNil }

	val sbt.CompileConditionalcompileConditional =
		template $anon extends sbt.CompileConditionalnew sbt.CompileConditionalCompileConditional(=> <refinement> extends sbt.CompileConfigurationcompileConfiguration)
		{
			override protected def (this.ConditionalAnalysis)Option[String]execute(this.ConditionalAnalysiscAnalysis: this.ConditionalAnalysisConditionalAnalysis): Option[String]Option[String] =
			{
				Option[String]if(this.ConditionalAnalysiscAnalysis.=> Iterable[sbt.Path]dirtySources.=> BooleanisEmpty)
					object NoneNone
				else
				{
					val sbt.Level.ValueoldLevel = => sbt.Loggerlog.=> sbt.Level.ValuegetLevel
					=> sbt.Loggerlog.(sbt.Level.Value)UnitsetLevel(object sbt.LevelLevel.=> sbt.Level.ValueInfo)
					=> sbt.Loggerlog.(=> String)Unitinfo(java.lang.String("Recompiling project definition...")"Recompiling project definition...")
					=> sbt.Loggerlog.(=> String)Unitinfo(java.lang.String("\011")"\t" (Any)java.lang.String+ this.ConditionalAnalysiscAnalysis.()java.lang.StringtoString)
					=> sbt.Loggerlog.(sbt.Level.Value)UnitsetLevel(sbt.Level.ValueoldLevel)
					super.(this.ConditionalAnalysis)Option[String]execute(this.ConditionalAnalysiscAnalysis)
				}
			}
			override def => sbt.AnalysisCallbackanalysisCallback: sbt.AnalysisCallbackAnalysisCallback =
				template $anon extends sbt.BasicAnalysisCallbacknew sbt.BasicAnalysisCallbackBasicAnalysisCallback(=> sbt.ProjectInfoinfo.=> sbt.ProjectDirectoryprojectPath, (java.lang.String*)List[java.lang.String]List(object sbt.ProjectProject.=> java.lang.StringProjectClassName), => this.AnalysisTypeanalysis)
				{
					def (sbt.Path,String,String,Boolean)UnitfoundSubclass(sbt.PathsourcePath: sbt.PathPath, StringsubclassName: StringString, StringsuperclassName: StringString, BooleanisModule: BooleanBoolean)
					{
						Unitif(StringsuperclassName (AnyRef)Boolean== object sbt.ProjectProject.=> java.lang.StringProjectClassName (Boolean)Boolean&& => Boolean!BooleanisModule)
						{
							=> sbt.Loggerlog.(=> String)Unitdebug(java.lang.String("Found project definition ")"Found project definition " (Any)java.lang.String+ StringsubclassName)
							=> sbt.CompileAnalysisanalysis.(sbt.Path,String)UnitaddProjectDefinition(sbt.PathsourcePath, StringsubclassName)
						}
					}
				}
		}
	
	lazy val BuilderProject.this.Taskcompile = (=> Option[String])BuilderProject.this.Tasktask { => sbt.CompileConditionalcompileConditional.=> Option[String]run }
	lazy val BuilderProject.this.Taskclean = (sbt.PathFinder,BuilderProject.this.CleanOption*)BuilderProject.this.TaskcleanTask(=> sbt.PathoutputPath, (sbt.TaskAnalysis[_, _, _])BuilderProject.this.ClearAnalysisClearAnalysis(=> sbt.CompileConditionalcompileConditional.=> BuilderProject.this.compileConditional.AnalysisTypeanalysis))
	
	def => <refinement> extends sbt.CompileConfigurationcompileConfiguration =
		template $anon extends sbt.CompileConfigurationnew sbt.CompileConfigurationCompileConfiguration
		{
			def => java.lang.Stringlabel = java.lang.String("builder")"builder"
			def => sbt.PathFindersources = => sbt.PathsourcePath.(sbt.FileFilter,sbt.FileFilter)sbt.PathFinderdescendentsExcept(implicit sbt.Project.filter : (String)sbt.NameFilter"*.scala", => sbt.FileFilterdefaultExcludes)
			def => sbt.PathoutputDirectory = => sbt.PathcompilePath
			def => sbt.PathFinderclasspath = => sbt.PathFinderprojectClasspath
			def => sbt.PathanalysisPath = => sbt.PathoutputPath (String)sbt.Path/ => java.lang.StringDefaultMainAnalysisDirectoryName
			def => sbt.ProjectDirectoryprojectPath = => sbt.ProjectInfoinfo.=> sbt.ProjectDirectoryprojectPath
			def => object NiltestDefinitionClassNames = object NilNil
			def => sbt.Loggerlog = BuilderProject.this.typeBuilderProject.this.=> sbt.Loggerlog
			def => List[String]options = => List[BuilderProject.this.CompileOption]compileOptions.((BuilderProject.this.CompileOption) => String)List[String]map(BuilderProject.this.CompileOption_.=> StringasString)
		}
		
	def => Either[String,Option[String]]projectDefinition: Either[String,Option[String]]Either[String, Option[String]] =
	{
		=> sbt.CompileConditionalcompileConditional.=> BuilderProject.this.compileConditional.AnalysisTypeanalysis.=> Iterable[String]allProjects.=> List[String]toList Either[String,Option[String]]match
		{
			Right[Nothing,object None]case object NilNil => 
				=> sbt.Loggerlog.(=> String)Unitdebug(java.lang.String("No project definitions detected using default project.")"No project definitions detected using default project.")
				(object None)Right[Nothing,object None]Right(object NoneNone)
			Right[Nothing,Some[String]]case StringsingleDefinition :: object NilNil => (Some[String])Right[Nothing,Some[String]]Right((String)Some[String]Some(StringsingleDefinition))
			Left[String,Nothing]case List[String]multipleDefinitions =>(String)Left[String,Nothing]Left(List[String]multipleDefinitions.(String,String,String)StringmkString(java.lang.String("Multiple project definitions detected: \012\011")"Multiple project definitions detected: \n\t",java.lang.String("\012\011")"\n\t",java.lang.String("\012")"\n"))
		}
	}
}