KT-40200: Fix main function detector in lazy resolve overload resolver
This commit is contained in:
committed by
TeamCityServer
parent
92adccde47
commit
9bf2dfaa02
+3
-1
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.clearInBlockModifications
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.inBlockModifications
|
||||
import org.jetbrains.kotlin.idea.compiler.IdeMainFunctionDetectorFactory
|
||||
import org.jetbrains.kotlin.idea.project.IdeaModuleStructureOracle
|
||||
import org.jetbrains.kotlin.idea.project.findAnalyzerServices
|
||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||
@@ -449,7 +450,8 @@ private object KotlinResolveDataProvider {
|
||||
bodyResolveCache,
|
||||
targetPlatform.findAnalyzerServices(project),
|
||||
analyzableElement.languageVersionSettings,
|
||||
IdeaModuleStructureOracle()
|
||||
IdeaModuleStructureOracle(),
|
||||
IdeMainFunctionDetectorFactory()
|
||||
).get<LazyTopDownAnalyzer>()
|
||||
|
||||
lazyTopDownAnalyzer.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, listOf(analyzableElement))
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.compiler
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
|
||||
|
||||
internal class IdeMainFunctionDetectorFactory : MainFunctionDetector.Factory {
|
||||
override fun createMainFunctionDetector(
|
||||
trace: BindingTrace,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): MainFunctionDetector {
|
||||
return MainFunctionDetector(languageVersionSettings) { function ->
|
||||
function.resolveToDescriptorIfAny(bodyResolveMode = BodyResolveMode.FULL)
|
||||
?: throw KotlinExceptionWithAttachments("No descriptor resolved for $function")
|
||||
.withAttachment("function.text", function.text)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.project
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.idea.caches.lightClasses.LazyLightClassDataHolder
|
||||
import org.jetbrains.kotlin.idea.compiler.IdeMainFunctionDetectorFactory
|
||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||
|
||||
object IdeaEnvironment : TargetEnvironment("Idea") {
|
||||
@@ -28,5 +29,6 @@ object IdeaEnvironment : TargetEnvironment("Idea") {
|
||||
container.useImpl<IdeaAbsentDescriptorHandler>()
|
||||
container.useImpl<LazyLightClassDataHolder.DiagnosticsHolder>()
|
||||
container.useImpl<IdeaModuleStructureOracle>()
|
||||
container.useImpl<IdeMainFunctionDetectorFactory>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.util.analyzeControlFlow
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListenerCompat
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.inBlockModificationCount
|
||||
import org.jetbrains.kotlin.idea.compiler.IdeMainFunctionDetectorFactory
|
||||
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
|
||||
Reference in New Issue
Block a user