2 <!DOCTYPE module PUBLIC
3 "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4 "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
5 <module name="Checker">
6 <property name="charset" value="UTF-8"/>
7 <property name="severity" value="${checkstyle.violationSeverity}" default="warning"/>
9 <!-- Checks for whitespace -->
10 <!-- See http://checkstyle.sf.net/config_whitespace.html -->
11 <module name="FileTabCharacter">
12 <property name="eachLine" value="true"/>
14 <module name="RegexpSingleline">
15 <property name="format" value="\s+$"/>
16 <property name="message" value="Line has trailing spaces."/>
18 <module name="RegexpMultiline">
19 <property name="format" value="(?s:\r\n.*)"/>
20 <property name="message" value="File has Windows (CR+LF) instead of UNIX (LF) end of line (EOL) delimiters."/>
22 <module name="SuppressionFilter">
23 <property name="file" value="${checkstyle.suppressions.file}" />
25 <module name="SuppressWarningsFilter"/>
26 <module name="LineLength">
27 <property name="max" value="120"/><!-- ODL projects use 120 max line length -->
28 <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
29 <property name="fileExtensions" value="java"/>
31 <module name="TreeWalker">
32 <module name="RegexpSinglelineJava">
33 <property name="format" value="System\.(out)|(err)\.print(ln)?\("/>
34 <property name="message" value="Line contains console output."/>
35 <property name="ignoreComments" value="false" />
37 <module name="RegexpSinglelineJava">
38 <property name="format" value="\.printStackTrace?\("/>
39 <property name="message" value="Line contains printStacktrace()."/>
40 <property name="ignoreComments" value="false" />
42 <module name="SuppressWarningsHolder" />
43 <module name="OuterTypeFilename"/>
44 <module name="IllegalTokenText">
45 <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
46 <property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
47 <property name="message" value="Avoid using corresponding octal or Unicode escape."/>
49 <module name="AvoidEscapedUnicodeCharacters">
50 <property name="allowEscapesForControlCharacters" value="true"/>
51 <property name="allowByTailComment" value="true"/>
52 <property name="allowNonPrintableEscapes" value="true"/>
54 <module name="OneTopLevelClass"/>
55 <module name="NoLineWrap"/>
56 <module name="EmptyBlock">
57 <property name="option" value="TEXT"/>
58 <property name="tokens" value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
60 <module name="NeedBraces"/>
61 <module name="LeftCurly" />
62 <module name="RightCurly">
63 <property name="option" value="alone"/>
64 <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, STATIC_INIT, INSTANCE_INIT"/>
66 <module name="WhitespaceAround">
67 <property name="allowEmptyConstructors" value="true"/>
68 <property name="allowEmptyMethods" value="true"/>
69 <property name="allowEmptyTypes" value="true"/>
70 <property name="allowEmptyLoops" value="true"/>
71 <message key="ws.notFollowed"
72 value="WhitespaceAround: ''{0}'' is not followed by whitespace."/>
73 <message key="ws.notPreceded"
74 value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
76 <module name="ParenPad" />
77 <module name="OneStatementPerLine"/>
78 <module name="MultipleVariableDeclarations"/>
79 <module name="ArrayTypeStyle"/>
80 <module name="MissingSwitchDefault"/>
81 <module name="FallThrough"/>
82 <module name="UpperEll"/>
83 <module name="ModifierOrder"/>
84 <module name="RedundantModifier"/>
85 <module name="EmptyLineSeparator">
86 <property name="allowNoEmptyLineBetweenFields" value="true"/>
87 <!-- No PACKAGE_DEF token, as we like our license header to be glue to "package" statement, to save 1 line screen space -->
88 <property name="tokens" value="IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
90 <module name="SeparatorWrap">
91 <property name="tokens" value="DOT"/>
92 <property name="option" value="nl"/>
94 <module name="SeparatorWrap">
95 <property name="tokens" value="COMMA"/>
96 <property name="option" value="EOL"/>
98 <module name="PackageName">
99 <property name="format" value="^[a-z]+(\.[a-z][a-z0-9_]*)*$"/>
100 <message key="name.invalidPattern"
101 value="Package name ''{0}'' must match pattern ''{1}''."/>
103 <module name="TypeName">
104 <message key="name.invalidPattern"
105 value="Type name ''{0}'' must match pattern ''{1}''."/>
107 <module name="MemberName">
108 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
109 <message key="name.invalidPattern"
110 value="Member name ''{0}'' must match pattern ''{1}''."/>
112 <module name="ParameterName">
113 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
114 <message key="name.invalidPattern"
115 value="Parameter name ''{0}'' must match pattern ''{1}''."/>
117 <module name="LocalVariableName">
118 <property name="tokens" value="VARIABLE_DEF"/>
119 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
120 <property name="allowOneCharVarInForLoop" value="true"/>
121 <message key="name.invalidPattern"
122 value="Local variable name ''{0}'' must match pattern ''{1}''."/>
124 <module name="ClassTypeParameterName">
125 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
126 <message key="name.invalidPattern"
127 value="Class type name ''{0}'' must match pattern ''{1}''."/>
129 <module name="MethodName">
130 <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
131 <message key="name.invalidPattern"
132 value="Method name ''{0}'' must match pattern ''{1}''."/>
134 <module name="MethodTypeParameterName">
135 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
136 <message key="name.invalidPattern"
137 value="Method type name ''{0}'' must match pattern ''{1}''."/>
139 <module name="ConstantName" />
140 <module name="NoFinalizer"/>
141 <module name="GenericWhitespace">
142 <message key="ws.followed"
143 value="GenericWhitespace ''{0}'' is followed by whitespace."/>
144 <message key="ws.preceded"
145 value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
146 <message key="ws.illegalFollow"
147 value="GenericWhitespace ''{0}'' should followed by whitespace."/>
148 <message key="ws.notPreceded"
149 value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
151 <module name="Indentation">
152 <property name="basicOffset" value="4"/>
153 <property name="braceAdjustment" value="0"/>
154 <property name="caseIndent" value="4"/>
155 <property name="throwsIndent" value="4"/>
156 <property name="lineWrappingIndentation" value="4"/>
157 <property name="arrayInitIndent" value="4"/>
158 <!-- yangtools' checkstyle-logging had:
159 <property name="caseIndent" value="0"/>
160 <property name="throwsIndent" value="8"/>
163 <module name="AbbreviationAsWordInName">
164 <property name="ignoreFinal" value="false"/>
165 <property name="allowedAbbreviationLength" value="4"/>
167 <module name="OverloadMethodsDeclarationOrder"/>
168 <module name="VariableDeclarationUsageDistance"/>
169 <module name="AvoidStarImport"/>
170 <module name="UnusedImports"/>
171 <module name="CustomImportOrder">
172 <property name="thirdPartyPackageRegExp" value=".*"/>
173 <property name="sortImportsInGroupAlphabetically" value="true"/>
174 <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
176 <module name="RedundantImport"/>
177 <module name="MethodParamPad"/>
178 <module name="OperatorWrap">
179 <property name="option" value="NL"/>
180 <property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/>
182 <module name="AnnotationLocation">
183 <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
185 <module name="AnnotationLocation">
186 <property name="tokens" value="VARIABLE_DEF"/>
187 <property name="allowSamelineMultipleAnnotations" value="true"/>
189 <module name="NonEmptyAtclauseDescription"/>
190 <module name="JavadocTagContinuationIndentation"/>
191 <module name="SummaryJavadocCheck">
192 <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
194 <!-- JavaDoc: Do NOT enforce JavaDoc presence, BUT if there is any, it must be uniform and well formed.
195 This is OpenDaylight's pragmatic compromise:
196 * Javadoc on every public method would take a long time to happen.
197 * We want to encourage informative javadocs, but "stub" javadocs are arguably worse than no javadocs.
198 * Javadocs on public methods of interfaces should be mandatory, but Checkstyle does not distinguish those
199 (yet; see https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/70).
201 <module name="JavadocParagraph">
202 <property name="allowNewlineParagraph" value="false"/>
204 <module name="AtclauseOrder">
205 <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
206 <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
208 <!-- Uncommenting this would JavaDoc mandatory
209 on all public methods, constructors and annotations, but not on all simple getters and setters (optional);
210 and on all public annotation types (refine "token" to make it on all public classes).
212 <module name="JavadocType">
213 <property name="scope" value="public"/>
214 <property name="tokens" value="ANNOTATION_DEF"/>
216 <module name="JavadocMethod">
217 <property name="scope" value="public"/>
218 <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
219 <property name="allowMissingPropertyJavadoc" value="true" />
220 <property name="allowMissingParamTags" value="true"/>
221 <property name="allowMissingThrowsTags" value="true"/>
222 <property name="allowMissingReturnTag" value="true"/>
223 <property name="minLineCount" value="2"/>
224 <property name="allowedAnnotations" value="Override, Test"/>
225 <property name="allowThrowsTagsForSubclasses" value="true"/>
228 <module name="JavadocStyle">
229 <!-- Do NOT 'scope' this one; any JavaDoc (public/protected/private) IFF present, should be style checked. -->
230 <property name="checkEmptyJavadoc" value="true" />
231 <!-- All except PACKAGE_DEF, due to a Checkstyle particularity (bug?):
232 For all tokens, JavadocStyle checks JavaDoc compliance IFF present;
233 only for package-info.java this ENFORCES that there is a JavaDoc
234 in each package-info.java. We believe this to be a bug because
235 JavadocPackage seems to be inteded for enforcement. Therefore,
236 in line with not enforcing JavaDoc everywhere, just checking when
237 it's present, we must therefore customize the tokens list here.
238 see https://github.com/checkstyle/checkstyle/issues/3416
240 <property name="tokens" value="ANNOTATION_DEF, ANNOTATION_FIELD_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF, INTERFACE_DEF, METHOD_DEF, VARIABLE_DEF"/>
242 <module name="MethodName">
243 <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
244 <message key="name.invalidPattern"
245 value="Method name ''{0}'' must match pattern ''{1}''."/>
247 <module name="SingleLineJavadoc"/>
249 <module name="HiddenField">
250 <property name="ignoreAbstractMethods" value="true" />
251 <property name="ignoreConstructorParameter" value="true" />
252 <property name="ignoreSetter" value="true" />
253 <property name="setterCanReturnItsClass" value="true" />
255 <module name="EmptyStatement"/>
256 <module name="EqualsHashCode"/>
257 <module name="FinalClass"/>
258 <module name="HideUtilityClassConstructor"/>
260 <!-- Checks for Exception Handling Anti-Patterns -->
261 <module name="IllegalCatch"/>
262 <module name="IllegalThrows" />
263 <module name="MutableException"/>
264 <module name="com.github.sevntu.checkstyle.checks.coding.AvoidHidingCauseExceptionCheck" />
266 <!-- Checks for API conventions and the like -->
267 <module name="com.github.sevntu.checkstyle.checks.coding.ForbidCertainImportsCheck">
268 <property name="packageNameRegexp" value=".*" />
269 <property name="forbiddenImportsRegexp" value="com.google.common.base.Charsets" />
270 <property name="forbiddenImportsExcludesRegexp" value="" />
271 <message key="forbid.certain.imports" value="Use ''java.nio.charset.StandardCharsets'' instead of ''{0}''" />