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

Wanted to call out a slightly different occurrence of this error that we are seeing in case it is a different fix.

Execution failed for task ‘:app:sonarResolver’.

Querying the mapped value of list(interface java.util.Collection, item(list(interface org.gradle.api.file.Directory, [/builds/myveeva-clinicaltrials/android/app/src/main/res])) + item(list(interface org.gradle.api.file.Directory, [/builds/myveeva-clinicaltrials/android/app/src/devglobal/res])) + item(list(interface org.gradle.api.file.Directory, [/builds/myveeva-clinicaltrials/android/app/src/debug/res])) + item(list(interface org.gradle.api.file.Directory, [])) + item(list(interface org.gradle.api.file.Directory, [/builds/myveeva-clinicaltrials/android/app/src/devglobalDebug/res])) + item(list(interface org.gradle.api.file.Directory, item(flatmap(provider(task ‘processDevglobalDebugGoogleServices’, class com.google.gms.googleservices.GoogleServicesTask))))) + item(list(interface org.gradle.api.file.Directory, item(flatmap(provider(task ‘injectCrashlyticsVersionControlInfoDevglobalDebug’, class com.google.firebase.crashlytics.buildtools.gradle.tasks.InjectVersionControlInfoTask))))) + item(list(interface org.gradle.api.file.Directory, item(flatmap(provider(task ‘injectCrashlyticsMappingFileIdDevglobalDebug’, class com.google.firebase.crashlytics.buildtools.gradle.tasks.InjectMappingFileIdTask)))))) before task ‘:app:processDevglobalDebugGoogleServices’ has completed is not supported

A new version has been released with the fix: Release 7.3.1.8318 · SonarSource/sonar-scanner-gradle · GitHub