2.3 KiB
2.3 KiB
Java Style Guide
This guide defines Java conventions for the MXAccess Gateway Java client library, CLI, and tests.
Baseline
- Target the Java version defined by the client build, with Java 21 preferred.
- Use Gradle unless the repository standardizes on Maven.
- Apply a formatter such as Spotless or Google Java Format when configured.
- Keep generated protobuf code separate from handwritten wrappers.
Source Documentation
- Maintain the existing documentation style in the file, package, and surrounding component.
- Write comments that include business-specific or domain-specific context when that context is available from the code, surrounding docs, or naming.
- Use Javadoc for public APIs when behavior, parity constraints, or security requirements are not obvious from the signature.
- Avoid comments that restate syntax or control flow.
Packages
- Use lowercase package names under
com.dohertylan.mxgateway. - Keep client library code separate from CLI code.
- Keep generated protobuf classes in a generated package.
- Do not expose implementation-only transport helpers as public API.
Naming
- Use
PascalCasefor classes, records, interfaces, and enums. - Use
camelCasefor methods, fields, parameters, and local variables. - Use
UPPER_SNAKE_CASEfor constants. - Use MXAccess terms consistently:
serverHandle,itemHandle,mxStatusProxy, andhResult.
API Design
- Prefer immutable options objects with builders for public configuration.
- Implement
AutoCloseablefor clients and sessions that own resources. - Provide async methods with
CompletableFuturewhere useful, but keep a blocking API for simple CLI workflows. - Expose raw generated protobuf messages where parity tests need them.
Errors
- Use typed exceptions for gateway, authentication, authorization, session, worker, command, and MXAccess failures.
- Preserve raw command replies in command exceptions when available.
- Redact API keys, passwords, and secured write values in
toString, logs, and CLI output.
Streaming
- Cancel gRPC calls explicitly when callers stop consuming streams.
- Do not reorder, coalesce, or drop events in client code.
- Avoid unbounded queues in async stream helpers.
Tests
- Use JUnit 5.
- Use in-process gRPC servers for unit tests.
- Keep live gateway tests behind
MXGATEWAY_INTEGRATION=1and JUnit assumptions.