/* sxr -- Scala X-Ray
 * Copyright 2009 Mark Harrah
 */

package sxr

import scala.tools.nsc.{plugins, Global, Phase}
import plugins.PluginComponent
import scala.collection.jcl.{TreeMap, TreeSet}
import java.io.File

object object sxr.BrowsePluginBrowsePlugin
{
	val java.lang.StringPluginName = java.lang.String("sxr")"sxr"
	/** This is the name of the option that specifies the base directory against which sources
	* should be relativized.*/
	val java.lang.StringBaseDirectoryOptionName = java.lang.String("base-directory:")"base-directory:"
}
/* The standard plugin setup.  The main implementation is in Browse.  The entry point is Browse.generateOutput */
class class BrowsePlugin extends sxr.Browse with ScalaObjectBrowsePlugin(val scala.tools.nsc.Globalglobal: scala.tools.nsc.GlobalGlobal) extends sxr.BrowseBrowse
{
	import global._
	import BrowsePlugin._
	
	val java.lang.Stringname = => java.lang.StringPluginName
	val java.lang.Stringdescription = java.lang.String("A plugin to produce a browsable representation of the input sources.")"A plugin to produce a browsable representation of the input sources."
	val List[scala.tools.nsc.plugins.PluginComponent]components = (scala.tools.nsc.plugins.PluginComponent*)List[scala.tools.nsc.plugins.PluginComponent]List[scala.tools.nsc.plugins.PluginComponentPluginComponent](object BrowsePlugin.this.ComponentComponent)
	
	/** The directory to which the annotated sources will be written. */
	val java.io.FileoutputDirectory = ((java.lang.String,java.lang.String)java.io.Filenew java.io.FileFile(=> scala.tools.nsc.Settingssettings.=> scala.tools.nsc.Settings.StringSettingoutdir.=> scala.tools.nsc.Settings.StringSetting#Tvalue, java.lang.String("../browse")"../browse")).()java.io.FilegetAbsoluteFile
	=> java.io.FileoutputDirectory.()Booleanmkdirs()

	/** The directory against which the input source paths will be relativized.*/
	var Option[java.io.File]baseDirectory: Option[java.io.File]Option[File] = object NoneNone

	override def (List[String],(String) => Unit)UnitprocessOptions(List[String]options: List[String]List[String], (String) => Uniterror: String => Unit)
	{
		for(((String) => Unit)Unitoption <- List[String]options)
		{
			Unitif(Stringoption.(java.lang.String)BooleanstartsWith(=> java.lang.StringBaseDirectoryOptionName))
				(Option[java.io.File])UnitbaseDirectory = (java.io.File)Some[java.io.File]Some(java.io.Filenew java.io.FileFile(Stringoption.(Int)java.lang.Stringsubstring(=> java.lang.StringBaseDirectoryOptionName.()Intlength)))
			else
				(String)Uniterror(java.lang.String("Option for source browser plugin not understood: ")"Option for source browser plugin not understood: " (Any)java.lang.String+ Stringoption)
		}
	}
	override val Option[String]optionsHelp: Option[String]Option[String] =
	{
		val java.lang.Stringprefix = java.lang.String("  -P:")"  -P:" (Any)java.lang.String+ => java.lang.Stringname (Any)java.lang.String+ java.lang.String(":")":"
		(java.lang.String)Some[java.lang.String]Some(java.lang.Stringprefix (Any)java.lang.String+ => java.lang.StringBaseDirectoryOptionName (Any)java.lang.String+ java.lang.String("<name>            Set the base source directory .\012")"<name>            Set the base source directory .\n")
	}

	/* For source compatibility between 2.7.x and 2.8.x */
	private object object BrowsePlugin.this.runsBeforerunsBefore { def (String)String:: (Strings: StringString) = Strings }
	private abstract class class CompatiblePluginComponent extends scala.tools.nsc.plugins.PluginComponent with ScalaObjectCompatiblePluginComponent(StringafterPhase: StringString) extends scala.tools.nsc.plugins.PluginComponentPluginComponent
	{
		val List[String]runsAfter = StringafterPhase (String)List[String]:: => List[String]runsBefore
	}
	private object object BrowsePlugin.this.ComponentComponent extends BrowsePlugin.this.CompatiblePluginComponentCompatiblePluginComponent(java.lang.String("typer")"typer")
	{
		val scala.tools.nsc.Globalglobal = BrowsePlugin.this.typeBrowsePlugin.this.=> scala.tools.nsc.Globalglobal
		val java.lang.StringphaseName = BrowsePlugin.this.typeBrowsePlugin.this.=> java.lang.Stringname
		def (scala.tools.nsc.Phase)BrowsePlugin.this.BrowsePhasenewPhase(scala.tools.nsc.Phaseprev: scala.tools.nsc.PhasePhase) = BrowsePlugin.this.BrowsePhasenew BrowsePlugin.this.BrowsePhaseBrowsePhase(scala.tools.nsc.Phaseprev)
	}

	private class class BrowsePhase extends scala.tools.nsc.Phase with ScalaObjectBrowsePhase(scala.tools.nsc.Phaseprev: scala.tools.nsc.PhasePhase) extends scala.tools.nsc.PhasePhase(scala.tools.nsc.Phaseprev)
	{
		def => java.lang.Stringname = BrowsePlugin.this.typeBrowsePlugin.this.=> java.lang.Stringname
		def => Unitrun = ()UnitgenerateOutput()
	}
}