Writing Javadoc for Lettuce
The complete, authoritative ruleset is .agents/docs/javadoc.md — read it before writing. This skill is the operating checklist; the doc wins on any detail.
Before you write
Is it a command interface? The command interfaces are hand-edited, with the sync interface's Javadoc as the reference text. Write or fix the comment on the sync method first, then mirror it to every flavor that declares the method, with the flavor-appropriate
@returnphrasing (RedisFuture,Mono/Flux, …):src/main/java/io/lettuce/core/api/{sync,async,reactive}/- the Kotlin coroutine interfaces (
src/main/kotlin/…/api/coroutines/) - the cluster node-selection interfaces
(
src/main/java/io/lettuce/core/cluster/api/{sync,async}/NodeSelection…) - the Sentinel interfaces (
src/main/java/io/lettuce/core/sentinel/api/…and their Kotlin flavor)
Javadoc parity is not test-enforced — keep the flavors in sync by hand. See api-consistency.md.
The rules most often gotten wrong
- Golden rule: document the caller-facing contract (inputs, outputs, effects, errors, nullability) — never implementation details or refactor rationale.
- First sentence: imperative verb for methods ("Append…", "Get…", "Remove…"), noun phrase for types. Not "This method…". Ends in a clean period.
- Tag order:
@param→@return→@throws→@author→@since→@see→@deprecated. @paramfor every parameter (type params<K>/<V>first); state nullability with the house phrasesmust not be {@code null}./can be {@code null}.@returnfor non-void; describe the value and its meaningful states, not the type.@sinceis a bare version —@since 7.7(see .agents/docs/javadoc.md for deriving the version from the build).@deprecated— keep the@Deprecatedannotation and the tag in sync; house form:@deprecated since <version>, use {@link Replacement} instead; scheduled for removal in a future major release.@authoron types only — the maintainer's name (an agent must not invent one); don't reorder existing authors.- Use
{@code null}for literals;{@link}only to types resolvable on the compile classpath (else{@code TypeName}).
Verify, don't guess
Match the surrounding file, and consult .agents/docs/javadoc.md for any subtle case
rather than inventing a rule. Javadoc lint is off in the build (<doclint>none</doclint>),
so review is the only check — get it right by hand.