| <?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"> |
| <!-- This is a checkstyle configuration file. For descriptions of |
| what the following rules do, please see the checkstyle configuration |
| page at http://checkstyle.sourceforge.net/config.html --> |
| <!-- Checks with numbered comments refer to recommendations made |
| by Joshua Bloch in his book Effective Java --> |
| <module name="Checker"> |
| <property name="charset" value="UTF-8"/> |
| <module name="BeforeExecutionExclusionFileFilter"> |
| <property name="fileNamePattern" value="module\-info\.java$"/> |
| </module> |
| <module name="FileTabCharacter"> |
| <property name="eachLine" value="true"/> |
| <!-- Checks that there are no tab characters in the file. |
| --> |
| </module> |
| <module name="RegexpSingleline"> |
| <!-- Checks that FIXME is not used in comments. TODO is preferred. |
| --> |
| <property name="format" value="((//.*)|(\*.*))FIXME"/> |
| <property name="message" value="TODO is preferred to FIXME. e.g. "TODO(johndoe): Refactor when v2 is released.""/> |
| </module> |
| <module name="RegexpSingleline"> |
| <!-- Checks that TODOs have an owner or ticket and are formatted correctly: |
| http://go/java-style#s4.8.6.2-todo-comments |
| --> |
| <property name="format" value="TODO[^\(]."/> |
| <property name="message" value="TODOs need to have an owner or ticket specified (see go/tott-486)"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <!-- Bans the use of System.out.println and associated methods. |
| --> |
| <property name="format" value="System\.[\a-z]+\.println"/> |
| <property name="message" value="Use a logger, not System's println."/> |
| </module> |
| <module name="RegexpSingleline"> |
| <!-- Bans the use of System#currentTimeMillis. |
| --> |
| <property name="format" value="System\.currentTimeMillis"/> |
| <property name="message" value="System.currentTimeMillis is strongly discouraged. There is almost no situation where it is the correct choice. See the java.time libraries instead."/> |
| </module> |
| <!-- Other libraries from: |
| https://engdoc.corp.google.com/eng/doc/devguide/java/practices/javatime.md |
| --> |
| <module name="RegexpSingleline"> |
| <property name="format" value="LocalDate\.now"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <property name="format" value="LocalDateTime\.now"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <property name="format" value="LocalTime\.now"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <property name="format" value="OffsetDateTime\.now"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <property name="format" value="ZonedDateTime\.now"/> |
| </module> |
| <module name="RegexpSingleline"> |
| <property name="format" value="Clock\.systemDefaultZone"/> |
| </module> |
| <!-- All Java AST specific tests live under TreeWalker module. --> |
| <module name="TreeWalker"> |
| <!-- |
| IMPORT CHECKS |
| --> |
| <module name="RedundantImport"> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="AvoidStarImport"> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="IllegalImport"> |
| <property name="severity" value="error"/> |
| <property name="illegalPkgs" value="com.sun, com.apache.beam.repackaged, jdk.internal, javax.annotation.concurrent, jdk.nashorn.internal, avro.shaded, jersey.repackaged"/> |
| <property name="illegalClasses" value="javax.annotation.Nullable, edu.umd.cs.findbugs.annotations.Nullable, com.google.inject.Inject, com.google.inject.BindingAnnotation, com.google.inject.Named, com.google.inject.Singleton, com.google.inject.ScopeAnnotation, java.util.Date, java.util.Calendar, jdk.nashorn.internal.ir.annotations.Immutable"/> |
| </module> |
| <!-- ENCODING AND FORMAT CHECKS --> |
| <module name="IllegalTokenText"> |
| <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/> |
| <property name="format" value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/> |
| <property name="message" value="Consider using special escape sequence instead of octal value or Unicode escaped value."/> |
| </module> |
| <module name="AvoidEscapedUnicodeCharacters"> |
| <property name="allowEscapesForControlCharacters" value="true"/> |
| <property name="allowByTailComment" value="true"/> |
| <property name="allowNonPrintableEscapes" value="true"/> |
| </module> |
| <module name="EmptyLineSeparator"> |
| <!-- go/java-style#s4.6.1-vertical-whitespace --> |
| <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF"/> |
| <property name="allowNoEmptyLineBetweenFields" value="true"/> |
| </module> |
| <!-- |
| JAVADOC CHECKS |
| --> |
| <!-- FORK: This policy was edited to use open-source implementation. --> |
| <!-- <module name="com.google.devtools.checkstyle.checks.javadoc.GoogleJavadocTypeCheck"> --> |
| <module name="JavadocType"> |
| <!-- Item 28 - Write doc comments for all exposed API elements. --> |
| <!-- Ensure all classes with visibility greater than or equal to |
| protected have class level documentation. --> |
| <property name="scope" value="protected"/> |
| <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. --> |
| <property name="allowUnknownTags" value="true"/> |
| <property name="allowMissingParamTags" value="true"/> |
| <message key="javadoc.missing" value="Missing a Javadoc comment."/> |
| </module> |
| <module name="JavadocMethod"> |
| <property name="scope" value="public"/> |
| <property name="allowMissingParamTags" value="true"/> |
| <property name="allowMissingThrowsTags" value="true"/> |
| <property name="allowMissingReturnTag" value="true"/> |
| <property name="allowUndeclaredRTE" value="true"/> |
| <property name="allowMissingPropertyJavadoc" value="true"/> |
| <property name="allowedAnnotations" value="Override, Test, Before, After, BeforeClass, AfterClass, "/> |
| <property name="allowThrowsTagsForSubclasses" value="true"/> |
| </module> |
| <module name="MissingJavadocMethod"> |
| <property name="severity" value="warning"/> |
| <property name="scope" value="public"/> |
| <property name="minLineCount" value="2"/> |
| <property name="allowedAnnotations" value="Override, Test, Provides"/> |
| </module> |
| <module name="NonEmptyAtclauseDescription"/> |
| <module name="SummaryJavadoc"> |
| <property name="severity" value="error"/> |
| <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/> |
| </module> |
| <module name="InvalidJavadocPosition"/> |
| <module name="JavadocParagraph"/> |
| <module name="AtclauseOrder"> |
| <property name="tagOrder" value="@param, @return, @throws, @deprecated"/> |
| <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> |
| </module> |
| <!-- |
| NAMING CHECKS |
| --> |
| <!-- Item 38 - Adhere to generally accepted naming conventions --> |
| <module name="PackageName"> |
| <!-- Validates identifiers for package names against the |
| supplied expression. --> |
| <property name="format" value="^([a-z][a-z0-9]*)(\.[a-z][a-z0-9]*)*$"/> |
| <property name="severity" value="error"/> |
| <message key="name.invalidPattern" value="Package name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="TypeNameCheck"> |
| <!-- Validates static, final fields against the supplied expression. --> |
| <metadata name="altname" value="TypeName"/> |
| <property name="format" value="^[A-Z][a-zA-Z0-9]*(_CustomFieldSerializer)?$"/> |
| </module> |
| <module name="MemberNameCheck"> |
| <!-- Validates non-static members against the supplied expression. --> |
| <metadata name="altname" value="MemberName"/> |
| <property name="applyToPublic" value="true"/> |
| <property name="applyToProtected" value="true"/> |
| <property name="applyToPackage" value="true"/> |
| <property name="applyToPrivate" value="true"/> |
| <!-- allows for googles deprecated foo_ member naming scheme --> |
| <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/> |
| </module> |
| <module name="MethodNameCheck"> |
| <!-- Validates identifiers for method names. --> |
| <metadata name="altname" value="MethodName"/> |
| <property name="format" value="^([a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*|__constructor__|__staticInitializer__)$"/> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="ParameterName"> |
| <!-- Validates identifiers for method parameters against the |
| expression "^[a-z][a-zA-Z0-9]*$". --> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="LambdaParameterName"> |
| <property name="severity" value="error"/> |
| <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/> |
| <message key="name.invalidPattern" value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="CatchParameterName"> |
| <property name="severity" value="error"/> |
| <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/> |
| <message key="name.invalidPattern" value="Catch parameter name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="LocalFinalVariableName"> |
| <!-- Validates identifiers for local final variables against the |
| expression "^[a-z][a-zA-Z0-9]*$". --> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="LocalVariableName"> |
| <!-- Validates identifiers for local variables against the |
| expression "^[a-z][a-zA-Z0-9]*$". --> |
| <property name="severity" value="error"/> |
| </module> |
| <module name="ClassTypeParameterName"> |
| <!-- Class generic type. go/java-style/#s5.2.8-type-variable-names --> |
| <property name="severity" value="error"/> |
| <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> |
| <message key="name.invalidPattern" value="Class type name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="MethodTypeParameterName"> |
| <!-- Method generic type. go/java-style/#s5.2.8-type-variable-names --> |
| <property name="severity" value="error"/> |
| <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> |
| <message key="name.invalidPattern" value="Method type name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="InterfaceTypeParameterName"> |
| <!-- Interface generic type. go/java-style/#s5.2.8-type-variable-names --> |
| <property name="severity" value="error"/> |
| <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> |
| <message key="name.invalidPattern" value="Interface type name ''{0}'' must match pattern ''{1}''."/> |
| </module> |
| <module name="AbbreviationAsWordInName"> |
| <property name="ignoreFinal" value="false"/> |
| <property name="allowedAbbreviationLength" value="1"/> |
| </module> |
| <module name="AnnotationLocation"> |
| <property name="id" value="AnnotationLocationMostCases"/> |
| <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/> |
| </module> |
| <module name="AnnotationLocation"> |
| <property name="id" value="AnnotationLocationVariables"/> |
| <property name="tokens" value="VARIABLE_DEF"/> |
| <property name="allowSamelineMultipleAnnotations" value="true"/> |
| </module> |
| <!-- |
| LENGTH and CODING CHECKS |
| --> |
| <module name="OperatorWrap"> |
| <property name="option" value="NL"/> |
| <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, METHOD_REF "/> |
| </module> |
| <module name="OneTopLevelClass"/> |
| <!-- Checks for braces around if and else blocks --> |
| <module name="NeedBraces"> |
| <property name="severity" value="error"/> |
| <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/> |
| </module> |
| <!-- Ensures the use of style arrays and not C++-style arrays: |
| http://go/java-style#s4.8.3.2-array-declarations --> |
| <module name="ArrayTypeStyle"/> |
| <module name="EmptyCatchBlock"> |
| <property name="exceptionVariableName" value="expected"/> |
| </module> |
| <!-- Overloaded methods should always be grouped together. --> |
| <module name="OverloadMethodsDeclarationOrder"/> |
| <!-- http://go/java-style#s4.8.2.2-variables-limited-scope --> |
| <module name="VariableDeclarationUsageDistance"/> |
| <module name="EqualsAvoidNull"/> |
| <!-- http://go/java-style#s6.4-finalizers --> |
| <module name="NoFinalizer"/> |
| </module> |
| </module> |