Skip to content

docs: implementation plan for completing the Kotlin refactor#389

Draft
tony19 wants to merge 2 commits into
mainfrom
claude/kotlin-refactor-plan-uknqh4
Draft

docs: implementation plan for completing the Kotlin refactor#389
tony19 wants to merge 2 commits into
mainfrom
claude/kotlin-refactor-plan-uknqh4

Conversation

@tony19

@tony19 tony19 commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Summary

Adds KOTLIN_REFACTOR_PLAN.md: a detailed implementation plan for completing the Kotlin refactor started in #388.

Contents:

  • Current state — codebase inventory (403 Java main sources remaining vs. 8 converted Kotlin files), what PR refactor: modern Kotlin for the Android layer + AGP 8 / SDK 35 build modernization #388 delivered, and exactly what's still blocking it (CircleCI test/test_app, Codacy gate).
  • Scope decision (§2) — stop at the Android layer vs. convert the upstream-derived core; recommends full conversion (Option B) since upstream logback 1.2.x is EOL and textual diffability was already impractical, but flags it as needing maintainer sign-off.
  • Strategies (§3) — behavior preservation as the prime directive (nullable-by-default at public boundaries, no !!/lateinit on Joran-injected properties), small always-green batch PRs with a two-commit convention (mechanical J2K, then idiomatization), guardrails before conversion (binary-compatibility-validator baseline + CI gate, committed A/B regression harness, ktlint), and keeping the 382 Java tests as the interop oracle.
  • Phased roadmap (§4) — Phase 0 lands refactor: modern Kotlin for the Android layer + AGP 8 / SDK 35 build modernization #388; Phase 1 adds guardrails; Phase 2 converts core/classic bottom-up by dependency in 14 batches (leaf utils first; joran, net, classic root, and org.slf4j.impl last) with per-batch risk notes; Phases 3–4 cover idiomatization polish and a 4.0.0 release.
  • Per-file checklist (§5) — Joran reflection compatibility (getter/setter shapes, adders, no-arg constructors, FQCN stability), Java interop (@JvmStatic/@JvmField/@JvmName/fun interface/@Throws/open), serialization (serialVersionUID, readObject/writeObject), and concurrency (@Synchronized, @Volatile, wait/notify, interrupt semantics).
  • Risk register (§6) and open questions for the maintainer (§8).

Verification

Documentation-only change; no code or build files touched.

🤖 Generated with Claude Code

https://claude.ai/code/session_01C7WWeQEowUbf7mnmFpqvAM


Generated by Claude Code

claude and others added 2 commits July 7, 2026 07:22
Documents the current state of the modernization effort (PR #388), the
strategic decision on conversion scope, a phased package-by-package
roadmap with risk notes, a per-file conversion checklist covering Joran
reflection, Java interop, serialization, and concurrency compatibility,
plus a risk register and open questions for the maintainer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7WWeQEowUbf7mnmFpqvAM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants