# Style Guidelines
Thank you for your interest in contributing to our project. We greatly value feedback and contributions from our community.
Please read through this document before submitting any pull requests to ensure all code requirements have been met so
we can effectively respond to your contribution.
## Automated Verification
The core rules that must be followed are automatically enforced by Checkstyle (see
[checkstyle.xml](config/checkstyle/checkstyle.xml) for specific rules). This is run as part of the build process on GitHub
automatically and any failures will need to be fixed. Beyond that, we have a number of best practices and guidelines to
follow.
## Best Practices
### Names
Class, parameter, and variable names should be descriptive of what they contain. Except for iterators inside `for` loops, single character
names should be avoided. By looking at the method signature, another developer should be able to have a general idea of
what the method is doing and what each parameter contains without having to look at surrounding code.
### Encapsulation for Type Safety
Type safety is one of the cornerstones of security in programming languages. It's what prevents you from using an integer
as a pointer or indexing off the end of an array. Java was designed with type safety in mind. At compile time, a static
byte code verifier is run to ensure correct type information in as many locations as possible. The points it can't verify
are turned into dynamic checks at runtime using the class tag that exists in memory with every object.
To reduce the risk of developer errors, we encapsulate our data types, even if it is a single string (see
[ColumnHeader](c3r-sdk-core/src/main/java/com/amazonaws/c3r/config/ColumnHeader.java) as an example).
### Unchecked Exceptions
As a practice, we do not include unchecked exceptions (`java.lang.RuntimeException` and any subclasses) as part of the
method or constructor's `throws` clause which is
[standard practice](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/RuntimeException.html). They
are included as part of the Javadoc for the method or constructor, however. Checked exceptions should always be part of
the `throws` clause and the Javadoc.
### Javadocs
All non-test Java code requires a Javadoc, regardless of the visibility. Checkstyle enforces the majority of the rules
around what must be in a Javadoc but there are several style preferences:
- `{@code text}` is preferred over `text
` for readability purposes
- When listing a set of requirements or specifications, use `