diff --git a/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt b/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt index 3197339f508..01d88bb7ebd 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 @@ object AnalysisFlags { @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 83029aa2a5c..d71194e9847 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.LightClassBuilderResult 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.name.FqName 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 @@ abstract class LightClassGenerationSupport { } 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)