Summary
scip-java (latest stable v0.12.3, Aug 2024) cannot index modern Android projects using AGP 9 + Gradle 9 + Kotlin 2.3 in either auto-mode or manual semanticdb-kotlinc mode. The combination AGP 9 / Kotlin 2.3 became mainline in Q1 2026 (e.g., unstoppable-wallet-android master upgraded to AGP 9.1 on 2026-02-12) and projects using it currently have no working SCIP indexing path.
Toolchain (failure repro)
- AGP: 9.1.0
- Gradle: 9.3.1
- Kotlin: 2.3.10
- KSP: 2.3.2
- JVM: 21
- scip-java: 0.12.3
- semanticdb-kotlinc: 0.6.0
- OS: macOS 14 / Apple Silicon
Real-world example: https://github.com/horizontalsystems/unstoppable-wallet-android master (currently on AGP 9.1.0).
Failure 1 — Auto-mode
Command: scip-java index --output index.scip
> Task :app-mini:scipPrintDependencies FAILED
> java.util.ConcurrentModificationException (no error message)
The Sourcegraph SemanticdbGradlePlugin enumeration of project configurations triggers a ConcurrentModificationException during the :scipPrintDependencies task. Workarounds attempted (none successful):
- Trailing
-- --no-parallel --no-daemon — flags swallowed before reaching scipPrintDependencies
- Trailing
-- --stacktrace — scip-java falls back to gradle help task instead
Failure 2 — Manual semanticdb-kotlinc mode
Switching to manual mode by adding the kotlinc compiler plugin:
dependencies {
kotlinCompilerPluginClasspath("com.sourcegraph:semanticdb-kotlinc:0.6.0")
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask<*>>().configureEach {
compilerOptions.freeCompilerArgs.addAll(
"-P=plugin:semanticdb-kotlinc:sourceroot=${rootProject.projectDir.absolutePath}",
"-P=plugin:semanticdb-kotlinc:targetroot=${semanticdbTargetRoot.get().asFile.absolutePath}",
)
}
Result:
java.lang.AbstractMethodError: Receiver class com.sourcegraph.semanticdb_kotlinc.AnalyzerRegistrar
does not define or inherit an implementation of the resolved method
'abstract java.lang.String getPluginId()'
of abstract class org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.
at org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser.loadPluginsLegacyStyle(PluginCliParser.kt:246)
Root cause: Kotlin 2.3.x changed the CompilerPluginRegistrar abstract class to require an abstract fun getPluginId(): String. semanticdb-kotlinc 0.6.0 (released Sept 2025, pre-Kotlin 2.3) does not implement this method.
Fix size estimate
- semanticdb-kotlinc: implement
override fun getPluginId(): String = "semanticdb-kotlinc" in AnalyzerRegistrar. Likely also need a KOTLIN_VERSION_GTE_2_3 compile-time check or version matrix bump. ~20-50 LOC + tests.
- scip-java Gradle plugin: investigate
ConcurrentModificationException in scipPrintDependencies. AGP 9 may iterate Gradle Configuration collections differently; need defensive copy or use Configuration.toList() before iteration. ~50-100 LOC + integration test.
Why this is becoming urgent
- AGP 9.1 went stable in Q1 2026
- Kotlin 2.3 is mainline since late 2025
- Major Android projects (e.g., unstoppable-wallet-android, modern Compose-first apps) are migrating
- Sourcegraph Code Search and any downstream tooling using scip-java cannot index these projects
- No mention of Kotlin 2.3 / AGP 9 in current open issues — wanted to flag explicitly
Asks
- Roadmap signal — is Kotlin 2.3 / AGP 9 / Gradle 9 support being worked on internally? Public ETA?
- Workaround — any known config that bypasses both failure modes on this toolchain?
- Contribution welcome — if maintainers are open to community PRs for the two fixes above, happy to coordinate.
Repro fixture available at https://github.com/ant013/Gimle-Palace (services/palace-mcp/tests/extractors/fixtures/uw-android-mini-project — feature/GIM-127-android-scip-java-validation branch, commit 5f816f9).
Thanks for the work on scip-java!
Summary
scip-java(latest stable v0.12.3, Aug 2024) cannot index modern Android projects using AGP 9 + Gradle 9 + Kotlin 2.3 in either auto-mode or manual semanticdb-kotlinc mode. The combination AGP 9 / Kotlin 2.3 became mainline in Q1 2026 (e.g.,unstoppable-wallet-androidmaster upgraded to AGP 9.1 on 2026-02-12) and projects using it currently have no working SCIP indexing path.Toolchain (failure repro)
Real-world example: https://github.com/horizontalsystems/unstoppable-wallet-android master (currently on AGP 9.1.0).
Failure 1 — Auto-mode
Command:
scip-java index --output index.scipThe Sourcegraph
SemanticdbGradlePluginenumeration of project configurations triggers aConcurrentModificationExceptionduring the:scipPrintDependenciestask. Workarounds attempted (none successful):-- --no-parallel --no-daemon— flags swallowed before reaching scipPrintDependencies-- --stacktrace— scip-java falls back togradle helptask insteadFailure 2 — Manual semanticdb-kotlinc mode
Switching to manual mode by adding the kotlinc compiler plugin:
dependencies { kotlinCompilerPluginClasspath("com.sourcegraph:semanticdb-kotlinc:0.6.0") } tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask<*>>().configureEach { compilerOptions.freeCompilerArgs.addAll( "-P=plugin:semanticdb-kotlinc:sourceroot=${rootProject.projectDir.absolutePath}", "-P=plugin:semanticdb-kotlinc:targetroot=${semanticdbTargetRoot.get().asFile.absolutePath}", ) }Result:
Root cause: Kotlin 2.3.x changed the
CompilerPluginRegistrarabstract class to require anabstract fun getPluginId(): String.semanticdb-kotlinc 0.6.0(released Sept 2025, pre-Kotlin 2.3) does not implement this method.Fix size estimate
override fun getPluginId(): String = "semanticdb-kotlinc"inAnalyzerRegistrar. Likely also need aKOTLIN_VERSION_GTE_2_3compile-time check or version matrix bump. ~20-50 LOC + tests.ConcurrentModificationExceptioninscipPrintDependencies. AGP 9 may iterate GradleConfigurationcollections differently; need defensive copy or useConfiguration.toList()before iteration. ~50-100 LOC + integration test.Why this is becoming urgent
Asks
Repro fixture available at https://github.com/ant013/Gimle-Palace (services/palace-mcp/tests/extractors/fixtures/uw-android-mini-project —
feature/GIM-127-android-scip-java-validationbranch, commit5f816f9).Thanks for the work on scip-java!