812dd59b28d3a8d7e3f25e3886eaf0f3859e990a
[odlparent.git] / checkstyle / src / main / resources / odl_checks.xml
1 <?xml version="1.0"?>
2 <!DOCTYPE module PUBLIC
3           "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4           "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
5 <!--
6
7     ODL Checkstyle configuration, originally based on the the Google coding conventions from:
8
9     -  Google Java Style
10        https://google-styleguide.googlecode.com/svn-history/r130/trunk/javaguide.html
11
12     Checkstyle is very configurable. Be sure to read the documentation at
13     http://checkstyle.sf.net (or in your downloaded distribution).
14
15     Most Checks are configurable, be sure to consult the documentation.
16
17     To completely disable a check, just comment it out or delete it from the file.
18
19     Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
20
21  -->
22 <module name="Checker">
23     <property name="charset" value="UTF-8"/>
24     <property name="severity" value="${checkstyle.violationSeverity}" default="warning"/>
25
26     <!-- Checks for whitespace                               -->
27     <!-- See http://checkstyle.sf.net/config_whitespace.html -->
28     <module name="FileTabCharacter">
29         <property name="eachLine" value="true"/>
30     </module>
31     <module name="RegexpMultiline">
32         <property name="format" value="System\.(out)|(err)\.print(ln)?\("/>
33         <property name="message" value="Line contains console output."/>
34     </module>
35     <module name="RegexpMultiline">
36         <property name="format" value="\.printStackTrace?\("/>
37         <property name="message" value="Line contains printStacktrace()."/>
38     </module>
39     <module name="RegexpSingleline">
40         <property name="format" value="\s+$"/>
41         <property name="message" value="Line has trailing spaces."/>
42     </module>
43     <module name="RegexpMultiline">
44         <property name="format" value="(\r\n|\r)"/>
45         <property name="message" value="Line has Windows line delimiter."/>
46     </module>
47     <module name="SuppressWarningsFilter"/>
48     <module name="TreeWalker">
49         <module name="SuppressWarningsHolder" />
50         <module name="OuterTypeFilename"/>
51         <module name="IllegalTokenText">
52             <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
53             <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)"/>
54             <property name="message" value="Avoid using corresponding octal or Unicode escape."/>
55         </module>
56         <module name="AvoidEscapedUnicodeCharacters">
57             <property name="allowEscapesForControlCharacters" value="true"/>
58             <property name="allowByTailComment" value="true"/>
59             <property name="allowNonPrintableEscapes" value="true"/>
60         </module>
61         <module name="LineLength">
62             <property name="max" value="120"/><!-- ODL projects use 120 max line length -->
63             <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
64         </module>
65         <module name="OneTopLevelClass"/>
66         <module name="NoLineWrap"/>
67         <module name="EmptyBlock">
68             <property name="option" value="TEXT"/>
69             <property name="tokens" value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
70         </module>
71         <module name="NeedBraces"/>
72         <module name="LeftCurly">
73             <property name="maxLineLength" value="100"/>
74         </module>
75         <module name="RightCurly"/>
76         <module name="RightCurly">
77             <property name="option" value="alone"/>
78             <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
79         </module>
80         <module name="WhitespaceAround">
81             <property name="allowEmptyConstructors" value="true"/>
82             <property name="allowEmptyMethods" value="true"/>
83             <property name="allowEmptyTypes" value="true"/>
84             <property name="allowEmptyLoops" value="true"/>
85             <message key="ws.notFollowed"
86              value="WhitespaceAround: ''{0}'' is not followed by whitespace."/>
87              <message key="ws.notPreceded"
88              value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
89         </module>
90         <module name="OneStatementPerLine"/>
91         <module name="MultipleVariableDeclarations"/>
92         <module name="ArrayTypeStyle"/>
93         <module name="MissingSwitchDefault"/>
94         <module name="FallThrough"/>
95         <module name="UpperEll"/>
96         <module name="ModifierOrder"/>
97         <module name="EmptyLineSeparator">
98             <property name="allowNoEmptyLineBetweenFields" value="true"/>
99             <!-- No PACKAGE_DEF token, as we like our license header to be glue to "package" statement, to save 1 line screen space -->
100             <property name="tokens" value="IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
101         </module>
102         <module name="SeparatorWrap">
103             <property name="tokens" value="DOT"/>
104             <property name="option" value="nl"/>
105         </module>
106         <module name="SeparatorWrap">
107             <property name="tokens" value="COMMA"/>
108             <property name="option" value="EOL"/>
109         </module>
110         <module name="PackageName">
111             <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
112             <message key="name.invalidPattern"
113              value="Package name ''{0}'' must match pattern ''{1}''."/>
114         </module>
115         <module name="TypeName">
116             <message key="name.invalidPattern"
117              value="Type name ''{0}'' must match pattern ''{1}''."/>
118         </module>
119         <module name="MemberName">
120             <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
121             <message key="name.invalidPattern"
122              value="Member name ''{0}'' must match pattern ''{1}''."/>
123         </module>
124         <module name="ParameterName">
125             <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
126             <message key="name.invalidPattern"
127              value="Parameter name ''{0}'' must match pattern ''{1}''."/>
128         </module>
129         <module name="LocalVariableName">
130             <property name="tokens" value="VARIABLE_DEF"/>
131             <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
132             <property name="allowOneCharVarInForLoop" value="true"/>
133             <message key="name.invalidPattern"
134              value="Local variable name ''{0}'' must match pattern ''{1}''."/>
135         </module>
136         <module name="ClassTypeParameterName">
137             <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
138             <message key="name.invalidPattern"
139              value="Class type name ''{0}'' must match pattern ''{1}''."/>
140         </module>
141         <module name="MethodName">
142             <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
143             <message key="name.invalidPattern"
144              value="Method name ''{0}'' must match pattern ''{1}''."/>
145         </module>
146         <module name="MethodTypeParameterName">
147             <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
148             <message key="name.invalidPattern"
149              value="Method type name ''{0}'' must match pattern ''{1}''."/>
150         </module>
151         <module name="NoFinalizer"/>
152         <module name="GenericWhitespace">
153             <message key="ws.followed"
154              value="GenericWhitespace ''{0}'' is followed by whitespace."/>
155              <message key="ws.preceded"
156              value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
157              <message key="ws.illegalFollow"
158              value="GenericWhitespace ''{0}'' should followed by whitespace."/>
159              <message key="ws.notPreceded"
160              value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
161         </module>
162         <module name="Indentation">
163             <property name="basicOffset" value="4"/>
164             <property name="braceAdjustment" value="0"/>
165             <property name="caseIndent" value="4"/>
166             <property name="throwsIndent" value="4"/>
167             <property name="lineWrappingIndentation" value="4"/>
168             <property name="arrayInitIndent" value="4"/>
169         <!-- yangtools' checkstyle-logging had:
170             <property name="caseIndent" value="0"/>
171             <property name="throwsIndent" value="8"/>
172          -->
173         </module>
174         <module name="AbbreviationAsWordInName">
175             <property name="ignoreFinal" value="false"/>
176             <property name="allowedAbbreviationLength" value="4"/>
177         </module>
178         <module name="OverloadMethodsDeclarationOrder"/>
179         <module name="VariableDeclarationUsageDistance"/>
180         <module name="AvoidStarImport"/>
181         <module name="UnusedImports"/>
182         <module name="CustomImportOrder">
183             <property name="thirdPartyPackageRegExp" value=".*"/>
184             <property name="sortImportsInGroupAlphabetically" value="true"/>
185             <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
186         </module>
187         <module name="RedundantImport"/>
188         <module name="MethodParamPad"/>
189         <module name="OperatorWrap">
190             <property name="option" value="NL"/>
191             <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 "/>
192         </module>
193         <module name="AnnotationLocation">
194             <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
195         </module>
196         <module name="AnnotationLocation">
197             <property name="tokens" value="VARIABLE_DEF"/>
198             <property name="allowSamelineMultipleAnnotations" value="true"/>
199         </module>
200         <module name="NonEmptyAtclauseDescription"/>
201         <module name="JavadocTagContinuationIndentation"/>
202         <module name="SummaryJavadocCheck">
203             <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
204         </module>
205         <!-- JavaDoc: Do NOT enforce JavaDoc presence, BUT if there is any, it must be uniform and well formed.
206                       This is OpenDaylight's pragmatic compromise:
207                         * Javadoc on every public method would take a long time to happen.
208                         * We want to encourage informative javadocs, but "stub" javadocs are arguably worse than no javadocs.
209                         * Javadocs on public methods of interfaces should be mandatory, but Checkstyle does not distinguish those
210                           (yet; see https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/70).
211           -->
212         <module name="JavadocParagraph">
213             <property name="allowNewlineParagraph" value="false"/>
214         </module>
215         <module name="AtclauseOrder">
216             <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
217             <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
218         </module>
219         <module name="JavadocType">
220             <property name="scope" value="public"/>
221             <property name="tokens" value="ANNOTATION_DEF"/>
222         </module>
223         <module name="JavadocMethod">
224             <property name="scope" value="public"/>
225             <property name="tokens" value="ANNOTATION_FIELD_DEF"/> <!-- JavaDoc on Annotation Field mandatory, on methods (incl. public) & constructors it's currently optional -->
226             <property name="allowMissingPropertyJavadoc" value="true" /> <!-- JavaDoc on STRICT (!) getters and setters is optional -->
227             <property name="allowMissingParamTags" value="true"/>
228             <property name="allowMissingThrowsTags" value="true"/>
229             <property name="allowMissingReturnTag" value="true"/>
230             <property name="minLineCount" value="2"/>
231             <property name="allowedAnnotations" value="Override, Test"/>
232             <property name="allowThrowsTagsForSubclasses" value="true"/>
233         </module>
234         <module name="JavadocStyle">
235             <!-- Do NOT 'scope' this one; any JavaDoc (public/protected/private) IFF present, should be style checked. -->
236             <property name="checkEmptyJavadoc" value="true" />
237         </module>
238         <module name="MethodName">
239             <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
240             <message key="name.invalidPattern"
241              value="Method name ''{0}'' must match pattern ''{1}''."/>
242         </module>
243         <module name="SingleLineJavadoc"/>
244         <module name="UpperEll"/>
245         <module name="EmptyStatement"/>
246         <module name="EqualsHashCode"/>
247     </module>
248 </module>