Add languageSetting provider

Access to facets could be heavy

#KTIJ-23501
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt b/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt
index 3c0eef4..0426544 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.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 @@
                 ?: throw throw KotlinExceptionWithAttachments("No descriptor resolved for $function")
                     .withAttachment("function.text", function.text)
         }
-        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,