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="TreeWalker">
27 <module name="RegexpSinglelineJava">
28 <property name="format" value="System\.(out)|(err)\.print(ln)?\("/>
29 <property name="message" value="Line contains console output."/>
30 <property name="ignoreComments" value="false" />
32 <module name="RegexpSinglelineJava">
33 <property name="format" value="\.printStackTrace?\("/>
34 <property name="message" value="Line contains printStacktrace()."/>
35 <property name="ignoreComments" value="false" />
37 <module name="SuppressWarningsHolder" />
38 <module name="OuterTypeFilename"/>
39 <module name="IllegalTokenText">
40 <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
41 <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)"/>
42 <property name="message" value="Avoid using corresponding octal or Unicode escape."/>
44 <module name="AvoidEscapedUnicodeCharacters">
45 <property name="allowEscapesForControlCharacters" value="true"/>
46 <property name="allowByTailComment" value="true"/>
47 <property name="allowNonPrintableEscapes" value="true"/>
49 <module name="LineLength">
50 <property name="max" value="120"/><!-- ODL projects use 120 max line length -->
51 <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
53 <module name="OneTopLevelClass"/>
54 <module name="NoLineWrap"/>
55 <module name="EmptyBlock">
56 <property name="option" value="TEXT"/>
57 <property name="tokens" value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
59 <module name="NeedBraces"/>
60 <module name="LeftCurly">
61 <property name="maxLineLength" value="100"/>
63 <module name="RightCurly"/>
64 <module name="RightCurly">
65 <property name="option" value="alone"/>
66 <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
68 <module name="WhitespaceAround">
69 <property name="allowEmptyConstructors" value="true"/>
70 <property name="allowEmptyMethods" value="true"/>
71 <property name="allowEmptyTypes" value="true"/>
72 <property name="allowEmptyLoops" value="true"/>
73 <message key="ws.notFollowed"
74 value="WhitespaceAround: ''{0}'' is not followed by whitespace."/>
75 <message key="ws.notPreceded"
76 value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
78 <module name="ParenPad" />
79 <module name="OneStatementPerLine"/>
80 <module name="MultipleVariableDeclarations"/>
81 <module name="ArrayTypeStyle"/>
82 <module name="MissingSwitchDefault"/>
83 <module name="FallThrough"/>
84 <module name="UpperEll"/>
85 <module name="ModifierOrder"/>
86 <module name="RedundantModifier"/>
87 <module name="EmptyLineSeparator">
88 <property name="allowNoEmptyLineBetweenFields" value="true"/>
89 <!-- No PACKAGE_DEF token, as we like our license header to be glue to "package" statement, to save 1 line screen space -->
90 <property name="tokens" value="IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
92 <module name="SeparatorWrap">
93 <property name="tokens" value="DOT"/>
94 <property name="option" value="nl"/>
96 <module name="SeparatorWrap">
97 <property name="tokens" value="COMMA"/>
98 <property name="option" value="EOL"/>
100 <module name="PackageName">
101 <property name="format" value="^[a-z]+(\.[a-z][a-z0-9_]*)*$"/>
102 <message key="name.invalidPattern"
103 value="Package name ''{0}'' must match pattern ''{1}''."/>
105 <module name="TypeName">
106 <message key="name.invalidPattern"
107 value="Type name ''{0}'' must match pattern ''{1}''."/>
109 <module name="MemberName">
110 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
111 <message key="name.invalidPattern"
112 value="Member name ''{0}'' must match pattern ''{1}''."/>
114 <module name="ParameterName">
115 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
116 <message key="name.invalidPattern"
117 value="Parameter name ''{0}'' must match pattern ''{1}''."/>
119 <module name="LocalVariableName">
120 <property name="tokens" value="VARIABLE_DEF"/>
121 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
122 <property name="allowOneCharVarInForLoop" value="true"/>
123 <message key="name.invalidPattern"
124 value="Local variable name ''{0}'' must match pattern ''{1}''."/>
126 <module name="ClassTypeParameterName">
127 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
128 <message key="name.invalidPattern"
129 value="Class type name ''{0}'' must match pattern ''{1}''."/>
131 <module name="MethodName">
132 <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
133 <message key="name.invalidPattern"
134 value="Method name ''{0}'' must match pattern ''{1}''."/>
136 <module name="MethodTypeParameterName">
137 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
138 <message key="name.invalidPattern"
139 value="Method type name ''{0}'' must match pattern ''{1}''."/>
141 <module name="ConstantName" />
142 <module name="NoFinalizer"/>
143 <module name="GenericWhitespace">
144 <message key="ws.followed"
145 value="GenericWhitespace ''{0}'' is followed by whitespace."/>
146 <message key="ws.preceded"
147 value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
148 <message key="ws.illegalFollow"
149 value="GenericWhitespace ''{0}'' should followed by whitespace."/>
150 <message key="ws.notPreceded"
151 value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
153 <module name="Indentation">
154 <property name="basicOffset" value="4"/>
155 <property name="braceAdjustment" value="0"/>
156 <property name="caseIndent" value="4"/>
157 <property name="throwsIndent" value="4"/>
158 <property name="lineWrappingIndentation" value="4"/>
159 <property name="arrayInitIndent" value="4"/>
160 <!-- yangtools' checkstyle-logging had:
161 <property name="caseIndent" value="0"/>
162 <property name="throwsIndent" value="8"/>
165 <module name="AbbreviationAsWordInName">
166 <property name="ignoreFinal" value="false"/>
167 <property name="allowedAbbreviationLength" value="4"/>
169 <module name="OverloadMethodsDeclarationOrder"/>
170 <module name="VariableDeclarationUsageDistance"/>
171 <module name="AvoidStarImport"/>
172 <module name="UnusedImports"/>
173 <module name="CustomImportOrder">
174 <property name="thirdPartyPackageRegExp" value=".*"/>
175 <property name="sortImportsInGroupAlphabetically" value="true"/>
176 <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
178 <module name="RedundantImport"/>
179 <module name="MethodParamPad"/>
180 <module name="OperatorWrap">
181 <property name="option" value="NL"/>
182 <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 "/>
184 <module name="AnnotationLocation">
185 <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
187 <module name="AnnotationLocation">
188 <property name="tokens" value="VARIABLE_DEF"/>
189 <property name="allowSamelineMultipleAnnotations" value="true"/>
191 <module name="NonEmptyAtclauseDescription"/>
192 <module name="JavadocTagContinuationIndentation"/>
193 <module name="SummaryJavadocCheck">
194 <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
196 <!-- JavaDoc: Do NOT enforce JavaDoc presence, BUT if there is any, it must be uniform and well formed.
197 This is OpenDaylight's pragmatic compromise:
198 * Javadoc on every public method would take a long time to happen.
199 * We want to encourage informative javadocs, but "stub" javadocs are arguably worse than no javadocs.
200 * Javadocs on public methods of interfaces should be mandatory, but Checkstyle does not distinguish those
201 (yet; see https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/70).
203 <module name="JavadocParagraph">
204 <property name="allowNewlineParagraph" value="false"/>
206 <module name="AtclauseOrder">
207 <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
208 <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
210 <!-- Uncommenting this would JavaDoc mandatory
211 on all public methods, constructors and annotations, but not on all simple getters and setters (optional);
212 and on all public annotation types (refine "token" to make it on all public classes).
214 <module name="JavadocType">
215 <property name="scope" value="public"/>
216 <property name="tokens" value="ANNOTATION_DEF"/>
218 <module name="JavadocMethod">
219 <property name="scope" value="public"/>
220 <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
221 <property name="allowMissingPropertyJavadoc" value="true" />
222 <property name="allowMissingParamTags" value="true"/>
223 <property name="allowMissingThrowsTags" value="true"/>
224 <property name="allowMissingReturnTag" value="true"/>
225 <property name="minLineCount" value="2"/>
226 <property name="allowedAnnotations" value="Override, Test"/>
227 <property name="allowThrowsTagsForSubclasses" value="true"/>
230 <module name="JavadocStyle">
231 <!-- Do NOT 'scope' this one; any JavaDoc (public/protected/private) IFF present, should be style checked. -->
232 <property name="checkEmptyJavadoc" value="true" />
233 <!-- All except PACKAGE_DEF, due to a Checkstyle particularity (bug?):
234 For all tokens, JavadocStyle checks JavaDoc compliance IFF present;
235 only for package-info.java this ENFORCES that there is a JavaDoc
236 in each package-info.java. We believe this to be a bug because
237 JavadocPackage seems to be inteded for enforcement. Therefore,
238 in line with not enforcing JavaDoc everywhere, just checking when
239 it's present, we must therefore customize the tokens list here.
240 see https://github.com/checkstyle/checkstyle/issues/3416
242 <property name="tokens" value="ANNOTATION_DEF, ANNOTATION_FIELD_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF, INTERFACE_DEF, METHOD_DEF, VARIABLE_DEF"/>
244 <module name="MethodName">
245 <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
246 <message key="name.invalidPattern"
247 value="Method name ''{0}'' must match pattern ''{1}''."/>
249 <module name="SingleLineJavadoc"/>
250 <module name="EmptyStatement"/>
251 <module name="EqualsHashCode"/>
253 <!-- Checks for Exception Handling Anti-Patterns -->
254 <module name="IllegalCatch"/>
255 <module name="IllegalThrows" />
256 <module name="MutableException"/>
257 <!-- TODO Once new remote repo to proxy for sevntu has be added to nexus.opendaylight.org ,
258 (waiting for ticket #24830 with helpdesk@opendaylight.org), and https://git.opendaylight.org/gerrit/#/c/41075/
259 has been merged, then add the following additional Exception Handling Anti-Patterns related checks here:
261 <module name="AvoidHidingCauseExceptionCheck" />
263 <module name="com.github.sevntu.checkstyle.checks.coding.AvoidHidingCauseExceptionCheck" />
265 <module name="EitherLogOrThrowCheck" />
267 <module name="com.github.sevntu.checkstyle.checks.coding.EitherLogOrThrowCheck" />
271 <!-- Checks for API conventions and the like -->
272 <module name="com.github.sevntu.checkstyle.checks.coding.ForbidCertainImportsCheck">
273 <property name="packageNameRegexp" value=".*" />
274 <property name="forbiddenImportsRegexp" value="com.google.common.base.Charsets" />
275 <property name="forbiddenImportsExcludesRegexp" value="" />
276 <message key="forbid.certain.imports" value="Use ''java.nio.charset.StandardCharsets'' instead of ''{0}''" />