Skip to content

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

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions