Review the Java code I've selected or provided. Follow these steps:
Step 1 — Detect Java version
Check the project for pom.xml (look for <java.version> or <maven.compiler.source>) or build.gradle (look for sourceCompatibility). If not found, ask: "What Java version are you targeting? (8, 11, 17, 21, or other)"
Step 2 — Review for bugs and correctness
- Null safety: flag unguarded dereferences; suggest
Optional<T> (Java 8+) for values that may be absent
- Resource leaks: flag unclosed
InputStream, Connection, PreparedStatement; suggest try-with-resources
- equals/hashCode: if one is overridden without the other, flag it
- Collection mutation: flag modification of a collection while iterating over it
- Thread safety: flag shared mutable fields accessed from multiple threads without synchronization
- Off-by-one: review loop bounds and index access
Step 3 — Review naming and style
- Classes/interfaces: must be
PascalCase
- Methods/variables: must be
camelCase
- Constants (static final): must be
SCREAMING_SNAKE_CASE
- Flag single-letter variable names outside of loop counters (
i, j, k)
- Flag abbreviations that reduce clarity (e.g.,
usr → user, mgr → manager)
Step 4 — Review Java idioms (version-aware)
For each suggestion involving a version-gated feature, state: "Requires Java X+"
- Java 8+: suggest streams/lambdas over verbose imperative loops where clarity improves
- Java 8+: suggest try-with-resources for
Closeable resources
- Java 10+: suggest
var where the type is obvious from the right-hand side
- Java 16+: suggest records for classes that are pure data holders with no behaviour
- Java 17+: suggest sealed classes for fixed hierarchies; pattern matching for
instanceof chains
Step 5 — Review code smells
- Methods longer than 20 lines: suggest extracting to named helper methods
- Classes with more than one clear responsibility: suggest splitting
- Magic numbers/strings: suggest named constants
- Deep nesting (more than 3 levels): suggest early returns or extraction
Output format
Respond with:
- Summary — 1–2 sentences overall assessment
- Issues — grouped by severity:
- 🔴 Critical (bugs, resource leaks, thread safety)
- 🟡 Warning (naming, missing equals/hashCode, raw types)
- 🔵 Suggestion (idiom improvements, version-gated enhancements)
- Strengths — what is done well (at least one observation)
Be concise. Each issue: one sentence description + one-line fix example.
Next Steps
After completing this review, offer these follow-up actions based on findings:
- If structural issues found (long methods, god classes) → suggest running
/java-refactor
- If missing or inadequate tests found → suggest running
/java-test
- If security issues found (SQL concat, hardcoded secrets, weak crypto) → suggest delegating to the
java-security-reviewer agent
- If performance issues found (N+1, unbounded queries, String concatenation in loops) → suggest delegating to the
java-performance-reviewer agent
- If Javadoc is missing on public API → suggest running
/java-docs
1---2name: java-review3description: Reviews Java code for bugs, naming issues, code smells, and version-appropriate idioms. Use when user asks to "review this code", "check my Java", "look at this class", "find issues in", "code review", "what's wrong with this", or "review this file".4---56Review the Java code I've selected or provided. Follow these steps:78## Step 1 — Detect Java version9Check the project for `pom.xml` (look for `<java.version>` or `<maven.compiler.source>`) or `build.gradle` (look for `sourceCompatibility`). If not found, ask: "What Java version are you targeting? (8, 11, 17, 21, or other)"1011## Step 2 — Review for bugs and correctness12- **Null safety:** flag unguarded dereferences; suggest `Optional<T>` (Java 8+) for values that may be absent13- **Resource leaks:** flag unclosed `InputStream`, `Connection`, `PreparedStatement`; suggest try-with-resources14- **equals/hashCode:** if one is overridden without the other, flag it15- **Collection mutation:** flag modification of a collection while iterating over it16- **Thread safety:** flag shared mutable fields accessed from multiple threads without synchronization17- **Off-by-one:** review loop bounds and index access1819## Step 3 — Review naming and style20- Classes/interfaces: must be `PascalCase`21- Methods/variables: must be `camelCase`22- Constants (static final): must be `SCREAMING_SNAKE_CASE`23- Flag single-letter variable names outside of loop counters (`i`, `j`, `k`)24- Flag abbreviations that reduce clarity (e.g., `usr` → `user`, `mgr` → `manager`)2526## Step 4 — Review Java idioms (version-aware)27For each suggestion involving a version-gated feature, state: "Requires Java X+"28- Java 8+: suggest streams/lambdas over verbose imperative loops where clarity improves29- Java 8+: suggest try-with-resources for `Closeable` resources30- Java 10+: suggest `var` where the type is obvious from the right-hand side31- Java 16+: suggest records for classes that are pure data holders with no behaviour32- Java 17+: suggest sealed classes for fixed hierarchies; pattern matching for `instanceof` chains3334## Step 5 — Review code smells35- Methods longer than 20 lines: suggest extracting to named helper methods36- Classes with more than one clear responsibility: suggest splitting37- Magic numbers/strings: suggest named constants38- Deep nesting (more than 3 levels): suggest early returns or extraction3940## Output format41Respond with:421. **Summary** — 1–2 sentences overall assessment432. **Issues** — grouped by severity:44 - 🔴 **Critical** (bugs, resource leaks, thread safety)45 - 🟡 **Warning** (naming, missing equals/hashCode, raw types)46 - 🔵 **Suggestion** (idiom improvements, version-gated enhancements)473. **Strengths** — what is done well (at least one observation)4849Be concise. Each issue: one sentence description + one-line fix example.5051## Next Steps52After completing this review, offer these follow-up actions based on findings:53- If structural issues found (long methods, god classes) → suggest running `/java-refactor`54- If missing or inadequate tests found → suggest running `/java-test`55- If security issues found (SQL concat, hardcoded secrets, weak crypto) → suggest delegating to the `java-security-reviewer` agent56- If performance issues found (N+1, unbounded queries, String concatenation in loops) → suggest delegating to the `java-performance-reviewer` agent57- If Javadoc is missing on public API → suggest running `/java-docs`