GlobalScope survives lifecycle
Work continues after UI or request scope ends. Tie jobs to structured scope tied to caller lifecycle.
Before
GlobalScope.launch { repo.fetchAll() }Suggested direction
viewModelScope.launch { repo.fetchAll() }Kotlin blends null-safe types, coroutines, and JVM interop in Android apps and Spring services alike. CodeCritic reviews your diff with focus on suspension points, platform types from Java libraries, and sealed hierarchies that compile until an unhandled branch reaches production.
Review focus
Kotlin compiler catches many null mistakes; it does not explain why a `GlobalScope.launch` loses structured concurrency or why a Java DTO nullability annotation lied. The model targets those integration gaps.
AI review does not replace Play Store policy review, penetration testing, or JVM/Android performance profiling. Use it as a fast second pass before owners approve merge.
Stacks
Navigation argument type safety, Room migrations without fallback, and WorkManager constraints that never run on metered networks when intended.
Ktor route authentication order, Exposed DSL transactions spanning network I/O, and Gradle version catalogs pinning mismatched kotlinx versions.
Extension functions shadowing Java methods, SAM conversions hiding checked exceptions, and Kotlin collections exposed as mutable Java lists.
Workflow
Sign up, open a new review, and paste a coroutine-backed class or REST handler. Connect GitHub to target PRs with Kotlin changes.
CodeCritic reads Android, Ktor, and Spring imports so findings reference the runtime you ship, not textbook Kotlin samples.
Issues arrive grouped with short explanations. Fix concurrency and null-boundary risks before debating naming.
Enable GitHub integration so the same engine comments on pull requests your team already merges through.
How to use it
Paste a vertical slice: a repository method with its DAO or API client, or a ViewModel with the use case it calls.
Keep detekt and Android Lint in CI. CodeCritic targets reasoning: "this flow collector outlives the lifecycle" beats import ordering.
When mixing Java and Kotlin in one diff, include the Java signature so reviewers understand platform type assumptions.
GitHub integration anchors comments on the diff your team already discusses in review threads.
Paid tiers add API automation when every push to a shared KMP module should trigger the same scan.
Validate coroutine and threading findings with a small instrumented test - AI can miss custom dispatchers installed in test fixtures only.
Details: Integrations, Limitations, Pricing.
Code patterns
Small slices from real PRs. Paste similar units in the browser or run on the GitHub diff that contains them.
fun load() {
GlobalScope.launch { repo.fetchAll() }
}Sample findings
Work continues after UI or request scope ends. Tie jobs to structured scope tied to caller lifecycle.
Before
GlobalScope.launch { repo.fetchAll() }Suggested direction
viewModelScope.launch { repo.fetchAll() }Illustrative patterns from real review categories. Your output depends on diff size, language, and context.
FAQ
Start free in the browser, then connect GitHub when the team wants reviews on every pull request.