Acknowledgement: Some content in this guide was adapted from other Apache projects such as Avalon, Cactus, Turbine and Velocity.
Conventions in this section apply to Repository content, regardless of type:
In order to facilitate the human reading of FOP source code, reduce churning in code, and prevent disputes, the FOP developers have agreed on a set of coding conventions. The basis of these coding conventions is documented in the Apache XML Project Guidelines, which requires that all Java Language source code in the repository must be written in conformance to Sun's Code Conventions for the Java Programming Language. In addition, the FOP developers have agreed to other conventions, which are summarized in the following table:
Convention | Rationale | Enforced By |
---|---|---|
Every Java source file starts with the Apache licence header. | Required by Apache. | checkstyle |
No tabs in content. | Programmers should not have to adjust the tab settings in their editor to be able to read the source code. | checkstyle |
Indentation of 4 spaces per level. | Maximize readability. | Not enforced |
Comments, identifiers, and project documentation must be in English. In general, other languages must not be used, except in translated documentation and language-specific i10n files. | To avoid the need for everyone to learn all languages, English has become the standard language for many technology projects, and is the only human language that all FOP developers are expected to know. | Not enforced |
American English spelling should be used. Alternative spelling and idioms are tolerated, but may be changed by anyone to American. | Some standard is useful, and American English is widely used and accepted for technology standards and projects. | Not enforced. |
Fully qualify all import statements (no "import java.util.*") | Clarity | checkstyle |
No underscores in variable names except for static finals. | Upper/lower case distinctions can be made in all other variable names, eliminating the need for artificial word boundaries. | checkstyle |
Opening brace for a block should be on the same line as its control statement (if, while, etc.). | Standardization, general preference. | checkstyle |
Write appropriate javadoc entries for all public and protected classes, methods, and variables. | Basic API documentation is needed. | checkstyle |
Personal attribution in the source code, such as @author tags and attribution comments should not be used. Excepted from this general rule are potentially confusing or wide-ranging changes. If such changes prove useful over time, the related comments should be removed. | Personal attribution tends to clutter the code. The relevant historical information that might be useful for problem-solving is tracked in the code repository. | Not enforced. Anyone is free to remove such comments. |
For developers that dislike these conventions, one workaround is to develop using their own style, then use a formatting tool like astyle (Artistic Style) before committing.
The java syntax checker "
To use the "checkstyle" target in FOP's build process, download the source from the
Checkstyle is probably most useful when integrated into your IDE. See the Checkstyle web site for more information about IDE plugins.
The following general principles are a distillation of best practice expectations on the FOP project.
Convention | Rationale | Enforced By |
---|---|---|
XML files must always be well-formed. Validation is optional. | Document integrity | Not enforced |
No tabs in content. | Users should not have to adjust tab settings in their editor to be able to read the content. | Not enforced |
Indentation of 2 spaces per level | Maximize readability | Not enforced |