 ------
 Using Custom Checkstyle Property Expansion Definitions
 ------
 2006-07-21
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html


Using Custom Checkstyle Property Expansion Definitions

  Custom {{{https://checkstyle.org/config.html#Properties}property expansion definitions}}
  for the Checker can be defined.

  Checkstyle uses the property expansion mechanism to allow injection of specific values into a pre-defined
  Checker configuration.  Using property expansion alone is an insufficient means to customize the checks
  performed by Checkstyle.

  Example: <<<checkstyle.xml>>> - only checks the package name in use to ensure that it conforms to the
  desired scheme, but allows for users of this Checker to specify their own projectname.

+-----+
<?xml version="1.0" ?>

<!DOCTYPE module PUBLIC
  "-//Checkstyle//DTD Checkstyle Configuration 1.2//EN"
  "https://checkstyle.org/dtds/configuration_1_2.dtd">

<module name="Checker">
  <module name="TreeWalker">
    <module name="PackageName">
      <property name="format"
         value="com\.example\.$\{projectname\}(\.[a-z][a-zA-Z0-9]+)*$"/>
    </module>
  </module>
</module>
+-----+

  Example: <<<pom.xml>>> - Specifies the <<<projectname>>> property expansion that Checkstyle will use when
  encountering such a variable in the above Checker configuration.

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <configLocation>checkstyle.xml</configLocation>
          <propertyExpansion>
            projectname=whizbang
            anotherProperty=bazinga
          </propertyExpansion>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+

  The property expansion information can also come from a location using the <<<propertiesLocation>>>
  parameter as shown below. The <<<propertiesLocation>>> can point to a URL, File or build classpath resource reference.

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <configLocation>checkstyle.xml</configLocation>
          <propertiesLocation>${basedir}/checkstyle.properties</propertiesLocation>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+
