<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
     "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
	<module name="SuppressionFilter">
		<property name="file" value="${config_loc}/suppressions.xml"/>
	</module>
	<module name="SuppressWithPlainTextCommentFilter">
		<property name="offCommentFormat" value="CHECKSTYLE\:OFF\:(\w+)"/>
		<property name="onCommentFormat" value="CHECKSTYLE\:ON\:(\w+)"/>
		<property name="checkFormat" value="$1"/>
	</module>
	<module name="Header">
		<property name="headerFile" value="${config_loc}/${checkstyleLicenseHeader}.txt"/>
		<property name="ignoreLines" value="3"/>
		<property name="fileExtensions" value="java"/>
	</module>
	<module name="NewlineAtEndOfFile">
		<property name="lineSeparator" value="lf"/>
	</module>
	<module name="RegexpSingleline">
		<property name="format" value="MXParser"/>
		<property name="message" value="Must not use MXParser, use XmlPullParserFactory instead"/>
	</module>
	<module name="RegexpSingleline">
	  <!--
		  Matches StringBuilder.append(String) calls where the
		  argument is a String of length one. Those should be replaced
		  with append(char) for performance reasons.

		  TODO: This could be more advanced in order to match also
		  - .append("\u1234")
	  -->
		<property name="format" value="\.append\(&quot;(.|\\.)&quot;\)"/>
		<property name="message" value="Don&apos;t use StringBuilder.append(String) when you can use StringBuilder.append(char). Solution: Replace double quotes of append&apos;s argument with single quotes."/>
	</module>
	<module name="FileTabCharacter"/>
	<module name="RegexpSingleline">
		<!--
			Explaining the following Regex

			           \s+   $
			            |    +- End of Line (2)
			            +- At least one whitespace (1)

			Rationale:
			Matches trailing whitespace (2) in lines containing at least one (1) non-whitespace character
		-->
		<property name="format" value="\s+$"/>
		<property name="message" value="Line containing trailing whitespace character(s)"/>
	</module>
	<!-- <module name="RegexpSingleline"> -->
	<!--   <property name="format" value="fqdn"/> -->
	<!-- </module> -->
	<module name="RegexpSingleline">
		<property name="format" value="^\s*//[^\s]"/>
		<property name="message" value="Comment start ('//') followed by non-space character. You would not continue after a punctuation without a space, would you?"/>
	</module>
	<!-- Check for synchronized keyword on Manager's static
	     getInstanceFor() method. Note that if XMPPConnection is every
	     replaced with something else, then we need to change it here
	     too. -->
	<module name="RegexpSingleline">
		<property name="format" value="^\s*public(?!.*synchronized).*getInstanceFor\(XMPPConnection.*$"/>
		<property name="message" value="getInstanceFor() should be synchronized"/>
	</module>
	<module name="JavadocPackage"/>
	<module name="TreeWalker">
		<module name="SuppressionCommentFilter"/>
		<module name="FinalClass"/>
		<module name="UnusedImports">
			<property name="processJavadoc" value="true"/>
		</module>
		<module name="AvoidStarImport"/>
		<module name="IllegalImport"/>
		<module name="RedundantImport"/>
		<module name="RedundantModifier"/>
		<module name="ModifierOrder"/>
		<module name="UpperEll"/>
		<module name="ArrayTypeStyle"/>
		<module name="GenericWhitespace"/>
		<module name="EmptyStatement"/>
		<module name="PackageDeclaration"/>
		<module name="LeftCurly"/>
		<module name="RegexpSinglelineJava">
			<property name="format" value="printStackTrace"/>
			<property name="message" value="Usage of printStackTrace"/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="format" value="println"/>
			<property name="message" value="Usage of println"/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="format" value="Boolean\.valueOf\("/>
			<property name="message" value="Usage Boolean.valueOf(), consider using ParserUtils.parseXmlBoolean() instead (if you want to parse xs:boolean values)"/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="format" value="^\t+"/>
			<property name="message" value="Indent must not use tab characters. Use space instead."/>
		</module>
		<module name="JavadocMethod">
			<!-- TODO stricten those checks -->
			<property name="scope" value="public"/>
			<property name="allowUndeclaredRTE" value="true"/>
			<property name="allowMissingParamTags" value="true"/>
			<property name="allowMissingThrowsTags" value="true"/>
			<property name="allowMissingReturnTag" value="true"/>
			<property name="allowMissingJavadoc" value="true"/>
			<property name="suppressLoadErrors" value="true"/>
		</module>
		<module name="JavadocStyle">
			<property name="scope" value="public"/>
			<property name="checkEmptyJavadoc" value="true"/>
			<property name="checkHtml" value="false"/>
		</module>
		<module name="ParenPad">
		</module>
		<module name="NoWhitespaceAfter">
		  <property name="tokens" value="INC
										 , DEC
										 , UNARY_MINUS
										 , UNARY_PLUS
										 , BNOT, LNOT
										 , DOT
										 , ARRAY_DECLARATOR
										 , INDEX_OP
										 "/>
		</module>
		<module name="WhitespaceAfter">
		  <property name="tokens" value="TYPECAST
										 , LITERAL_IF
										 , LITERAL_ELSE
										 , LITERAL_WHILE
										 , LITERAL_DO
										 , LITERAL_FOR
										 , DO_WHILE
										 , COMMA
										 "/>
		</module>
		<module name="WhitespaceAround">
		  <property
			  name="ignoreEnhancedForColon"
			  value="false"
			  />
		  <!-- Currently disabled tokens: LCURLY, RCURLY, WILDCARD_TYPE, GENERIC_START, GENERIC_END -->
		  <property
			  name="tokens"
			  value="ASSIGN
					 , ARRAY_INIT
					 , BAND
					 , BAND_ASSIGN
					 , BOR
					 , BOR_ASSIGN
					 , BSR
					 , BSR_ASSIGN
					 , BXOR
					 , BXOR_ASSIGN
					 , COLON
					 , DIV
					 , DIV_ASSIGN
					 , DO_WHILE
					 , EQUAL
					 , GE
					 , GT
					 , LAMBDA
					 , LAND
					 , LE
					 , LITERAL_CATCH
					 , LITERAL_DO
					 , LITERAL_ELSE
					 , LITERAL_FINALLY
					 , LITERAL_FOR
					 , LITERAL_IF
					 , LITERAL_RETURN
					 , LITERAL_SWITCH
					 , LITERAL_SYNCHRONIZED
					 , LITERAL_TRY
					 , LITERAL_WHILE
					 , LOR
					 , LT
					 , MINUS
					 , MINUS_ASSIGN
					 , MOD
					 , MOD_ASSIGN
					 , NOT_EQUAL
					 , PLUS
					 , PLUS_ASSIGN
					 , QUESTION
					 , SL
					 , SLIST
					 , SL_ASSIGN
					 , SR
					 , SR_ASSIGN
					 , STAR
					 , STAR_ASSIGN
					 , LITERAL_ASSERT
					 , TYPE_EXTENSION_AND
					 "/>
		</module>
		<module name="CustomImportOrder">
			<property name="customImportOrderRules"
					  value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
			<property name="specialImportsRegExp" value="^org\.jivesoftware\.smack"/>
			<property name="sortImportsInGroupAlphabetically" value="true"/>
			<property name="separateLineBetweenGroups" value="true"/>
		</module>
		<module name="MissingJavadocPackage"/>
		<module name="UnnecessaryParentheses"/>
		<module name="UnnecessarySemicolonInEnumeration"/>
		<module name="UnnecessarySemicolonInTryWithResources"/>
	</module>
</module>
