KT-50111 Add a new analysis flag `eagerResolveOfLightClasses`
diff --git a/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt b/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt
index 3197339f..01d88bb 100644
--- a/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt
+++ b/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt
@@ -59,4 +59,7 @@
@JvmStatic
val allowFullyQualifiedNameInKClass by AnalysisFlag.Delegates.Boolean
+
+ @JvmStatic
+ val eagerResolveOfLightClasses by AnalysisFlag.Delegates.Boolean
}
diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
index 83029aa..d71194e 100644
--- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
+++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
@@ -26,6 +26,7 @@
import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
import org.jetbrains.kotlin.asJava.classes.*
+import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.lexer.KtTokens
@@ -33,6 +34,7 @@
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
+import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult
@@ -92,6 +94,11 @@
}
return getUltraLightClassSupport(element).let { support ->
+ if (support.languageVersionSettings.getFlag(AnalysisFlags.eagerResolveOfLightClasses)) {
+ val descriptor = resolveToDescriptor(element)
+ (descriptor as? LazyClassDescriptor)?.forceResolveAllContents()
+ }
+
when {
element is KtObjectDeclaration && element.isObjectLiteral() ->
KtUltraLightClassForAnonymousDeclaration(element, support)