#For SourceCodeException factory.
#Format of this file is:
#Lines beginning with a # are comments.
#Otherwise:
#Extra arguments can be reference by $something$ in the style messages.
#Please don't break the syntax of this file, the perl script that parses it is very simple. :)
#ErrorName <- must be a legal java identifier & unique!
#<somewhitespace>JavacStyleErrorMessage
#<somewhitespace>HumanStyleErrorMessage
#<somewhitespace>[YES|NO] for whether link errors are expected (i.e. there are other places in the source code that this can refer to).
#optional (Type,name) pairs

# Conflicts of class and something:

ClassConflictBasicType
	<identifier> expected
	You have tried to define a Class Type with a name which is reserved for Kenya's Basic Type $type$
	NO
	(KType,type)
	
DuplicateClassName
	duplicate class: $type$
	You have tried to define a Class Type with a name that is already defined as a Class Type
	YES
	(KType,type)
	
DuplicateClassEnumName
	duplicate class: $type$
	You have tried to define a Class Type with a name that is already defined as an Enum Type
	YES
	(KType,type)

EnumConflictBasicType
	<identifier> expected
	You have tried to define an Enum Type with a name which is reserved for Kenya's Basic Type $type$
	NO
	(KType,type)

DuplicateEnumName
	duplicate class: $type$
	You have tried to define an Enum Type with a name that is already defined as an Enum Type
	YES
	(KType,type)

DuplicateEnumClassName
	duplicate class: $type$
	You have tried to define an Enum Type with a name that is already defined as a Class Type
	YES
	(KType,type)
	
VoidConstant
	'(' expected.
	You have tried to create a constant of type 'void'
	NO

VoidParamType
	illegal start of type
	You have tried to create a class using 'void' as one of its parameter types
	NO

DuplicateVariable
	$name$ is already defined in $scope$
	You have tried to create a variable with the the name ( $name$ ), but there is already a variable in this scope ( $scope$ ) with that name
	YES
	(String,name) (String,scope)

DuplicateEnumChild
	$name$ is already defined in $scope$
	You have tried to create an enum constant with the same name as another enum constant in this enum declaration
	NO
	(String,name) (String,scope)

DuplicateFunction
	$name$ is already defined in $scope$
	You have tried to declare a function which cannot be told apart from an existing function
	YES
	(String,name) (String,scope)
	
DuplicateFunction_Builtin
	$name$ is already defined in <**Kenya Builtin Methods**>
	You have tried to declare a function which cannot be told apart from a Kenya built-in function
	NO
	(String,name)

ClassConstantError
	<none>
	You have tried to declare a constant of Class Type, but Kenya only supports constants of Basic Type (boolean, char, int, double, String)
	NO

IncompatibleTypes_ArrayIndex
	incompatible types\nfound: $rhs$\nrequired: int
	You are trying to use a $rhs$ type as an index into an array, however you can only index into an array with an expression of type int
	NO
	(KType,rhs)
	
IncompatibleTypes_Assignment
	incompatible types\nfound: $rhs$\nrequired: $lhs$
	You are attempting an assignment operation, but have tried to assign an expression of type $rhs$ to an expression of type $lhs$. These two types are not 'assignment compatible'
	NO
	(KType,lhs) (KType,rhs)

IncompatibleTypes_IfBoolean
	incompatible types\nfound: $type$\nrequired: boolean
	You are attempting to use a $type$ as the test in an if statement, however if statements can only test boolean expressions
	NO
	(KType,type)

IncompatibleTypes_WhileBoolean
	incompatible types\nfound: $type$\nrequired: boolean
	You are attempting to use a $type$ as the test in a while loop, however while loops can only test boolean expressions
	NO
	(KType,type)

IncompatibleTypes_ForBoolean
	incompatible types\nfound: $type$\nrequired: boolean
	You are attempting to use a $type$ as the test in a for loop, however for loops can only test boolean expressions
	NO
	(KType,type)

IncompatibleTypes_AssertBoolean
	incompatible types\nfound: $type$\nrequired: boolean
	You are attempting to use a $type$ as the test in an assert statement, however assertions can only test boolean expressions
	NO
	(KType,type)

IncompatibleTypes_SwitchTopLevel
	incompatible types\nfound: $type$\nrequired: int
	You are attempting to switch on a $type$, however in Kenya you can only switch on char, int, or enum type expressions
	NO
	(KType,type)
	
IncompatibleTypes_SwitchCaseLevel
	incompatible types\nfound: $type$\nrequired: int
	You have a switch case of type $type$ when the main switch itself is of type $swType$, these are not compatible
	NO
	(KType,type) (KType,swType)

IncompatibleTypes_Return
	incompatible types\nfound: $returnValue$\nrequired: $signatureValue$
	You are attempting to return a type of $returnValue$ in a function that you have declared to be of type $signatureValue$, these are not compatible
	NO
	(KType,signatureValue) (KType,returnValue)

Return_MissingReturnValue
	missing return value
	You are attempting to return from a function of type $type$, but are not returning something of that type
	NO
	(KType,type)

Return_ValueInVoid
	cannot return a value from a method whose return type is void
	You are attempting to return a value (of type $type$) from a method that you have declared to be void (i.e. does not return anything)
	NO
	(KType,type)

Switch_EnumCaseExpected
	an enum switch case label must be the unqualified name of an enumeration constant
	You are switching on the enum type $swType$, therefore all the case statements of this switch must be just the names of members of this enum
	NO
 	(KType,swType)

Switch_DuplicateDefault
	duplicate default label
	You have created a switch statement with multiple default labels, however a switch statement can only have one default label
	NO

FunctionApplication_NoDots
	<none>
	Since Kenya does not support functions inside classes, there will never be a case where you will need a '.' to find them
	NO

FunctionApplication_Void
	'void' type not allowed here
	You are attempting to call a function, but you are passing a void type in as one of the parameters
	NO

VariableDeclaration_Void
	illegal start of expression
	You are attempting to create a variable of type 'void' ( what are you planning to do with it? :) )
	NO

ArrayDeclaration_TooManyBraces
	illegal initialiser for $type$
	You have braces in an array declaration going to too high a depth
	NO
	(KType,type)
	
Binop_InvalidApplication
	operator $name$ cannot be applied to $lhs$,$rhs$
	You have tried to use the operator $name$ in the form '$lhs$ $name$ $rhs$', which it cannot be used for
	NO
	(String,name) (KType,lhs) (KType,rhs)
	
Unop_InvalidApplication
	operator $name$ cannot be applied to $type$
	You have tried to use the unary operator $name$ on a $type$, this cannot be done
	NO
	(String,name) (KType,type)
	
Incomparable
	incomparable types: $lhs$ and $rhs$
	You have tried to compare a $lhs$ with a $rhs$, this cannot be done
	NO
	(KType,lhs) (KType,rhs) (String,name)
	
Array_TooManyAccesses
	array required, but $type$ found
	You have indexed into an array too many times
	NO
	(KType,type)

Lost_Variable
	cannot find symbol\nsymbol: $name$  \nlocation: $scope$
	You are trying to reference a variable that isn't valid ( not declared / wrong scope / bad initialiser? )
	NO
	(String,name) (String,scope)
	
Lost_Class
	cannot find symbol\nsymbol: $name$  \nlocation: $scope$
	You are trying to reference a Class Type that hasn't been declared
	NO
	(String,name) (String,scope)

Lost_Function
	cannot find symbol\nsymbol: method $name$$args$ \nlocation: $scope$
	You are trying to call a function that you have not declared, or is not a built in function
	NO
	(String,name) (String,scope) (String,args)

Lost_Function_Possible
	cannot find symbol\nsymbol: method $name$$args$ \nlocation: $scope$
	You are trying to call a function that you have not declared, though it is possible you have the wrong types of parameters to this function call
	YES
	(String,name) (String,scope) (String,args)

BasicType_Dereference
	$type$ cannot be dereferenced.
	You are attempting to apply a '.' to a $type$, this cannot be done as Basic Types have no members
	NO
	(KType,type)

Array_Dereference
	cannot find symbol\nsymbol: variable $name$ \nlocation: $scope$
	You can only use a '.' on an array to access its length (with .length). You cannot use '.' on an array for any other purpose in Kenya
	NO
	(String,name) (String,scope)

TypeParam_Dereference
	cannot find symbol\nsymbol: variable $name$ \nlocation: class java.lang.Object
	You have tried to dereference a parameterised typed, but you cannot know (in Kenya) what their members could be
	NO
	(String,name)
	
TypeParam_WithTypeParam
	'>' expected
	A Type Parameter cannot have Type Parameters
	NO
	
TypeParam_MisMatch
	<possible> wrong number of type arguments; required $num$
	This is not a valid reference to class $klass$ as there is a mismatch with its Type Parameters
	NO
	(int,num) (KClassType,klass)
	
TypeParam_OnEnum
	'{' expected
	An enum declaration cannot have Type Parameters
	NO

TypeParam_WithArrayBrackets
	'>' expected
	A Type Parameter cannot have array index brackets attached to it
	NO

TypeParam_Duplicate
	$name$ is already defined in $scope$
	You have duplicate Type Parameters with the name $name$
	NO
	(String,name) (String,scope)

TypeParam_BasicType
	< identifier > expected
	You cannot use the name of a Basic Type as a Type Parameter
	NO

VoidArrayType
	'void' type not allowed here
	You are trying to make a void array, what are you going to store in it? :)
	NO
	
Ambiguous_Function
	reference to $name$ is ambiguous, both method $name$$argType1$ in $global$ and method $name$$argType2$ in $global$ match
	You are calling a function, however there are several that match and Kenya isn't sure which one you mean
	YES
	(String,name) (String,argType1) (String,argType2) (String,global)
	
Generic_Array_Creation
	generic array creation
	You cannot create arrays which are of a Parameterized Type
	NO
	
# Am now beginning the "value / variable errors" as opposed to type errors

AssignToValue
	unexpected type\nrequired: variable \nfound: value
	You have tried to assign a value ( $val$ ) to something new
	NO
	(String,val)

AssignToConstant
	cannot assign a value to final variable $name$
	You have tried to assign a constant variable a new value ( think about it... )
	YES
	(KVariable,name)

UnopValuePP
	unexpected type\nrequired: variable \nfound: value
	You cannot apply ++ to a non-variable.
	NO

UnopValueMM
	unexpected type\nrequired: variable \nfound: value
	You cannot apply -- to a non-variable.
	NO
	
UninitialisedVariable
	variable $name$ might not have been initialised
	You are trying to use a variable that it is possible you have not given a value to yet
	YES
	(String,name)
	
Unreachable
	unreachable statement
	This statement cannot be executed or reached
	YES
	
SwitchNeedsConstant
	constant expression required
	The cases for a switch statement all have to be constants at compile time, this expression is not constant
	NO
	
IllegalBreakPlace
	break outside switch or loop
	You can only place break statements inside switch statements and while or for loops
	NO

MissingReturnStatement
	missing return statement
	This function needs to return a variable of type $type$, but not all paths through the function return a variable of that type
	YES
	(KType,type)

BadInt
	integer number too large: $num$
	This is not a valid number for an int. ( ints can be between -2147483648 and 2147483647 )
	NO
	(String,num)
	
BadDouble
	floating point number too large: $num$
	This is not a valid number for a double. ( doubles can be between roughly +/- 1.7976931348623157E308 )
	NO
	(String,num)

InvalidEnumAssig
	cannot assign a value to final variable $name$
	You cannot assign to an enum constant
	NO
	(String,name)
	
InvalidArrayLengthAssig
	cannot assign a value to final variable length
	You cannot assign to the length of an array.
	NO
	
SwitchDuplicateLabel
	duplicate case label
	You have defined a switch case that is the same as another switch case
	YES
	
PossibleLossOfPrecisionCharInt
	possible loss of precision\nrequired: char \nfound: int
	You are assigning a char variable with something that *could* be of int type
	NO

TypeParamNoBindingFunction
	<none applicable>
	You are defining a function where its return type is never specified by the parameters to this function
	NO

VoidInAssert
	'void' type not allowed here
	An assert message cannot be of void type
	NO
