diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt index 711075fe613..859c444e191 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt @@ -28,7 +28,7 @@ import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl import com.intellij.psi.impl.source.tree.TreeElement import org.jetbrains.kotlin.codegen.state.GenerationState -import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext @@ -54,7 +54,13 @@ fun buildLightClass( context.module, context.bindingContext, files.toList(), - CompilerConfiguration.EMPTY + context.languageVersionSettings?.let { + CompilerConfiguration().apply { + languageVersionSettings = it + isReadOnly = true + } + } ?: CompilerConfiguration.EMPTY + ).generateDeclaredClassFilter(generateClassFilter).wantsDiagnostics(false).build() state.beforeCompile() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt.173 b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt.173 index d66b4eef98e..ff9b11a1d16 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt.173 +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassBuilder.kt.173 @@ -30,7 +30,7 @@ import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.impl.java.stubs.impl.PsiJavaFileStubImpl import com.intellij.psi.impl.source.tree.TreeElement import org.jetbrains.kotlin.codegen.state.GenerationState -import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext @@ -56,7 +56,12 @@ fun buildLightClass( context.module, context.bindingContext, files.toList(), - CompilerConfiguration.EMPTY + context.languageVersionSettings?.let { + CompilerConfiguration().apply { + languageVersionSettings = it + isReadOnly = true + } + } ?: CompilerConfiguration.EMPTY ).generateDeclaredClassFilter(generateClassFilter).wantsDiagnostics(false).build() state.beforeCompile() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt index 98540d4e96e..f3f42df0d43 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassConstructionContext.kt @@ -16,10 +16,12 @@ package org.jetbrains.kotlin.asJava.builder +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.resolve.BindingContext open class LightClassConstructionContext( val bindingContext: BindingContext, - val module: ModuleDescriptor + val module: ModuleDescriptor, + val languageVersionSettings: LanguageVersionSettings? = null ) \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt index 84c461f6556..3a859754b83 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.idea.caches.lightClasses.IDELightClassConstructionCo import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.ResolveElementCache +import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.stubindex.KotlinOverridableInternalMembersShortNameIndex import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker @@ -75,8 +76,11 @@ import org.jetbrains.kotlin.types.WrappedTypeFactory import org.jetbrains.kotlin.utils.sure -class IDELightClassConstructionContext(bindingContext: BindingContext, module: ModuleDescriptor, val mode: Mode) : - LightClassConstructionContext(bindingContext, module) { +class IDELightClassConstructionContext( + bindingContext: BindingContext, module: ModuleDescriptor, + langaugeVersionSettings: LanguageVersionSettings, + val mode: Mode +) : LightClassConstructionContext(bindingContext, module, langaugeVersionSettings) { enum class Mode { LIGHT, EXACT @@ -103,7 +107,7 @@ internal object IDELightClassContexts { "Class descriptor was not found for ${classOrObject.getElementTextWithContext()}" } ForceResolveUtil.forceResolveAllContents(classDescriptor) - return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, classOrObject.languageVersionSettings, EXACT) } fun contextForLocalClassOrObject(classOrObject: KtClassOrObject): LightClassConstructionContext { @@ -114,12 +118,12 @@ internal object IDELightClassContexts { if (descriptor == null) { LOG.warn("No class descriptor in context for class: " + classOrObject.getElementTextWithContext()) - return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, classOrObject.languageVersionSettings, EXACT) } ForceResolveUtil.forceResolveAllContents(descriptor) - return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, classOrObject.languageVersionSettings, EXACT) } @@ -127,7 +131,7 @@ internal object IDELightClassContexts { val resolveSession = files.first().getResolutionFacade().getFrontendService(ResolveSession::class.java) forceResolvePackageDeclarations(files, resolveSession) - return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, files.first().languageVersionSettings, EXACT) } fun contextForScript(script: KtScript): LightClassConstructionContext { @@ -137,12 +141,12 @@ internal object IDELightClassContexts { val descriptor = bindingContext[BindingContext.SCRIPT, script] if (descriptor == null) { LOG.warn("No script descriptor in context for script: " + script.getElementTextWithContext()) - return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, script.languageVersionSettings, EXACT) } ForceResolveUtil.forceResolveAllContents(descriptor) - return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, EXACT) + return IDELightClassConstructionContext(bindingContext, resolutionFacade.moduleDescriptor, script.languageVersionSettings, EXACT) } fun lightContextForClassOrObject(classOrObject: KtClassOrObject): LightClassConstructionContext? { @@ -156,7 +160,7 @@ internal object IDELightClassContexts { ForceResolveUtil.forceResolveAllContents(resolveSession.resolveToDescriptor(classOrObject)) - return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, LIGHT) + return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, classOrObject.languageVersionSettings, LIGHT) } fun lightContextForFacade(files: List): LightClassConstructionContext { @@ -165,7 +169,7 @@ internal object IDELightClassContexts { forceResolvePackageDeclarations(files, resolveSession) - return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, LIGHT) + return IDELightClassConstructionContext(resolveSession.bindingContext, resolveSession.moduleDescriptor, files.first().languageVersionSettings, LIGHT) } private fun isDummyResolveApplicable(classOrObject: KtClassOrObject): Boolean {