Kotlin Sensor too slow

We use SonarCloud to analyse our Android mobile app. The mobile app is written in Kotlin and the Kotlin sensor is unbearably slow.

Below the logging of one module containing 1119 source files. Analysis of one single module of the app takes around 20 minutes.

Are there any changes we can make to improve performance? And are there any plans to make analysis times comparable to for example Java projects? If not, we simply cannot continue to pay for this service. Fast feedback on PR’s is essential for us.

We already increased the heap up to 4gb and tried several workarounds like settings sonar.java.binaries and sonar.java.libraries to an empty value but no luck so far.

People with similar problems:

20:11:08 35/1119 files analyzed, current file: …
20:11:18 82/1119 files analyzed, current file: …
20:11:28 137/1119 files analyzed, current file: …
20:11:38 180/1119 files analyzed, current file: …
20:11:48 207/1119 files analyzed, current file: …
20:11:58 231/1119 files analyzed, current file: …
20:12:08 266/1119 files analyzed, current file: …
20:12:18 299/1119 files analyzed, current file: …
20:12:28 336/1119 files analyzed, current file: …
20:12:38 365/1119 files analyzed, current file: …
20:12:48 380/1119 files analyzed, current file: …
20:12:58 409/1119 files analyzed, current file: …
20:13:08 425/1119 files analyzed, current file: …
20:13:18 431/1119 files analyzed, current file: …
20:13:28 446/1119 files analyzed, current file: …
20:13:38 458/1119 files analyzed, current file: …
20:13:48 472/1119 files analyzed, current file: …
20:13:58 491/1119 files analyzed, current file: …
20:14:08 505/1119 files analyzed, current file: …
20:14:18 520/1119 files analyzed, current file: …
20:14:28 529/1119 files analyzed, current file: …
20:14:38 543/1119 files analyzed, current file: …
20:14:48 556/1119 files analyzed, current file: …
20:14:58 563/1119 files analyzed, current file: …
20:15:08 577/1119 files analyzed, current file: …
20:15:18 585/1119 files analyzed, current file: …
20:15:28 604/1119 files analyzed, current file: …
20:15:38 619/1119 files analyzed, current file: …
20:15:48 630/1119 files analyzed, current file: …
20:15:58 641/1119 files analyzed, current file: …
20:16:08 647/1119 files analyzed, current file: …
20:16:18 653/1119 files analyzed, current file: …
20:16:28 660/1119 files analyzed, current file: …
20:16:38 669/1119 files analyzed, current file: …
20:16:48 672/1119 files analyzed, current file: …
20:16:58 684/1119 files analyzed, current file: …
20:17:08 689/1119 files analyzed, current file: …
20:17:18 694/1119 files analyzed, current file: …
20:17:28 699/1119 files analyzed, current file: …
20:17:38 709/1119 files analyzed, current file: …
20:17:48 722/1119 files analyzed, current file: …
20:17:58 735/1119 files analyzed, current file: …
20:18:08 753/1119 files analyzed, current file: …
20:18:18 760/1119 files analyzed, current file: …
20:18:28 770/1119 files analyzed, current file: …
20:18:38 774/1119 files analyzed, current file: …
20:18:48 785/1119 files analyzed, current file: …
20:18:58 795/1119 files analyzed, current file: …
20:19:08 798/1119 files analyzed, current file: …
20:19:18 806/1119 files analyzed, current file: …
20:19:28 811/1119 files analyzed, current file: …
20:19:38 823/1119 files analyzed, current file: …
20:19:48 825/1119 files analyzed, current file: …
20:19:58 826/1119 files analyzed, current file: …
20:20:08 833/1119 files analyzed, current file: …
20:20:18 835/1119 files analyzed, current file: …
20:20:28 841/1119 files analyzed, current file: …
20:20:38 849/1119 files analyzed, current file: …
20:20:48 853/1119 files analyzed, current file: …
20:20:58 860/1119 files analyzed, current file: …
20:21:08 874/1119 files analyzed, current file: …
20:21:18 875/1119 files analyzed, current file: …
20:21:28 881/1119 files analyzed, current file: …
20:21:38 884/1119 files analyzed, current file: …
20:21:48 894/1119 files analyzed, current file: …
20:21:58 901/1119 files analyzed, current file: …
20:22:08 911/1119 files analyzed, current file: …
20:22:18 916/1119 files analyzed, current file: …
20:22:28 916/1119 files analyzed, current file: …
20:22:38 918/1119 files analyzed, current file: …
20:22:48 924/1119 files analyzed, current file: …
20:22:58 932/1119 files analyzed, current file: …
20:23:08 933/1119 files analyzed, current file: …
20:23:18 942/1119 files analyzed, current file: …
20:23:28 944/1119 files analyzed, current file: …
20:23:38 946/1119 files analyzed, current file: …
20:23:48 946/1119 files analyzed, current file: …
20:23:58 947/1119 files analyzed, current file: …
20:24:08 948/1119 files analyzed, current file: …
20:24:18 951/1119 files analyzed, current file: …
20:24:28 961/1119 files analyzed, current file: …
20:24:38 968/1119 files analyzed, current file: …
20:24:48 972/1119 files analyzed, current file: …
20:24:58 980/1119 files analyzed, current file: …
20:25:08 993/1119 files analyzed, current file: …
20:25:18 1002/1119 files analyzed, current file: …
20:25:28 1006/1119 files analyzed, current file: …
20:25:38 1011/1119 files analyzed, current file: …
20:25:48 1011/1119 files analyzed, current file: …
20:25:58 1013/1119 files analyzed, current file: …
20:26:08 1016/1119 files analyzed, current file: …
20:26:18 1020/1119 files analyzed, current file: …
20:26:28 1022/1119 files analyzed, current file: …
20:26:38 1028/1119 files analyzed, current file: …
20:26:48 1030/1119 files analyzed, current file: …
20:26:58 1036/1119 files analyzed, current file: …
20:27:08 1043/1119 files analyzed, current file: …
20:27:18 1049/1119 files analyzed, current file: …
20:27:28 1049/1119 files analyzed, current file: …
20:27:38 1064/1119 files analyzed, current file: …
20:27:48 1064/1119 files analyzed, current file: …
20:27:58 1067/1119 files analyzed, current file: …
20:28:08 1077/1119 files analyzed, current file: …
20:28:18 1088/1119 files analyzed, current file: …
20:28:28 1096/1119 files analyzed, current file: …
20:28:38 1100/1119 files analyzed, current file: …
20:28:48 1100/1119 files analyzed, current file: …
20:28:58 1100/1119 files analyzed, current file: …
20:29:08 1103/1119 files analyzed, current file: …
20:29:18 1109/1119 files analyzed, current file: …
20:29:28 1112/1119 files analyzed, current file: …
20:29:31 1119/1119 source files have been analyzed

Hello Tim, welcome to the community!

Thank you for your report. I need some more information to be able to dig deeper into your problem. Which build system are you using? If you are using Gradle, could you re-build your project with the following command:
gradle clean build sonarqube --no-build-cache --info

Are you able to share the resulting analysis log (possible via a private channel)? In case that this is not an option for you, save the log in a file called sonar_build.log, execute the following two commands based on the log and let us know what the output is.

Compilation:
cat sonar_build.log | grep compileKotlin | grep "Took" | sed 's/.* Took \(.*\) secs./\1/' | awk '{sum+=$1} END {print (sum/60) " min"}'

Sensor:
cat sonar_build.log | grep "Kotlin Sensor" | grep "done" | sed 's/.* time=\(.*\)ms/\1/' | awk '{sum+=$1} END {print (sum/1000/60) " min"}'

I’ll provide the full log using the private channel.

Here are the results you asked for already:

grep compileKotlin | **grep** "Took" | **sed** 's/.* Took \(.*\) secs./\1/' | **awk** '{sum+=$1} END {print (sum/60) " min"}'
1.11548 min

grep "Kotlin Sensor" | **grep** "done" | **sed** 's/.* time=\(.*\)ms/\1/' | **awk** '{sum+=$1} END {print (sum/1000/60) " min"}'
25.0907 min

Ran it a second time with the heap increased from 3gb to 4gb:

grep compileKotlin | **grep** "Took" | **sed** 's/.* Took \(.*\) secs./\1/' | **awk** '{sum+=$1} END {print (sum/60) " min"}'
0.06295 min

grep "Kotlin Sensor" | **grep** "done" | **sed** 's/.* time=\(.*\)ms/\1/' | **awk** '{sum+=$1} END {print (sum/1000/60) " min"}'
22.0502 min

Thank you for the information so far! We would like to investigate a bit further and need some more information.

  • In the second run the compileKotlin step seems surprisingly fast with 0.06295 min, also compared to the first run. Are you sure you performed a clean on the project and no caching was used during the build?
  • Since when are you experiencing these issues? Has it been faster in the past?
  • Please try scanning with an empty quality profile. No findings should be reported. How long does it take?
  • Could you try setting the following parameters to an empty string (with the regular quality profile):
    sonar.java.binaries=
    sonar.java.libraries=
    
    Any difference in runtime?

We will try to investigate further with more information. Also, if you notice any particular files slowing down the analysis in particular, it could help to see these files (or a modified reproducer to not share private source code).

Are you sure you performed a clean on the project and no caching was used during the build?

Good point, I’m sure I disabled the cache but I’m not so sure I did the clean so I just re-ran the build.

Results:
Compilation: 1.16142 min
Sensor: 24.2834 min

Since when are you experiencing these issues? Has it been faster in the past?

Unfortunately our build history is limited so I can’t find an exact moment where this deteriorated. But I am 100% sure that it was faster when we started using SonarCloud over 1 year ago.

Please try scanning with an empty quality profile.

Results:
Sensor: 21.921 min

Could you try setting the following parameters to an empty string

We already did that before, based on the other posts on the community forum here without any luck. But we re-ran the build just now and these are the

Results:
Sensor: 23.7262 min

Any difference in runtime?

I’m pretty sure the Android codebase was using Java 8 when we first started using SonarCloud for this project and now they are on Java 11. Also the amount of Kotlin code probably increased over time.

I noticed today in the log that for one file, the analysis can take up to 30 seconds:

20:40:22 920/1129 files analyzed, current file: app/src/main/kotlin/…/StartUrlIntentActivity.kt
20:40:32 925/1129 files analyzed, current file: app/src/main/kotlin/…/MoreMenuFragment.kt
20:40:42 925/1129 files analyzed, current file: app/src/main/kotlin/…/MoreMenuFragment.kt
20:40:52 925/1129 files analyzed, current file: app/src/main/kotlin/…/MoreMenuFragment.kt
20:41:02 932/1129 files analyzed, current file: app/src/main/kotlin/…/RequestCreditCardScoringInfoActivity.kt

The file is 911 lines long which is a little long for my personal taste but still, 30 seconds seems unreasonable. I’ll provide a copy of this specific class via the private channel.

I took thread dumps every 10 seconds during the sonarqube gradle task. All thread dumps look the same. They all seem to be busy in java.util.AbstractList$Itr.hasNext. I can only assume that this list must be huge …

"Execution worker for ':' Thread 4" #67 prio=5 os_prio=0 cpu=585283.73ms elapsed=1182.25s tid=0x00007f8f92344000 nid=0xeaf runnable  [0x00007f8f41b75000]
   java.lang.Thread.State: RUNNABLE
	at java.util.AbstractList$Itr.hasNext(java.base@11.0.12/AbstractList.java:364)
	at org.jetbrains.kotlin.load.kotlin.JvmPackagePartProviderBase.getAnnotationsOnBinaryModule(JvmPackagePartProviderBase.kt:96)
	at org.jetbrains.kotlin.cli.jvm.compiler.CliModuleAnnotationsResolver.getAnnotationsOnContainingModule(CliModuleAnnotationsResolver.kt:26)
	at org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker$Companion.loadExperimentalities(ExperimentalUsageChecker.kt:229)
	at org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker$Companion.loadExperimentalities$default(ExperimentalUsageChecker.kt:169)
	at org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker$ClassifierUsage.check(ExperimentalUsageChecker.kt:412)
	at org.jetbrains.kotlin.resolve.checkers.ClassifierUsageCheckerKt$checkClassifierUsages$visitor$1.runCheckersWithTarget(ClassifierUsageChecker.kt:80)
	at org.jetbrains.kotlin.resolve.checkers.ClassifierUsageCheckerKt$checkClassifierUsages$visitor$1.visitReferenceExpression(ClassifierUsageChecker.kt:62)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitReferenceExpression(KtVisitorVoid.java:687)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitReferenceExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitSimpleNameExpression(KtVisitor.java:194)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitSimpleNameExpression(KtVisitorVoid.java:181)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitSimpleNameExpression(KtVisitorVoid.java:681)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitSimpleNameExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtNameReferenceExpression.accept(KtNameReferenceExpression.kt:59)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitExpression(KtVisitor.java:182)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:169)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:663)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitDoubleColonExpression(KtVisitor.java:290)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDoubleColonExpression(KtVisitorVoid.java:277)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDoubleColonExpression(KtVisitorVoid.java:825)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDoubleColonExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitClassLiteralExpression(KtVisitor.java:298)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassLiteralExpression(KtVisitorVoid.java:285)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassLiteralExpression(KtVisitorVoid.java:837)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassLiteralExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtClassLiteralExpression.accept(KtClassLiteralExpression.kt:23)
	at org.jetbrains.kotlin.psi.KtElementImpl.accept(KtElementImpl.java:51)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitExpression(KtVisitor.java:182)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:169)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:663)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitCollectionLiteralExpression(KtVisitor.java:250)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCollectionLiteralExpression(KtVisitorVoid.java:237)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCollectionLiteralExpression(KtVisitorVoid.java:765)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitCollectionLiteralExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtCollectionLiteralExpression.accept(KtCollectionLiteralExpression.kt:27)
	at org.jetbrains.kotlin.psi.KtElementImpl.accept(KtElementImpl.java:51)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitArgument(KtVisitor.java:178)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitArgument(KtVisitorVoid.java:165)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitArgument(KtVisitorVoid.java:657)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitArgument(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtValueArgument.accept(KtValueArgument.java:46)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitValueArgumentList(KtVisitor.java:174)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitValueArgumentList(KtVisitorVoid.java:161)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitValueArgumentList(KtVisitorVoid.java:651)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitValueArgumentList(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtValueArgumentList.accept(KtValueArgumentList.java:41)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitAnnotationEntry(KtVisitor.java:110)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitAnnotationEntry(KtVisitorVoid.java:101)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitAnnotationEntry(KtVisitorVoid.java:559)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitAnnotationEntry(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtAnnotationEntry.accept(KtAnnotationEntry.java:45)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitModifierList(KtVisitor.java:102)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitModifierList(KtVisitorVoid.java:93)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitModifierList(KtVisitorVoid.java:547)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitModifierList(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtModifierList.accept(KtModifierList.java:44)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:451)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitExpression(KtVisitor.java:182)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:169)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:663)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitExpression(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitDeclaration(KtVisitor.java:29)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDeclaration(KtVisitorVoid.java:29)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDeclaration(KtVisitorVoid.java:457)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitDeclaration(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitNamedDeclaration(KtVisitor.java:398)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitNamedDeclaration(KtVisitorVoid.java:381)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitNamedDeclaration(KtVisitorVoid.java:969)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitNamedDeclaration(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitClassOrObject(KtVisitor.java:41)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassOrObject(KtVisitorVoid.java:37)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassOrObject(KtVisitorVoid.java:469)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClassOrObject(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtVisitor.visitClass(KtVisitor.java:33)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClass(KtVisitorVoid.java:33)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClass(KtVisitorVoid.java:463)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitClass(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtClass.accept(KtClass.kt:20)
	at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:60)
	at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.SharedImplUtil.acceptChildren(SharedImplUtil.java:185)
	at org.jetbrains.kotlin.com.intellij.psi.impl.source.PsiFileImpl.acceptChildren(PsiFileImpl.java:753)
	at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
	at org.jetbrains.kotlin.com.intellij.psi.PsiElementVisitor.visitFile(PsiElementVisitor.java:35)
	at org.jetbrains.kotlin.psi.KtVisitor.visitKtFile(KtVisitor.java:73)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:69)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:517)
	at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:21)
	at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:243)
	at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:230)
	at org.jetbrains.kotlin.resolve.checkers.ClassifierUsageCheckerKt.checkClassifierUsages(ClassifierUsageChecker.kt:130)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations(LazyTopDownAnalyzer.kt:231)
	at org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer.analyzeDeclarations$default(LazyTopDownAnalyzer.kt:58)
	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:127)
	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:86)
	at org.sonarsource.kotlin.converter.KotlinCoreEnvironmentToolsKt$analyzeAndGetBindingContext$1.invoke(KotlinCoreEnvironmentTools.kt:107)
	at org.sonarsource.kotlin.converter.KotlinCoreEnvironmentToolsKt$analyzeAndGetBindingContext$1.invoke(KotlinCoreEnvironmentTools.kt:106)
	at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:113)
	at org.sonarsource.kotlin.converter.KotlinCoreEnvironmentToolsKt.analyzeAndGetBindingContext(KotlinCoreEnvironmentTools.kt:106)
	at org.sonarsource.kotlin.converter.KotlinCoreEnvironmentToolsKt.bindingContext(KotlinCoreEnvironmentTools.kt:96)
	at org.sonarsource.kotlin.converter.KotlinTree$Companion.of(KotlinTree.kt:50)
	at org.sonarsource.kotlin.plugin.KotlinSensor$parseAndVisitFile$tree$1.invoke(KotlinSensor.kt:154)
	at org.sonarsource.kotlin.plugin.KotlinSensor$parseAndVisitFile$tree$1.invoke(KotlinSensor.kt:152)
	at org.sonarsource.kotlin.plugin.DurationStatistics.time(DurationStatistics.kt:58)
	at org.sonarsource.kotlin.plugin.KotlinSensor.parseAndVisitFile(KotlinSensor.kt:152)
	at org.sonarsource.kotlin.plugin.KotlinSensor.analyseFile(KotlinSensor.kt:141)
	at org.sonarsource.kotlin.plugin.KotlinSensor.analyseFiles(KotlinSensor.kt:112)
	at org.sonarsource.kotlin.plugin.KotlinSensor.execute(KotlinSensor.kt:86)
	at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:45)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:75)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:48)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor$$Lambda$3173/0x0000000841e47840.run(Unknown Source)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:66)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:48)
	at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:68)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:447)
	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:443)
	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:440)
	at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:401)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:128)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:58)
	- locked <0x000000075a9a9c40> (a org.sonar.batch.bootstrapper.Batch)
	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:52)
	- locked <0x000000075a9a9c40> (a org.sonar.batch.bootstrapper.Batch)
	at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.12/Native Method)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.12/NativeMethodAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.12/DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(java.base@11.0.12/Method.java:566)
	at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
	at com.sun.proxy.$Proxy143.execute(Unknown Source)
	at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
	at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
	at org.sonarqube.gradle.SonarQubeTask.run(SonarQubeTask.java:102)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.12/Native Method)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.12/NativeMethodAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.12/DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(java.base@11.0.12/Method.java:566)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:498)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$$Lambda$142/0x0000000840239440.accept(Unknown Source)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:483)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:466)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:105)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:270)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:248)
	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83)
	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$$Lambda$139/0x0000000840239840.apply(Unknown Source)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:47)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92)
	at org.gradle.internal.execution.steps.SkipUpToDateStep$$Lambda$463/0x0000000840559040.apply(Unknown Source)
	at java.util.Optional.map(java.base@11.0.12/Optional.java:265)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:84)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:41)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:78)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:49)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:105)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:50)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep$$Lambda$424/0x0000000840544040.get(Unknown Source)
	at java.util.Optional.orElseGet(java.base@11.0.12/Optional.java:369)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep$$Lambda$417/0x0000000840546440.executeInWorkspace(Unknown Source)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:283)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:49)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$$Lambda$139/0x0000000840239840.apply(Unknown Source)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$$Lambda$755/0x00000008407a2040.execute(Unknown Source)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.12/ThreadPoolExecutor.java:1128)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.12/ThreadPoolExecutor.java:628)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.lang.Thread.run(java.base@11.0.12/Thread.java:829)

Hello Tim,

Thanks for all the information, it really helps! We’ve been investigating more on our side and have identified a cause for some significant performance issues. Based on your logs, you are likely experiencing slow scans due to the same cause. We already have a fix in the works and will release it with the next analyzer version. You can follow the ticket for this issue here.

Great, that’s really good news.

I stumbled upon that ticket myself yesterday and suspected it might be related. I already voted for it and started watching it. We’ll re-evaluate once the next analyzer is available.

@jbeleites Any idea when we can expect the resolved issue SONARKT-186 to be included in a SonarCloud.io release? If possible I would like to test the effect of the fix. Thanks in advance.

Hey @timpeeters

We can update this thread when it’s deployed (it’s in progress, so either by the end of this week or early next week)

2 Likes

We deployed the fix of the ticket in SonarCloud today. Can you confirm you are getting better performance on your side?

Thanks

First results: down from 40 minutes to 10 minutes. :+1:

4 Likes

Thanks for confirming our change improved the performance.

In the coming weeks we are going to work on:

  • analyzing only the changed Kotlin files of the PR
  • enable to run rules in parallel but for that you will need to run your scan on a machine having multiple vCPU/Cores

I’ll come back to this thread once it’s done.

Thx for the update.

In the meantime, I repeated the steps that we performed before as requested by @jbeleites.
Results look great.

grep compileKotlin | **grep** "Took" | **sed** 's/.* Took \(.*\) secs./\1/' | **awk** '{sum+=$1} END {print (sum/60) " min"}'
1.17973 min

grep "Kotlin Sensor" | **grep** "done" | **sed** 's/.* time=\(.*\)ms/\1/' | **awk** '{sum+=$1} END {print (sum/1000/60) " min"}'
3.02092 min
2 Likes