blob: dc39908b45eafec1c6644e0345c28889a819eabc [file] [log] [blame]
<?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. &quot;TODO(johndoe): Refactor when v2 is released.&quot;"/>
</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>