|  | <?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> |