<?xml version="1.0"?>
<!-- Licensed under the Apache License, Version 2.0 (the "License"); you
  may not use this file except in compliance with the License. You may obtain
  a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
  required by applicable law or agreed to in writing, software distributed
  under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
  OR CONDITIONS OF ANY KIND, either express or implied. See the License for
  the specific language governing permissions and limitations under the License.
  See accompanying LICENSE file. -->
<!DOCTYPE module PUBLIC
  "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
  "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
  <module name="TreeWalker">
    <module name="AvoidTransactionalOnPrivateMethodsCheck"/>

    <module name="FallThrough"/>

    <!-- imports -->
    <module name="AvoidStarImport"/>
    <module name="IllegalImport"/>
    <module name="ImportOrder">
      <property name="groups" value="java,javax,org,com,*"/>
      <property name="ordered" value="true"/>
      <property name="separated" value="true"/>
      <property name="option" value="top"/> <!-- static imports -->
      <property name="sortStaticImportsAlphabetically" value="true"/>
    </module>
    <module name="RedundantImport"/>
    <module name="UnusedImports"/>

    <!-- blocks -->
    <module name="AvoidNestedBlocks">
      <property name="allowInSwitchCase" value="true"/>
    </module>
    <module name="EmptyBlock">
      <property name="option" value="text"/>
    </module>
  </module>
</module>
