Skip to content

Kotlin 2.3 / AGP 9 / Gradle 9 unsupported — both auto-mode and semanticdb-kotlinc fail #864

@ant013

Description

@ant013

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

  1. Roadmap signal — is Kotlin 2.3 / AGP 9 / Gradle 9 support being worked on internally? Public ETA?
  2. Workaround — any known config that bypasses both failure modes on this toolchain?
  3. 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!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions