java-code-upgrade

Upgrade Java code from older idioms to modern equivalents. Scans for legacy patterns (pre-Java 10 through Java 25) across language features, collections, strings, streams, concurrency, input/output, error handling, date/time, security, tooling, and enterprise APIs, then suggests modern replacements with before/after examples. Use when modernizing Java codebases, reviewing pull requests for outdated patterns, or migrating from Java EE to Jakarta EE. Do not use for non-Java languages, build tool configuration, or framework-specific application logic.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "java-code-upgrade" with this command: npx skills add darshitpp/java-code-upgrade/darshitpp-java-code-upgrade-java-code-upgrade

Java Evolved — Code Upgrade Skill

Modernize Java code by identifying legacy patterns and suggesting modern replacements with before/after examples sourced from 113 patterns across 11 categories (Java 7 through Java 25).

Procedures

Step 1: Determine Upgrade Scope

  1. Identify the target JDK version for the project. Check pom.xml, build.gradle, or .java-version for the configured source/target level. If unspecified, ask the user.
  2. Identify which categories are relevant to the task:
    • language — var, records, sealed classes, pattern matching, switch expressions, text blocks
    • collections — immutable factories, sequenced collections, unmodifiable collectors
    • strings — isBlank, strip, repeat, lines, formatted, text blocks
    • streams — toList, mapMulti, gatherers, takeWhile/dropWhile, optional improvements
    • concurrency — virtual threads, structured concurrency, scoped values, stable values
    • io — HTTP client, Files API, Path.of, transferTo, memory-mapped files
    • errors — helpful NPE, multi-catch, optional chaining, null-in-switch
    • datetime — java.time API, Duration/Period, HexFormat, Math.clamp
    • security — PEM encoding, KDF, strong random, TLS defaults
    • tooling — JShell, single-file execution, JFR, AOT preloading
    • enterprise — EJB to CDI, Servlet to JAX-RS, JDBC to JPA/jOOQ, SOAP to REST, Spring modernization
  3. If performing a full codebase scan, proceed to Step 2. If upgrading specific code, skip to Step 3.

Step 2: Scan for Legacy Patterns

  1. Read references/detection-patterns.md to load the detection signature database.
  2. For each relevant category, search the codebase for the detection signatures listed:
    • Use grep/search for the specific code patterns documented (e.g., Collections.unmodifiableList, new Thread(, .trim().isEmpty())
    • Track each match with file path, line number, and matched pattern slug.
  3. Execute python3 scripts/find-pattern.py --data-dir references/ --category {cat} --max-jdk {target} --format full to retrieve the complete before/after transformation for each detected pattern.
  4. Group findings by priority:
    • Quick wins: beginner difficulty, drop-in replacements (e.g., var, List.of(), String.isBlank())
    • Moderate: intermediate difficulty, may require testing (e.g., records, sealed classes, virtual threads)
    • Significant: advanced difficulty, architectural changes (e.g., structured concurrency, enterprise migrations)
  5. Format results using assets/upgrade-report-template.md.

Step 3: Upgrade Specific Code

  1. Identify which legacy pattern the code uses. If unsure, read references/detection-patterns.md and match against the code.
  2. Look up the specific pattern by executing: python3 scripts/find-pattern.py --data-dir references/ --keyword "{pattern_name}" --format full
  3. Read the relevant category reference file from references/{category}.md for the complete transformation including:
    • Before/after code examples
    • Explanation of why the modern approach is better
    • JDK version requirements
    • Related patterns to consider alongside
  4. Apply the transformation following the modern code example. Adapt to the specific codebase context — do not blindly copy-paste.
  5. Check for related patterns that often co-occur. The reference files list related patterns for each entry.

Step 4: Enterprise Migration Path

If the codebase involves Java EE or early Jakarta EE, read references/enterprise.md for the complete migration mappings:

  • EJB to CDI beans
  • Servlet to JAX-RS endpoints
  • JSF managed beans to CDI named beans
  • JNDI lookups to CDI injection
  • JPA EntityManager to Jakarta Data repositories
  • SOAP web services to Jakarta REST
  • Message-driven beans to reactive messaging
  • Manual transactions to declarative @Transactional
  • Spring XML configuration to annotation-driven
  • Spring null safety to JSpecify

Step 5: Validate Upgrades

  1. Verify the target JDK version supports all applied patterns. Each pattern specifies its minimum JDK version.
  2. Ensure no pattern requires a JDK version higher than the project target.
  3. Run the project's existing test suite to confirm no regressions.
  4. For patterns marked as preview features, verify the project enables preview: --enable-preview.

Quick Reference by JDK Version

JDKKey Patterns
7multi-catch, diamond operator
8default/static interface methods, streams, CompletableFuture, java.time
9List/Set/Map.of(), Optional.or/ifPresentOrElse, private interface methods, Stream.ofNullable/takeWhile/dropWhile, process API
10var, unmodifiable copy, Optional.orElseThrow
11String.isBlank/strip/repeat/lines, HTTP client, Path.of, single-file execution, Predicate.not
12String.indent/transform, Files.mismatch, Collectors.teeing
14switch expressions, helpful NPE
15text blocks, String.formatted
16records, Stream.toList, mapMulti, unmodifiable collectors, record-based errors, static members in inner classes
17sealed classes, RandomGenerator, HexFormat
18built-in HTTP server
19executor try-with-resources, Thread.sleep(Duration)
21virtual threads, pattern matching (instanceof + switch), sequenced collections, unnamed variables, guarded patterns, null-in-switch, Math.clamp
22unnamed variables, multi-file source, FFM API (call C from Java), file memory mapping
23markdown Javadoc
24stream gatherers
25structured concurrency, scoped values, stable values, flexible constructors, compact source files, module imports, primitive patterns, AOT preloading, PEM encoding, KDF, IO class

Error Handling

  • If scripts/find-pattern.py fails with a file-not-found error, verify the --data-dir points to the references/ directory containing the category markdown files.
  • If a pattern requires a JDK version higher than the project target, flag it as "future upgrade" rather than applying it.
  • If the YAML data files are missing, the reference markdown files in references/ contain all pattern data and can be used directly without the script.
  • If a detection signature matches but the code context differs from the pattern (e.g., intentional use of old API), skip the suggestion and note why.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Security

compliance-evidence-assembler

把审计所需证据整理成目录、清单和缺失项,便于后续评审。;use for compliance, evidence, audit workflows;do not use for 伪造证据, 替代正式审计结论.

Archived SourceRecently Updated
Security

skillguard-hardened

Security guard for OpenClaw skills, developed and maintained by rose北港(小红帽 / 猫猫帽帽). Audits installed or incoming skills with local rules plus Zenmux AI intent review, then recommends pass, warn, block, or quarantine.

Archived SourceRecently Updated
Security

api-contract-auditor

审查 API 文档、示例和字段定义是否一致,输出 breaking change 风险。;use for api, contract, audit workflows;do not use for 直接改线上接口, 替代契约测试平台.

Archived SourceRecently Updated