diff --git a/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt b/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt index 13e9f81f716..be5b032ba2f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt @@ -34,8 +34,9 @@ import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments class MainFunctionDetector { + private val languageVersionSettings: LanguageVersionSettings by lazy { getLanguageVersionSettings() } private val getFunctionDescriptor: (KtNamedFunction) -> FunctionDescriptor? - private val languageVersionSettings: LanguageVersionSettings + private val getLanguageVersionSettings: () -> LanguageVersionSettings /** Assumes that the function declaration is already resolved and the descriptor can be found in the `bindingContext`. */ constructor(bindingContext: BindingContext, languageVersionSettings: LanguageVersionSettings) { @@ -44,14 +45,22 @@ class MainFunctionDetector { ?: throw throw KotlinExceptionWithAttachments("No descriptor resolved for $function") .withPsiAttachment("function.text", function) } - this.languageVersionSettings = languageVersionSettings + this.getLanguageVersionSettings = { languageVersionSettings } } - constructor(languageVersionSettings: LanguageVersionSettings, functionResolver: (KtNamedFunction) -> FunctionDescriptor?) { + constructor( + languageVersionSettingsProvider: () -> LanguageVersionSettings, + functionResolver: (KtNamedFunction) -> FunctionDescriptor? + ) { + this.getLanguageVersionSettings = languageVersionSettingsProvider this.getFunctionDescriptor = functionResolver - this.languageVersionSettings = languageVersionSettings } + constructor( + languageVersionSettings: LanguageVersionSettings, + functionResolver: (KtNamedFunction) -> FunctionDescriptor? + ) : this({ languageVersionSettings }, functionResolver) + @JvmOverloads fun isMain( function: KtNamedFunction,