SonarScanner for Gradle 7.3 fails with AGP 9 task-backed generated sources / KSP

Hi Sonar team,

we are migrating an Android Gradle project to AGP 9 and hit a blocker with SonarScanner for Gradle 7.3.0.8198.

The build fails during sonarResolver, before the actual SonarCloud analysis/upload starts. The failure seems to happen when the scanner resolves AGP source directories that include task-backed generated sources,
for example KSP-generated Kotlin sources.

Environment

  SonarScanner for Gradle: 7.3.0.8198
  Android Gradle Plugin: 9.2.0
  Gradle: 9.4.1
  Kotlin: 2.2.21
  KSP: 2.3.7
  JDK: 17

Actual result

  Execution failed for task ':<android-module>:sonarResolver'.
  > Querying the mapped value of provider(java.util.Set) before task ':<android-module>:kspDebugKotlin' has completed is not supported

Relevant stack trace excerpt:

  Caused by: org.gradle.api.InvalidUserCodeException:
  Querying the mapped value of provider(java.util.Set)
  before task ':<android-module>:kspDebugKotlin' has completed is not supported

  at org.gradle.api.internal.file.AbstractFileCollection.getFiles(AbstractFileCollection.java:124)
  at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:165)
  at org.sonarqube.gradle.SonarUtils.exists(SonarUtils.java:229)
  at org.sonarqube.gradle.SonarResolverTask.getAbsolutePaths(SonarResolverTask.java:165)
  at org.sonarqube.gradle.SonarResolverTask.run(SonarResolverTask.java:188)

Expected result

sonarResolver should not eagerly resolve task-backed generated source directory providers before their producer tasks have completed.

Either the scanner should avoid generated/task-backed source providers at this stage, or it should wire the required producer tasks as dependencies before resolving them.

Hello @matamegger,

Thank you for your feedback on the latest version of the scanner.

The SonarResolverTask does indeed seem to be missing dependencies on Android-related tasks registered by other plugins.
I have opened a ticket for us to address this issue.

Best regards,
Aurélien