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

sealed trait trait Version extends java.lang.Object with NotNullVersion extends NotNullNotNull
case class class BasicVersion extends java.lang.Object with sbt.Version with ScalaObject with ProductBasicVersion(Intmajor: IntInt, Option[Int]minor: Option[Int]Option[Int], Option[Int]micro: Option[Int]Option[Int], Option[String]extra: Option[String]Option[String]) extends sbt.VersionVersion
{
	import Version._
	(Boolean,=> Any)Unitrequire(=> Intmajor (Int)Boolean>= Int(0)0, java.lang.String("Major revision must be nonnegative.")"Major revision must be nonnegative.")
	(Boolean,=> Any)Unitrequire(=> Option[Int]minor.=> BooleanisDefined (Boolean)Boolean|| => Option[Int]micro.=> BooleanisEmpty, java.lang.String("Cannot define micro revision without defining minor revision.")"Cannot define micro revision without defining minor revision.")
	(Option[Int])UnitrequirePositive(=> Option[Int]minor)
	(Option[Int])UnitrequirePositive(=> Option[Int]micro)
	(Boolean)Unitrequire((Option[String])BooleanisValidExtra(=> Option[String]extra))
	
	def => sbt.BasicVersionincrementMicro = (Int,Option[Int],Option[Int],Option[String])sbt.BasicVersionBasicVersion(=> Intmajor, => Option[Int]minor (=> Option[Int])Option[Int]orElse (Int)Some[Int]Some(Int(0)0), (Option[Int])Some[Int]increment(=> Option[Int]micro), => Option[String]extra)
	def => sbt.BasicVersionincrementMinor = (Int,Option[Int],Option[Int],Option[String])sbt.BasicVersionBasicVersion(=> Intmajor, (Option[Int])Some[Int]increment(=> Option[Int]minor), => Option[Int]micro, => Option[String]extra)
	def => sbt.BasicVersionincrementMajor = (Int,Option[Int],Option[Int],Option[String])sbt.BasicVersionBasicVersion(=> Intmajor(Int)Int+Int(1)1, => Option[Int]minor, => Option[Int]micro, => Option[String]extra)
	
	override def ()java.lang.StringtoString = => Intmajor (java.lang.String)java.lang.String+
		=> Option[Int]minor.((Int) => java.lang.String)Option[java.lang.String]map(IntminorI => java.lang.String(".")"." (Any)java.lang.String+ IntminorI (Any)java.lang.String+ => Option[Int]micro.((Int) => java.lang.String)Option[java.lang.String]map(IntmicroI => java.lang.String(".")"." (Any)java.lang.String+ IntmicroI).(=> java.lang.String)java.lang.StringgetOrElse(java.lang.String("")"")).(=> java.lang.String)java.lang.StringgetOrElse(java.lang.String("")"") (Any)java.lang.String+
			=> Option[String]extra.((String) => java.lang.String)Option[java.lang.String]map(Stringx => java.lang.String("-")"-" (Any)java.lang.String+ Stringx).(=> java.lang.String)java.lang.StringgetOrElse(java.lang.String("")"")
}
case class class OpaqueVersion extends java.lang.Object with sbt.Version with ScalaObject with ProductOpaqueVersion(Stringvalue: StringString) extends sbt.VersionVersion
{
	(Boolean)Unitrequire(=> Boolean!=> Stringvalue.implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringtrim.=> BooleanisEmpty)
	override def ()StringtoString = => Stringvalue
}
object object sbt.VersionVersion
{
	private[sbt] def (Option[Int])Some[Int]increment(Option[Int]i: Option[Int]Option[Int]) = (Int)Some[Int]Some(Option[Int]i.(=> Int)IntgetOrElse(Int(0)0) (Int)Int+ Int(1)1)
	private[sbt] def (Option[Int])UnitrequirePositive(Option[Int]i: Option[Int]Option[Int]) { Option[Int]i.((Int) => Unit)Unitforeach(Intx => (Boolean)Unitrequire(Intx (Int)Boolean>= Int(0)0)) }
	
	import java.util.regex.Pattern
	val java.util.regex.PatternversionPattern = object java.util.regex.PatternPattern.(java.lang.String)java.util.regex.Patterncompile(java.lang.String("(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:-(.+))?")"""(\d+)(?:\.(\d+)(?:\.(\d+))?)?(?:-(.+))?""")
	def (String)Either[String,sbt.Version]fromString(Stringv: StringString): Either[String,sbt.Version]Either[String, Version] =
	{
		val java.lang.Stringtrimmed = Stringv.()java.lang.Stringtrim
		Either[String,sbt.Version]if(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringtrimmed.=> BooleanisEmpty)
			(java.lang.String)Left[java.lang.String,Nothing]Left(java.lang.String("Version cannot be empty.")"Version cannot be empty.")
		else
		{
			val java.util.regex.Matchermatcher = => java.util.regex.PatternversionPattern.(java.lang.CharSequence)java.util.regex.Matchermatcher(java.lang.Stringtrimmed)
			import matcher._
			Either[String,sbt.Version]if(()Booleanmatches)
			{
				def (Int)Option[java.lang.String]toOption(Intindex: IntInt) =
				{
					val java.lang.Stringv = (Int)java.lang.Stringgroup(Intindex)
					Option[java.lang.String]if(java.lang.Stringv (AnyRef)Boolean== Null(null)null) object NoneNone else (java.lang.String)Some[java.lang.String]Some(java.lang.Stringv)
				}
				def (Int)Option[Int]toInt(Intindex: IntInt) = (Int)Option[java.lang.String]toOption(Intindex).((java.lang.String) => Int)Option[Int]map(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichString_.=> InttoInt)
				val Option[java.lang.String]extra = (Int)Option[java.lang.String]toOption(Int(4)4)
				Either[String,sbt.Version]if((Option[String])BooleanisValidExtra(Option[java.lang.String]extra))
					(sbt.BasicVersion)Right[Nothing,sbt.BasicVersion]Right((Int,Option[Int],Option[Int],Option[String])sbt.BasicVersionBasicVersion(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringgroup(Int(1)1).=> InttoInt, (Int)Option[Int]toInt(Int(2)2), (Int)Option[Int]toInt(Int(3)3), Option[java.lang.String]extra))
				else
					(sbt.OpaqueVersion)Right[Nothing,sbt.OpaqueVersion]Right((String)sbt.OpaqueVersionOpaqueVersion(java.lang.Stringtrimmed))
			}
			else
				(sbt.OpaqueVersion)Right[Nothing,sbt.OpaqueVersion]Right((String)sbt.OpaqueVersionOpaqueVersion(java.lang.Stringtrimmed))
		}
	}
	def (Option[String])BooleanisValidExtra(Option[String]e: Option[String]Option[String]): BooleanBoolean = Option[String]e.((String) => Boolean)Option[Boolean]map((String)BooleanisValidExtra).(=> Boolean)BooleangetOrElse(Boolean(true)true)
	def (String)BooleanisValidExtra(Strings: StringString): BooleanBoolean = => Boolean!(Strings.implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringtrim.=> BooleanisEmpty (Boolean)Boolean|| implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStrings.((Char) => Boolean)Booleanexists(java.lang.object java.lang.CharacterCharacter.(Char)BooleanisISOControl))
}