<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://unkrig.de/w/index.php?action=history&amp;feed=atom&amp;title=Cs-doclet</id>
	<title>Cs-doclet - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://unkrig.de/w/index.php?action=history&amp;feed=atom&amp;title=Cs-doclet"/>
	<link rel="alternate" type="text/html" href="https://unkrig.de/w/index.php?title=Cs-doclet&amp;action=history"/>
	<updated>2026-05-16T10:55:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://unkrig.de/w/index.php?title=Cs-doclet&amp;diff=48&amp;oldid=prev</id>
		<title>Aunkrig: /* Source code */</title>
		<link rel="alternate" type="text/html" href="https://unkrig.de/w/index.php?title=Cs-doclet&amp;diff=48&amp;oldid=prev"/>
		<updated>2024-05-02T16:47:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Source code&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:47, 2 May 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l304&quot;&gt;Line 304:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 304:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     https://github.com/aunkrig/doclet-cs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     https://github.com/aunkrig/doclet-cs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     https://github.com/aunkrig/doclet-cs-annotation&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     https://github.com/aunkrig/doclet-cs-annotation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Change log ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; Version 1.1.2 2022-01-27&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Ignore all standard doclet options; this makes this doclet more robust in environments that absolutely want to pass &quot;standard options&quot; to JAVADOC, e.g. APACHE MAVEN.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Render a list of related rules in the description of each quickfix.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Render a list of related quickfixes in the description of each check.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; Version 1.1.1 2022-01-25&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Added the &quot;-help&quot; command line option. (Previously, the MAINDOC document generated by the POM was unused.)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* &quot;-messages.properties-dir&quot; command line option worked only when option &quot;-checkstyle-metadata.properties&quot; was also given.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; Version 1.1.0 2020-01-22&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Type of annocation attribute &quot;Rule.quickfixes&quot; changed from &quot;Class[]&quot; to &quot;String[]&quot; to avoid compile-time dependencies from the CS extension to the ECLIPSECS wrapper of the CS extension.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:* Added support for CheckStyle version 8.5. (CheckStyle Version 8.2 had breaking changes!)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aunkrig</name></author>
	</entry>
	<entry>
		<id>https://unkrig.de/w/index.php?title=Cs-doclet&amp;diff=16&amp;oldid=prev</id>
		<title>Aunkrig: Created page with &quot;== Abstract ==  Cs-doclet is a [http://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/ JAVADOC doclet] that generates the metadata files for [http://checkstyle.sourceforge.net/ CheckStyle] and [http://eclipse-cs.sourceforge.net/ eclipse-cs] from annotations and [http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#CHDJGIJB doc tags] in the source code of your checks and filters.  This doclet is useful only for authors of CheckStyle extensions...&quot;</title>
		<link rel="alternate" type="text/html" href="https://unkrig.de/w/index.php?title=Cs-doclet&amp;diff=16&amp;oldid=prev"/>
		<updated>2024-05-01T18:52:55Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Abstract ==  Cs-doclet is a [http://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/ JAVADOC doclet] that generates the metadata files for [http://checkstyle.sourceforge.net/ CheckStyle] and [http://eclipse-cs.sourceforge.net/ eclipse-cs] from annotations and [http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#CHDJGIJB doc tags] in the source code of your checks and filters.  This doclet is useful only for authors of CheckStyle extensions...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
Cs-doclet is a [http://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/ JAVADOC doclet] that generates the metadata files for [http://checkstyle.sourceforge.net/ CheckStyle] and [http://eclipse-cs.sourceforge.net/ eclipse-cs] from annotations and [http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#CHDJGIJB doc tags] in the source code of your checks and filters.&lt;br /&gt;
&lt;br /&gt;
This doclet is useful only for authors of CheckStyle extensions, like [[Cs-contrib.unkrig.de|cs-contrib]].&lt;br /&gt;
&lt;br /&gt;
== Intended audience ==&lt;br /&gt;
&lt;br /&gt;
This tool is useful for the development of [http://checkstyle.sourceforge.net/ CheckStyle] checks and filters, and for their integration in [http://eclipse-cs.sourceforge.net/ eclipse-cs] and [http://www.mediawiki.org/wiki/MediaWiki MediaWiki].&lt;br /&gt;
&lt;br /&gt;
== Extending CheckStyle ==&lt;br /&gt;
&lt;br /&gt;
CheckStyle comes with an API to [http://checkstyle.sourceforge.net/writingchecks.html extend] it with custom checks and filters. Here is a completely useless, yet typical example of a custom check:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/ColorCheck.java&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 package com.pany.cs.checks;&lt;br /&gt;
 &lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.Check;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.DetailAST;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;&lt;br /&gt;
 &lt;br /&gt;
 public&lt;br /&gt;
 class ColorCheck extends Check {&lt;br /&gt;
 &lt;br /&gt;
     public void&lt;br /&gt;
     setColor(String value) { this.color = value; }&lt;br /&gt;
     private String color = &amp;quot;Yellow&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     @Override public int[]&lt;br /&gt;
     getDefaultTokens() { return new int[] { TokenTypes.ANNOTATION }; }&lt;br /&gt;
 &lt;br /&gt;
     @Override public void&lt;br /&gt;
     visitToken(DetailAST ast) { this.log(ast, &amp;quot;theColorIs&amp;quot;, this.color); }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The CheckStyle extension API supports internationalization be means of &amp;quot;messages.properties&amp;quot; files:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/messages.properties&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 theColorIs = The color is &amp;#039;&amp;#039;{0}&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/messages_de.properties&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 theColorIs = Die Farbe ist &amp;#039;&amp;#039;{0}&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
To make use of this check, you&amp;#039;d write a &amp;quot;CheckStyle configuration file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;checkstyle-config.xml&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE module PUBLIC &amp;quot;-//Puppy Crawl//DTD Check Configuration 1.3//EN&amp;quot; &amp;quot;http://www.puppycrawl.com/dtds/configuration_1_3.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;module name=&amp;quot;Checker&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;property name=&amp;quot;severity&amp;quot; value=&amp;quot;warning&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;module name=&amp;quot;TreeWalker&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;com.pany: ColorCheck&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;property name=&amp;quot;color&amp;quot; value=&amp;quot;blue&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;/module&amp;gt;&lt;br /&gt;
   &amp;lt;/module&amp;gt;&lt;br /&gt;
 &amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
, and execute CheckStyle on a target project, e.g. on the example project itself:&lt;br /&gt;
&lt;br /&gt;
 $ javac -d bin src/com/pany/cs/checks/ColorCheck.java&lt;br /&gt;
 $ java -classpath &amp;#039;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;bin&amp;lt;/span&amp;gt;;path/to/checkstyle-6.1-all.jar&amp;#039; \&lt;br /&gt;
 &amp;gt; com.puppycrawl.tools.checkstyle.Main \&lt;br /&gt;
 &amp;gt; -c checkstyle-config.xml \&lt;br /&gt;
 &amp;gt; -r src&lt;br /&gt;
 Starting audit...&lt;br /&gt;
 C:\dev\EclipseWS\de.unkrig.cs-contrib\foo\src\com\pany\cs\checks\ColorCheck.java:14:5: warning: The color is &amp;#039;blue&amp;#039;&lt;br /&gt;
 C:\dev\EclipseWS\de.unkrig.cs-contrib\foo\src\com\pany\cs\checks\ColorCheck.java:17:5: warning: The color is &amp;#039;blue&amp;#039;&lt;br /&gt;
 Audit done.&lt;br /&gt;
 $&lt;br /&gt;
&lt;br /&gt;
(We get the two warnings because there are two &amp;quot;@Override&amp;quot; annotations in the code.)&lt;br /&gt;
&lt;br /&gt;
Obviously, the Java code and the &amp;quot;messages.properties&amp;quot; files must be kept in sync with the Java code at all times, which is naturally very error-prone.&lt;br /&gt;
&lt;br /&gt;
Cs-doclet facilitates the task by generating the &amp;quot;messages.properties&amp;quot; file from annotations in the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/MyCheck.java&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 package com.pany.cs.checks;&lt;br /&gt;
 &lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.Check;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.DetailAST;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;&lt;br /&gt;
 &lt;br /&gt;
 public&lt;br /&gt;
 class ColorCheck extends Check {&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@Message(&amp;quot;The color is &amp;#039;&amp;#039;{0}&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
     private static final String MESSAGE_KEY_THE_COLOR_IS = &amp;quot;theColorIs&amp;quot;;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     public void&lt;br /&gt;
     setColor(String value) { this.color = value; }&lt;br /&gt;
     private String color = &amp;quot;Yellow&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     @Override public int[]&lt;br /&gt;
     getDefaultTokens() { return new int[] { TokenTypes.ANNOTATION }; }&lt;br /&gt;
 &lt;br /&gt;
     @Override public void&lt;br /&gt;
     visitToken(DetailAST ast) { this.log(ast, &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;MESSAGE_KEY_THE_COLOR_IS&amp;lt;/span&amp;gt;, this.color); }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
To generate the &amp;quot;messages.properties&amp;quot; file, you&amp;#039;d run JAVADOC with the cs-doclet and the &amp;quot;-messages.properties-dir&amp;quot; command line option:&lt;br /&gt;
 $ javadoc \&lt;br /&gt;
 &amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;-doclet de.unkrig.doclet.cs.CsDoclet&amp;lt;/span&amp;gt; \&lt;br /&gt;
 &amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;-docletpath &amp;quot;path/to/cs-doclet.jar;bin;path/to/checkstyle-6.1-all.jar;path/to/net.sf.eclipsecs.core-6.1.jar&amp;quot;&amp;lt;/span&amp;gt; \&lt;br /&gt;
 &amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;-messages.properties-dir src&amp;lt;/span&amp;gt; \&lt;br /&gt;
 &amp;gt; -sourcepath src \&lt;br /&gt;
 &amp;gt; -classpath ../net.sf.checkstyle-6.1/checkstyle-6.1/checkstyle-6.1-all.jar \&lt;br /&gt;
 &amp;gt; com.pany.cs.checks&lt;br /&gt;
 Loading source files for package com.pany.cs.checks...&lt;br /&gt;
 Constructing Javadoc information...&lt;br /&gt;
 $&lt;br /&gt;
&lt;br /&gt;
Notice that both &amp;quot;checkstyle.jar&amp;quot; and &amp;quot;net.sf.eclipsecs-core.jar&amp;quot; must be on the &amp;quot;-docletpath&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The generated &amp;quot;src/com/pany/cs/checks/messages.properties&amp;quot; file looks like this:&lt;br /&gt;
&lt;br /&gt;
 # This file was generated by the CS doclet; see http://cs-doclet.unkrig.de/&lt;br /&gt;
 &lt;br /&gt;
 # Custom check messages, in alphabetical order.&lt;br /&gt;
 &lt;br /&gt;
 # --------------- com.pany: ColorCheck ---------------&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;theColorIs&amp;lt;/span&amp;gt; = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;The color is &amp;#039;&amp;#039;{0}&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And voilà! All the messages are where they belong: In the source code.&lt;br /&gt;
&lt;br /&gt;
== Integrating with eclipse-cs ==&lt;br /&gt;
&lt;br /&gt;
When you integrate your checks with eclipse-cs, then you learn that you have to write two more metadata files:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;checkstyle-metadata.xml&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE checkstyle-metadata PUBLIC&lt;br /&gt;
 &amp;quot;-//eclipse-cs//DTD Check Metadata 1.1//EN&amp;quot;&lt;br /&gt;
 &amp;quot;http://eclipse-cs.sourceforge.net/dtds/checkstyle-metadata_1_1.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;checkstyle-metadata&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;rule-group-metadata name=&amp;quot;%Whitespace.group&amp;quot; priority=&amp;quot;999&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;rule-metadata&lt;br /&gt;
             internal-name=&amp;quot;com.pany.cs.checks.ColorCheck&amp;quot;&lt;br /&gt;
             parent=&amp;quot;TreeWalker&amp;quot;&lt;br /&gt;
             name=&amp;quot;%ColorCheck.name&amp;quot;&lt;br /&gt;
         &amp;gt;&lt;br /&gt;
             &amp;lt;alternative-name internal-name=&amp;quot;com.pany.cs.checks.ColorCheck&amp;quot; /&amp;gt;&lt;br /&gt;
             &amp;lt;description&amp;gt;%ColorCheck.desc&amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
             &amp;lt;property-metadata&lt;br /&gt;
                 name=&amp;quot;color&amp;quot;&lt;br /&gt;
                 datatype=&amp;quot;String&amp;quot;&lt;br /&gt;
                 default-value=&amp;quot;Yellow&amp;quot;&lt;br /&gt;
             &amp;gt;&lt;br /&gt;
                 &amp;lt;description&amp;gt;%ColorCheck.color&amp;lt;/description&amp;gt;&lt;br /&gt;
             &amp;lt;/property-metadata&amp;gt;&lt;br /&gt;
             &amp;lt;message-key key=&amp;quot;theColorIs&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/rule-metadata&amp;gt;&lt;br /&gt;
     &amp;lt;/rule-group-metadata&amp;gt;&lt;br /&gt;
 &amp;lt;/checkstyle-metadata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;checkstyle-metadata.properties&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Whitespace.group = Whitespace&lt;br /&gt;
 ColorCheck.name = com.pany: ColorCheck&lt;br /&gt;
 ColorCheck.desc =\&lt;br /&gt;
     A completely useless check which merely prints a (localizable) message each \&lt;br /&gt;
     time it encounters an annotation.&lt;br /&gt;
 ColorCheck.color = A completely useless check parameter.&lt;br /&gt;
&lt;br /&gt;
Tedious, isn&amp;#039;t it? Well, you can tell cs-doclet to also generate &amp;#039;&amp;#039;these&amp;#039;&amp;#039; files from annotations (and doc comments):&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/MyCheck.java&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 // File &amp;quot;src/com/pany/cs/ColorCheck.java&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
 package com.pany.cs.checks;&lt;br /&gt;
 &lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.Check;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.DetailAST;&lt;br /&gt;
 import com.puppycrawl.tools.checkstyle.api.TokenTypes;&lt;br /&gt;
 &lt;br /&gt;
 import de.unkrig.csdoclet.StringRuleProperty;&lt;br /&gt;
 import de.unkrig.csdoclet.Rule;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;A completely useless check which merely prints a&amp;lt;/span&amp;gt;&lt;br /&gt;
  * &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;(localizable) message each time it encounters an annotation.&amp;lt;/span&amp;gt;&lt;br /&gt;
  */&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@Rule(&lt;br /&gt;
     group      = &amp;quot;%Whitespace.group&amp;quot;,&lt;br /&gt;
     groupName  = &amp;quot;Whitespace&amp;quot;,&lt;br /&gt;
     name       = &amp;quot;com.pany: ColorCheck&amp;quot;,&lt;br /&gt;
     parent     = &amp;quot;TreeWalker&amp;quot;&lt;br /&gt;
 )&amp;lt;/span&amp;gt;&lt;br /&gt;
 public&lt;br /&gt;
 class ColorCheck extends Check {&lt;br /&gt;
 &lt;br /&gt;
     @Message(&amp;quot;The color is &amp;#039;&amp;#039;{0}&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
     private static final String MESSAGE_KEY_THE_COLOR_IS = &amp;quot;theColorIs&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
     /**&lt;br /&gt;
      * &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;A completely useless check parameter&amp;lt;/span&amp;gt;.&lt;br /&gt;
      */&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;@StringRuleProperty(defaultValue = DEFAULT_COLOR)&amp;lt;/span&amp;gt;&lt;br /&gt;
     public void&lt;br /&gt;
     setColor(String value) { this.color = value; }&lt;br /&gt;
 &lt;br /&gt;
     private String color = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;DEFAULT_COLOR&amp;lt;/span&amp;gt;;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;private static final String DEFAULT_COLOR = &amp;quot;Yellow&amp;quot;;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     @Override public int[]&lt;br /&gt;
     getDefaultTokens() { return new int[] { TokenTypes.ANNOTATION }; }&lt;br /&gt;
 &lt;br /&gt;
     @Override public void&lt;br /&gt;
     visitToken(DetailAST ast) { this.log(ast, MESSAGE_KEY_THE_COLOR_IS, this.color); }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 $ javadoc \&lt;br /&gt;
 &amp;gt; -doclet de.unkrig.doclet.cs.CsDoclet \&lt;br /&gt;
 &amp;gt; -docletpath &amp;quot;path/to/cs-doclet.jar;bin;path/to/checkstyle-6.1-all.jar;path/to/net.sf.eclipsecs.core-6.1.jar&amp;quot; \&lt;br /&gt;
 &amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;-checkstyle-metadata.properties-dir src&amp;lt;/span&amp;gt; \&lt;br /&gt;
 &amp;gt; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;-checkstyle-metadata.xml-dir src&amp;lt;/span&amp;gt; \&lt;br /&gt;
 &amp;gt; -messages.properties-dir src \&lt;br /&gt;
 &amp;gt; -sourcepath src \&lt;br /&gt;
 &amp;gt; -classpath ../net.sf.checkstyle-6.1/checkstyle-6.1/checkstyle-6.1-all.jar \&lt;br /&gt;
 &amp;gt; com.pany.cs.checks&lt;br /&gt;
 Loading source files for package com.pany.cs.checks...&lt;br /&gt;
 Constructing Javadoc information...&lt;br /&gt;
 $&lt;br /&gt;
&lt;br /&gt;
And you&amp;#039;ll get:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/checkstyle-metadata.properties&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 # This file was generated by the CS doclet; see http://cs-doclet.unkrig.de/&lt;br /&gt;
 &lt;br /&gt;
 # Rule groups:&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Whitespace.group&amp;lt;/span&amp;gt; = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Whitespace&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Custom checks, in alphabetical order.&lt;br /&gt;
 &lt;br /&gt;
 # --------------- &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;com.pany: ColorCheck&amp;lt;/span&amp;gt; ---------------&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ColorCheck.name&amp;lt;/span&amp;gt; = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;com.pany: ColorCheck&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ColorCheck.desc&amp;lt;/span&amp;gt; =\&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;A completely useless check which merely prints a (localizable) message each time it encounters an annotation.&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ColorCheck.color&amp;lt;/span&amp;gt;                                  = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;A completely useless check parameter.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;File &amp;quot;src/com/pany/cs/checks/checkstyle-metadata.xml&amp;quot;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE checkstyle-metadata PUBLIC&lt;br /&gt;
 &amp;quot;-//eclipse-cs//DTD Check Metadata 1.1//EN&amp;quot;&lt;br /&gt;
 &amp;quot;http://eclipse-cs.sourceforge.net/dtds/checkstyle-metadata_1_1.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;checkstyle-metadata&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;amp;lt;!-- This file was generated by the CS doclet; see http://cs-doclet.unkrig.de/ --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;amp;lt;!-- ColorCheck --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;rule-group-metadata name=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;%Whitespace.group&amp;lt;/span&amp;gt;&amp;quot; priority=&amp;quot;999&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;rule-metadata&lt;br /&gt;
             internal-name=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;com.pany.cs.checks.ColorCheck&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
             parent=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;TreeWalker&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
             name=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;%ColorCheck.name&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
         &amp;gt;&lt;br /&gt;
             &amp;lt;alternative-name internal-name=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;com.pany.cs.checks.ColorCheck&amp;lt;/span&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
             &amp;lt;description&amp;gt;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;%ColorCheck.desc&amp;lt;/span&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
             &amp;lt;property-metadata&lt;br /&gt;
                 name=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;color&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
                 datatype=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;String&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
                 default-value=&amp;quot;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Yellow&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
             &amp;gt;&lt;br /&gt;
                 &amp;lt;description&amp;gt;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;%ColorCheck.color&amp;lt;/span&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
             &amp;lt;/property-metadata&amp;gt;&lt;br /&gt;
             &amp;lt;message-key key=&amp;quot;theColorIs&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/rule-metadata&amp;gt;&lt;br /&gt;
     &amp;lt;/rule-group-metadata&amp;gt;&lt;br /&gt;
 &amp;lt;/checkstyle-metadata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Javadoc-like documentation ==&lt;br /&gt;
&lt;br /&gt;
Typically, you will also want to publish human-readable documentation for your checks and filters, which is more or less identical with the text in the eclipse-cs metadata files. This is also possible with the &amp;quot;-d&amp;quot; command line option:&lt;br /&gt;
&lt;br /&gt;
 $ javadoc \&lt;br /&gt;
 &amp;gt; -doclet de.unkrig.doclet.cs.CsDoclet \&lt;br /&gt;
 &amp;gt; -docletpath &amp;quot;path/to/cs-doclet.jar;bin;path/to/checkstyle-6.1-all.jar;path/to/net.sf.eclipsecs.core-6.1.jar&amp;quot; \&lt;br /&gt;
 &amp;gt; -d ./csdoc \&lt;br /&gt;
 &amp;gt; -sourcepath src \&lt;br /&gt;
 &amp;gt; -classpath ../net.sf.checkstyle-6.1/checkstyle-6.1/checkstyle-6.1-all.jar \&lt;br /&gt;
 &amp;gt; com.pany.cs.checks&lt;br /&gt;
 Loading source files for package com.pany.cs.checks...&lt;br /&gt;
 Constructing Javadoc information...&lt;br /&gt;
 $&lt;br /&gt;
&lt;br /&gt;
This will generate a Javadoc-like HTML documentation for all checks and filters that are declared in the given Java packages.&lt;br /&gt;
&lt;br /&gt;
And you&amp;#039;re done!&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Before, you had to write one Java file and four more or less redundant metadata files per check; now you merely have to throw in a few annotations and doc comments and generate all four metadata files from the source code&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
The source code for the plug-in is here:&lt;br /&gt;
&lt;br /&gt;
    https://github.com/aunkrig/doclet-cs&lt;br /&gt;
    https://github.com/aunkrig/doclet-cs-annotation&lt;/div&gt;</summary>
		<author><name>Aunkrig</name></author>
	</entry>
</feed>