Fixed
Status Update
Comments
js...@google.com <js...@google.com> #2
Thanks for the reproduction! (as I'm seeing a similar issue internally:
Just for a better rendering(?), when flags are swapped, the error looks like:
$ ./gradlew clean lint --stacktrace
> Task :app:lintAnalyzeDebug
org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments: Cannot find a KtModule for the VirtualFile
at org.jetbrains.kotlin.analysis.project.structure.impl.KtStandaloneProjectStructureProvider.getModule(KtStandaloneProjectStructureProvider.kt:60)
at org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider$Companion.getModule(ProjectStructureProvider.kt:105)
at org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade.getHandler(CliFe10AnalysisFacade.kt:73)
at org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade.getAnalysisContext(CliFe10AnalysisFacade.kt:40)
at org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSessionProvider.getAnalysisSession(KtFe10CliAnalysisSessionProvider.kt:22)
at org.jetbrains.uast.kotlin.FirKotlinUastResolveProviderService.resolvedFunctionName(FirKotlinUastResolveProviderService.kt:1290)
at org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression.getMethodName(KotlinUFunctionCallExpression.kt:49)
at org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression.getClassReference(KotlinUFunctionCallExpression.kt:57)
at org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression.accept(KotlinUFunctionCallExpression.kt:274)
at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:15)
at org.jetbrains.uast.UBlockExpression.accept(UBlockExpression.kt:21)
at org.jetbrains.uast.UMethod.accept(UMethod.kt:45)
at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:15)
at org.jetbrains.uast.kotlin.AbstractKotlinUClass.accept(AbstractKotlinUClass.kt:213)
at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:15)
at org.jetbrains.uast.UFile.accept(UFile.kt:89)
at com.android.tools.lint.detector.api.UastLintUtilsKt.acceptSourceFile(UastLintUtils.kt:932)
at com.android.tools.lint.client.api.UastGradleVisitor.visitBuildScript(UastGradleVisitor.kt:42)
at com.android.tools.lint.client.api.LintDriver$checkBuildScripts$1.run(LintDriver.kt:1553)
at com.android.tools.lint.client.api.LintClient.runReadAction(LintClient.kt:1801)
at com.android.tools.lint.client.api.LintDriver$LintClientWrapper.runReadAction(LintDriver.kt:2906)
at com.android.tools.lint.client.api.LintDriver.checkBuildScripts(LintDriver.kt:1537)
at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.kt:1413)
at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.kt:1160)
at com.android.tools.lint.client.api.LintDriver.checkProjectRoot(LintDriver.kt:631)
at com.android.tools.lint.client.api.LintDriver.access$checkProjectRoot(LintDriver.kt:177)
at com.android.tools.lint.client.api.LintDriver$analyzeOnly$1.invoke(LintDriver.kt:454)
at com.android.tools.lint.client.api.LintDriver$analyzeOnly$1.invoke(LintDriver.kt:451)
at com.android.tools.lint.client.api.LintDriver.doAnalyze(LintDriver.kt:510)
at com.android.tools.lint.client.api.LintDriver.analyzeOnly(LintDriver.kt:451)
at com.android.tools.lint.LintCliClient$analyzeOnly$1.invoke(LintCliClient.kt:258)
at com.android.tools.lint.LintCliClient$analyzeOnly$1.invoke(LintCliClient.kt:255)
at com.android.tools.lint.LintCliClient.run(LintCliClient.kt:312)
at com.android.tools.lint.LintCliClient.analyzeOnly(LintCliClient.kt:255)
at com.android.tools.lint.Main.run(Main.java:1766)
at com.android.tools.lint.Main.run(Main.java:282)
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 com.android.build.gradle.internal.lint.AndroidLintWorkAction.invokeLintMainRunMethod(AndroidLintWorkAction.kt:101)
at com.android.build.gradle.internal.lint.AndroidLintWorkAction.runLint(AndroidLintWorkAction.kt:88)
at com.android.build.gradle.internal.lint.AndroidLintWorkAction.execute(AndroidLintWorkAction.kt:63)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
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.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:170)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:187)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:120)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:162)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:264)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:128)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:133)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:157)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
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)
...
and the obvious odd place is:
...
at org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSessionProvider.getAnalysisSession(KtFe10CliAnalysisSessionProvider.kt:22)
at org.jetbrains.uast.kotlin.FirKotlinUastResolveProviderService.resolvedFunctionName(FirKotlinUastResolveProviderService.kt:1290)
...
where K2 UAST invokes AA FE1.0 session...
Also, back to the original case---app with K2, but lib with K1:
Caused by: com.intellij.util.pico.PicoException: Key org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider duplicated
at com.intellij.util.pico.DefaultPicoContainer.registerComponent(DefaultPicoContainer.java:105)
at com.intellij.util.pico.DefaultPicoContainer.registerComponentInstance(DefaultPicoContainer.java:159)
at com.intellij.mock.MockComponentManager.registerService(MockComponentManager.java:116)
at org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory.registerApplicationServices(StandaloneProjectFactory.kt:119)
at org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory.createProjectEnvironment(StandaloneProjectFactory.kt:85)
at org.jetbrains.kotlin.analysis.api.standalone.StandaloneAnalysisAPISessionBuilder.<init>(StandaloneAnalysisAPISessionBuilder.kt:60)
at com.android.tools.lint.FirUastEnvironmentKt.createAnalysisSession(FirUastEnvironment.kt:509)
...
I'm afraid BuiltInsVirtualFileProvider
is not the only app-level service that will be conflict. I can spot a couple more, required by Analysis APIs...
js...@google.com <js...@google.com>
js...@google.com <js...@google.com>
[Deleted User] <[Deleted User]> #3
om/scholar_lookup?title=&journal=Nature&doi=10.1038%2Fnature13131&volume=507&pages=233-237&publication_year=2014&author=Coen%2CP
Description
The attached project is a simple app + library dependency.
The app and library have different values for
experimentalProperties["android.lint.useK2Uast"]
in theirbuild.gradle.kts
files, which means one module will run lint with K2 UAST and the other won't.Running
./gradlew clean lint --stacktrace
results in the following error:If the value of
experimentalProperties["android.lint.useK2Uast"]
is changed to false for the app and true for the library, running./gradlew clean lint --stacktrace
will result in a slightly different failure mode. The following can be seen in the lint report:If the value of
experimentalProperties["android.lint.useK2Uast"]
is the same for both modules,./gradlew clean lint
finishes successfully.