Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NoSuchMethodError when running detekt 1.21.0-RC2 with type resolution and Kotlin 1.7.0 #5021

Closed
eygraber opened this issue Jun 30, 2022 · 17 comments

Comments

@eygraber
Copy link
Contributor

This happens on RC1 as well. It is an Android project.

The cause is:

java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.(org.jetbrains.kotlin.cli.common.messages.MessageCollector, org.jetbrains.kotlin.config.LanguageVersionSettings)'
        at io.gitlab.arturbosch.detekt.core.BindingContextKt.generateBindingContext(BindingContext.kt:33)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle$1.invoke(Lifecycle.kt:66)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle$1.invoke(Lifecycle.kt:66)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$bindingContext$1.invoke(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$bindingContext$1.invoke(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.util.PerformanceMonitor.measure(PerformanceMonitor.kt:42)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.measure(Lifecycle.kt:34)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.analyze(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle.analyze(Lifecycle.kt:61)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:48)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.ProcessingSpecSettingsBridgeKt.withSettings(ProcessingSpecSettingsBridge.kt:26)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.runAnalysis$detekt_core(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.run(AnalysisFacade.kt:25)
        at io.gitlab.arturbosch.detekt.cli.runners.Runner.call(Runner.kt:33)
        at io.gitlab.arturbosch.detekt.cli.runners.Runner.execute(Runner.kt:23)
Full stacktrace
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':kotlin:detektDevRelease'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:140)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        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:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:69)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:327)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:307)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:293)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:417)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:339)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.gradle.api.GradleException: 'void org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.(org.jetbrains.kotlin.cli.common.messages.MessageCollector, org.jetbrains.kotlin.config.LanguageVersionSettings)'
        at io.gitlab.arturbosch.detekt.invoke.DefaultCliInvoker.invokeCli(DetektInvoker.kt:64)
        at io.gitlab.arturbosch.detekt.Detekt.check(Detekt.kt:260)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
        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.TaskExecution$3.run(TaskExecution.java:236)
        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$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:221)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:204)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:187)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:165)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        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.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.executeDelegateBroadcastingChanges(CaptureStateAfterExecutionStep.java:124)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:80)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:58)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:181)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeAndStoreInCache(BuildCacheStep.java:154)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$executeWithCache$4(BuildCacheStep.java:121)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$executeWithCache$5(BuildCacheStep.java:121)
        at org.gradle.internal.Try$Success.map(Try.java:164)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithCache(BuildCacheStep.java:81)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$0(BuildCacheStep.java:70)
        at org.gradle.internal.Either$Left.fold(Either.java:115)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:69)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
        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:110)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        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:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:254)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:209)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:56)
        at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
        at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:281)
        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:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:139)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        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:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:69)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:327)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:307)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:293)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:417)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:339)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.gitlab.arturbosch.detekt.invoke.DefaultCliInvoker.invokeCli(DetektInvoker.kt:58)
        ... 129 more
Caused by: java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.(org.jetbrains.kotlin.cli.common.messages.MessageCollector, org.jetbrains.kotlin.config.LanguageVersionSettings)'
        at io.gitlab.arturbosch.detekt.core.BindingContextKt.generateBindingContext(BindingContext.kt:33)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle$1.invoke(Lifecycle.kt:66)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle$1.invoke(Lifecycle.kt:66)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$bindingContext$1.invoke(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$bindingContext$1.invoke(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.util.PerformanceMonitor.measure(PerformanceMonitor.kt:42)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.measure(Lifecycle.kt:34)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.analyze(Lifecycle.kt:39)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle.analyze(Lifecycle.kt:61)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:48)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.ProcessingSpecSettingsBridgeKt.withSettings(ProcessingSpecSettingsBridge.kt:26)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.runAnalysis$detekt_core(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.run(AnalysisFacade.kt:25)
        at io.gitlab.arturbosch.detekt.cli.runners.Runner.call(Runner.kt:33)
        at io.gitlab.arturbosch.detekt.cli.runners.Runner.execute(Runner.kt:23)
        ... 134 more
@eygraber eygraber added the bug label Jun 30, 2022
@3flex
Copy link
Member

3flex commented Jul 1, 2022

Can you share your project? If not, do you have a reproducer? If not, can you share a build scan? If not, can you run a Gradle dependencies report for the project that has the failing task?

We'll need more than just a stack trace, it doesn't provide enough information to help unfortunately when the error is coming from the Kotlin compiler itself as it is here.

@eygraber
Copy link
Contributor Author

eygraber commented Jul 3, 2022

I can't do any of those things for this particular project. I can try to make a repro project but @cortinico mentioned in the Kotlin Slack that Detekt doesn't support Kotlin 1.7 yet.

@3flex
Copy link
Member

3flex commented Jul 3, 2022

detekt's dependencies should be isolated compared to the dependencies the project itself uses - so as long as the code in the project you're running detekt on can compile with Kotlin 1.6.21 as well, detekt should run successfully, as long as detekt's dependencies are correct.

Is there some reason you can't run ./gradlew :<project>:dependencies? That doesn't expose any information about the project except which dependencies it's using. You can also pass the --configuration detekt flag to avoid sharing anything sensitive.

Here's sample output from this project, running ./gradlew :detekt-api:dependencies --configuration detekt:

> Task :detekt-api:dependencies

------------------------------------------------------------
Project ':detekt-api'
------------------------------------------------------------

detekt - The detekt dependencies to be used for this project.
+--- project :detekt-cli
|    +--- com.beust:jcommander:1.82
|    +--- project :detekt-tooling
|    |    \--- project :detekt-api (*)
|    +--- project :detekt-parser
|    |    +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21
|    |    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21
|    |    |    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21
|    |    |    |    \--- org.jetbrains:annotations:13.0
|    |    |    +--- org.jetbrains.kotlin:kotlin-script-runtime:1.6.21
|    |    |    +--- org.jetbrains.kotlin:kotlin-reflect:1.6.21
|    |    |    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.6.21 (*)
|    |    |    +--- org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.21
|    |    |    +--- org.jetbrains.intellij.deps:trove4j:1.0.20200330
|    |    |    \--- net.java.dev.jna:jna:5.6.0
|    |    +--- project :detekt-psi-utils
|    |    |    \--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 (*)
|    |    \--- io.github.davidburstrom.contester:contester-breakpoint:0.2.0
|    +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:{strictly 1.6.21} -> 1.6.21 (*)
|    +--- project :detekt-core
|    |    +--- project :detekt-api (*)
|    |    +--- project :detekt-parser (*)
|    |    +--- project :detekt-tooling (*)
|    |    +--- org.yaml:snakeyaml:1.30
|    |    +--- project :detekt-metrics
|    |    |    \--- project :detekt-api (*)
|    |    +--- project :detekt-psi-utils (*)
|    |    +--- project :detekt-report-html
|    |    |    +--- project :detekt-utils
|    |    |    \--- org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.5
|    |    +--- project :detekt-report-md
|    |    |    +--- project :detekt-metrics (*)
|    |    |    +--- project :detekt-api (*)
|    |    |    \--- project :detekt-utils
|    |    +--- project :detekt-report-txt
|    |    +--- project :detekt-report-xml
|    |    +--- project :detekt-report-sarif
|    |    |    \--- io.github.detekt.sarif4k:sarif4k:0.0.1
|    |    |         +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0
|    |    |         |    \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.1.0
|    |    |         |         +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.30 -> 1.6.21 (*)
|    |    |         |         +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 -> 1.6.21
|    |    |         |         \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.1.0
|    |    |         |              \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.1.0
|    |    |         |                   +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.30 -> 1.6.21 (*)
|    |    |         |                   \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 -> 1.6.21
|    |    |         \--- org.jetbrains.kotlin:kotlin-stdlib:1.4.31 -> 1.6.21 (*)
|    |    \--- project :detekt-utils
|    \--- project :detekt-rules
|         +--- project :detekt-rules-complexity
|         +--- project :detekt-rules-coroutines
|         +--- project :detekt-rules-documentation
|         +--- project :detekt-rules-empty
|         +--- project :detekt-rules-errorprone
|         |    \--- project :detekt-tooling (*)
|         +--- project :detekt-rules-exceptions
|         +--- project :detekt-rules-naming
|         +--- project :detekt-rules-performance
|         \--- project :detekt-rules-style
+--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 (*)
+--- project :detekt-psi-utils (*)
\--- project :detekt-utils

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 1s
17 actionable tasks: 1 executed, 16 up-to-date

@eygraber
Copy link
Contributor Author

eygraber commented Jul 3, 2022

I believe Gradle uses the same dependency that I specify for transitive dependencies. So if I use Kotlin 1.7.0, then it will use that for any transitive dependencies that use Kotlin as well:

> Task :kotlin:dependencies

------------------------------------------------------------
Project ':kotlin'
------------------------------------------------------------

detekt - The detekt dependencies to be used for this project.
\--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2
     +--- com.beust:jcommander:1.82
     +--- io.gitlab.arturbosch.detekt:detekt-tooling:1.21.0-RC2
     |    \--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2
     |         +--- io.gitlab.arturbosch.detekt:detekt-utils:1.21.0-RC2
     |         +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 -> 1.7.0
     |         |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.7.0
     |         |    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.7.0
     |         |    |    \--- org.jetbrains:annotations:13.0
     |         |    +--- org.jetbrains.kotlin:kotlin-script-runtime:1.7.0
     |         |    +--- org.jetbrains.kotlin:kotlin-reflect:1.7.0
     |         |    |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.7.0 (*)
     |         |    +--- org.jetbrains.kotlin:kotlin-daemon-embeddable:1.7.0
     |         |    +--- org.jetbrains.intellij.deps:trove4j:1.0.20200330
     |         |    \--- net.java.dev.jna:jna:5.6.0
     |         \--- io.gitlab.arturbosch.detekt:detekt-psi-utils:1.21.0-RC2
     |              \--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 -> 1.7.0 (*)
     +--- io.gitlab.arturbosch.detekt:detekt-parser:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-psi-utils:1.21.0-RC2 (*)
     |    +--- io.github.davidburstrom.contester:contester-breakpoint:0.2.0
     |    \--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 -> 1.7.0 (*)
     +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:{strictly 1.6.21} -> 1.7.0 (*)
     +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2
     |    +--- org.yaml:snakeyaml:1.30
     |    +--- io.gitlab.arturbosch.detekt:detekt-metrics:1.21.0-RC2
     |    |    \--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2 (*)
     |    +--- io.gitlab.arturbosch.detekt:detekt-psi-utils:1.21.0-RC2 (*)
     |    +--- io.gitlab.arturbosch.detekt:detekt-report-html:1.21.0-RC2
     |    |    +--- io.gitlab.arturbosch.detekt:detekt-utils:1.21.0-RC2
     |    |    \--- org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.5
     |    +--- io.gitlab.arturbosch.detekt:detekt-report-md:1.21.0-RC2
     |    |    +--- io.gitlab.arturbosch.detekt:detekt-metrics:1.21.0-RC2 (*)
     |    |    +--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2 (*)
     |    |    \--- io.gitlab.arturbosch.detekt:detekt-utils:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-report-txt:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-report-xml:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-report-sarif:1.21.0-RC2
     |    |    \--- io.github.detekt.sarif4k:sarif4k:0.0.1
     |    |         +--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0
     |    |         |    \--- org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.1.0
     |    |         |         +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.30 -> 1.7.0 (*)
     |    |         |         +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 -> 1.7.0
     |    |         |         \--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.1.0
     |    |         |              \--- org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.1.0
     |    |         |                   +--- org.jetbrains.kotlin:kotlin-stdlib:1.4.30 -> 1.7.0 (*)
     |    |         |                   \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.4.30 -> 1.7.0
     |    |         \--- org.jetbrains.kotlin:kotlin-stdlib:1.4.31 -> 1.7.0 (*)
     |    +--- io.gitlab.arturbosch.detekt:detekt-utils:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2 (*)
     |    +--- io.gitlab.arturbosch.detekt:detekt-parser:1.21.0-RC2 (*)
     |    \--- io.gitlab.arturbosch.detekt:detekt-tooling:1.21.0-RC2 (*)
     \--- io.gitlab.arturbosch.detekt:detekt-rules:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-complexity:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-coroutines:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-documentation:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-empty:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-errorprone:1.21.0-RC2
          |    \--- io.gitlab.arturbosch.detekt:detekt-tooling:1.21.0-RC2 (*)
          +--- io.gitlab.arturbosch.detekt:detekt-rules-exceptions:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-naming:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-rules-performance:1.21.0-RC2
          \--- io.gitlab.arturbosch.detekt:detekt-rules-style:1.21.0-RC2

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.5-rc-3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 16s
11 actionable tasks: 1 executed, 10 up-to-date

@cortinico
Copy link
Member

 +--- org.jetbrains.kotlin:kotlin-compiler-embeddable:{strictly 1.6.21} -> 1.7.0 (*)

As I mentioned on Slack, we haven't currently bumped Kotlin to 1.7 (see #4821) so that's the root cause of your problem. Are you using another Gradle Plugin which is pulling in Kotlin 1.7?

@eygraber
Copy link
Contributor Author

eygraber commented Jul 5, 2022

This was part of me upgrading my project to Kotlin 1.7 so it's the Kotlin plugin that pulls it in.

It seems like I don't have any choice other than staying on 1.6.21 for now, but as I said on slack, that's less than ideal.

@BraisGabin
Copy link
Member

We could think of releasing 1.6.21 and 1.6.22-RC1 nearly at the same time just adding support for kotlin 1.7. I agree that we shouldn't be a stopper for people updating kotlin.

@cortinico
Copy link
Member

I agree that we shouldn't be a stopper for people updating kotlin.

Agree as well. Still this puts pressure on our release schedule as we need to necessarily align to the Kotlin release schedule then

@eygraber
Copy link
Contributor Author

eygraber commented Jul 7, 2022

Not sure if it makes sense for detekt, but I really like the way KSP handles this by having separate artifacts for different Kotlin versions (e.g. versions 1.7.0-1.0.6 and 1.6.21-1.0.6).

They typically support new versions of Kotlin within a few days of it being released (if not the same day).

@3flex
Copy link
Member

3flex commented Jul 8, 2022

The underlying issue is is basically the same as #4786 - the version of the Kotlin compiler that detekt depends on is being overridden in the project. A strict dependency on the required version (currently 1.6.21) should fix the version and not allow it to be overridden. It's being overridden here, but not sure why.

@eygraber can you please run this command which hopefully explains what's causing the version to be overridden?
./gradlew -q :kotlin:dependencyInsight --dependency kotlin-compiler-embeddable --configuration detekt

Not sure if it makes sense for detekt, but I really like the way KSP handles this

I'd suggest we don't have the resources to effectively test the different permutations and properly support multiple Kotlin versions simultaneously. Unfortunately all detekt maintainers are volunteers - and because detekt isn't a part of the compilation process like KSP there's less need to do this, as long as we can effectively control the dependencies used in the detekt Gradle configuration.

@eygraber
Copy link
Contributor Author

eygraber commented Jul 8, 2022

org.jetbrains.kotlin:kotlin-compiler-embeddable:1.7.0 (selected by rule)
  Variant runtime:
    | Attribute Name             | Provided     | Requested |
    |----------------------------|--------------|-----------|
    | org.gradle.category        | library      |           |
    | org.gradle.libraryelements | jar          |           |
    | org.gradle.status          | release      |           |
    | org.gradle.usage           | java-runtime |           |

org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 -> 1.7.0
\--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2
     +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2
     |    \--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2
     |         \--- detekt
     +--- io.gitlab.arturbosch.detekt:detekt-tooling:1.21.0-RC2
     |    +--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2 (*)
     |    +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
     |    \--- io.gitlab.arturbosch.detekt:detekt-rules-errorprone:1.21.0-RC2
     |         \--- io.gitlab.arturbosch.detekt:detekt-rules:1.21.0-RC2
     |              \--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2 (*)
     +--- io.gitlab.arturbosch.detekt:detekt-report-md:1.21.0-RC2
     |    \--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
     \--- io.gitlab.arturbosch.detekt:detekt-metrics:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
          \--- io.gitlab.arturbosch.detekt:detekt-report-md:1.21.0-RC2 (*)

org.jetbrains.kotlin:kotlin-compiler-embeddable:{strictly 1.6.21} -> 1.7.0
\--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2
     \--- detekt

org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.21 -> 1.7.0
+--- io.gitlab.arturbosch.detekt:detekt-parser:1.21.0-RC2
|    +--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2
|    |    \--- detekt
|    \--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2
|         \--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2 (*)
\--- io.gitlab.arturbosch.detekt:detekt-psi-utils:1.21.0-RC2
     +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
     +--- io.gitlab.arturbosch.detekt:detekt-parser:1.21.0-RC2 (*)
     \--- io.gitlab.arturbosch.detekt:detekt-api:1.21.0-RC2
          +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
          +--- io.gitlab.arturbosch.detekt:detekt-tooling:1.21.0-RC2
          |    +--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2 (*)
          |    +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
          |    \--- io.gitlab.arturbosch.detekt:detekt-rules-errorprone:1.21.0-RC2
          |         \--- io.gitlab.arturbosch.detekt:detekt-rules:1.21.0-RC2
          |              \--- io.gitlab.arturbosch.detekt:detekt-cli:1.21.0-RC2 (*)
          +--- io.gitlab.arturbosch.detekt:detekt-report-md:1.21.0-RC2
          |    \--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
          \--- io.gitlab.arturbosch.detekt:detekt-metrics:1.21.0-RC2
               +--- io.gitlab.arturbosch.detekt:detekt-core:1.21.0-RC2 (*)
               \--- io.gitlab.arturbosch.detekt:detekt-report-md:1.21.0-RC2 (*)

(*) - dependencies omitted (listed previously)

@3flex
Copy link
Member

3flex commented Jul 8, 2022

I'd hoped that would be more informative, but we only have "selected by rule" as the reason.

How do you apply the 1.7.0 version in your build script? Is it only the Kotlin JVM plugin? Or do you do something like this as well:

configurations.all {
    resolutionStrategy.eachDependency {
        if (requested.group == "org.jetbrains.kotlin") {
            useVersion("1.7.0")
        }
    }
}

@eygraber
Copy link
Contributor Author

eygraber commented Jul 8, 2022

Yup, that's it 🙈

And of course I don't have a comment reminding me why I did that 3 years ago...

@eygraber
Copy link
Contributor Author

eygraber commented Jul 8, 2022

I'm assuming that I did that because I had some dependencies in the past that pinned a version of Kotlin that was causing issues. Doesn't seem to be the case anymore, but I'm still a bit hesitant to remove it.

@3flex
Copy link
Member

3flex commented Jul 8, 2022

Are you applying it as a strict rule? Can you share the code block? We apply a strict dependency version but that shouldn't be overridden by a configuration override except when applying it strictly, so I want to know why #4822 didn't stop this happening.

And to stop it overriding detekt's configuration just change the line configurations.all to configurations.matching { it.name != "detekt" }.all (or the Groovy equivalent depending on which DSL you use).

@eygraber
Copy link
Contributor Author

eygraber commented Jul 8, 2022

configurations.configureEach {
    resolutionStrategy {
      eachDependency {
        when(requested.group) {
          "androidx.activity" -> useVersion(libs.versions.androidx.activity.get())
          "androidx.appcompat" -> useVersion(libs.versions.androidx.appCompat.get())
          "androidx.fragment" -> useVersion(libs.versions.androidx.fragment.get())
          "org.jetbrains.kotlin" -> useVersion(libs.versions.kotlin.get())
        }

        when(requested.name) {
          "libphonenumber-android" -> useVersion(libs.versions.libPhoneNumberAndroid.get())
        }

        when {
          requested.name.startsWith("kotlinx-coroutines") -> useVersion(libs.versions.kotlinx.coroutines.get())
        }
      }
    }
  }

I'll update it to exclude the detekt configuration.

@3flex
Copy link
Member

3flex commented Jul 19, 2022

Closing, as the cause was identified.

It seems the strict version dependency can be overridden by a custom resolution strategy. This might be one we have to keep educating users about.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants