diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 33d459874bd..1523faa2669 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -188,7 +188,7 @@ class ResolverForProjectImpl( val languageVersionSettings = moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project, isReleaseCoroutines) - val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module) + val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module, projectContext.project) resolverForModuleFactory.createResolverForModule( descriptor as ModuleDescriptorImpl, @@ -433,7 +433,7 @@ interface LanguageSettingsProvider { project: Project ) = getLanguageVersionSettings(moduleInfo, project, null) - fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion + fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion object Default : LanguageSettingsProvider { override fun getLanguageVersionSettings( @@ -442,7 +442,7 @@ interface LanguageSettingsProvider { isReleaseCoroutines: Boolean? ) = LanguageVersionSettingsImpl.DEFAULT - override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion = TargetPlatformVersion.NoVersion + override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = TargetPlatformVersion.NoVersion } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt index 17781c77eb5..389ec5c0a2f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonAnalyzerFacade.kt @@ -93,7 +93,10 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() { isReleaseCoroutines: Boolean? ) = multiplatformLanguageSettings - override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion + override fun getTargetPlatform( + moduleInfo: ModuleInfo, + project: Project + ) = TargetPlatformVersion.NoVersion }, resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade }, platformParameters = { _ -> CommonAnalysisParameters(metadataPartProviderFactory) } 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 1b7658b7965..84c461f6556 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 @@ -276,7 +276,7 @@ internal object IDELightClassContexts { val moduleInfo = files.first().getModuleInfo() val container = createContainer("LightClassStub", JvmPlatform) { - val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo) as? JvmTarget + val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project) as? JvmTarget configureModule( ModuleContext(moduleDescriptor, project), JvmPlatform, jvmTarget ?: JvmTarget.DEFAULT, trace diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt index 9e18d7fc586..d49f2878602 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.cli.common.arguments.Jsr305Parser import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.TargetPlatformVersion @@ -50,8 +51,8 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider { is LibraryInfo -> project.getLanguageVersionSettings( jsr305State = computeJsr305State(project), isReleaseCoroutines = isReleaseCoroutines ) - is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) - is ScriptDependenciesInfo.ForFile -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) + is ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).languageVersionSettings + is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).languageVersionSettings is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings else -> project.getLanguageVersionSettings() } @@ -71,29 +72,40 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider { return result } - override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion { - return (moduleInfo as? ModuleSourceInfo)?.module?.targetPlatform?.version ?: TargetPlatformVersion.NoVersion - } + override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = + when (moduleInfo) { + is ModuleSourceInfo -> moduleInfo.module.targetPlatform?.version ?: TargetPlatformVersion.NoVersion + is ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion + is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion + else -> TargetPlatformVersion.NoVersion + } } -private val LANGUAGE_VERSION_SETTINGS = Key.create>("LANGUAGE_VERSION_SETTINGS") +private data class ScriptLanguageSettings( + val languageVersionSettings: LanguageVersionSettings, + val targetPlatformVersion: TargetPlatformVersion +) -private fun getVersionLanguageSettingsForScripts(project: Project, scriptDefinition: KotlinScriptDefinition): LanguageVersionSettings { +private val SCRIPT_LANGUAGE_SETTINGS = Key.create>("SCRIPT_LANGUAGE_SETTINGS") + +private fun getLanguageSettingsForScripts(project: Project, scriptDefinition: KotlinScriptDefinition): ScriptLanguageSettings { val args = scriptDefinition.additionalCompilerArguments return if (args == null || args.none()) { - project.getLanguageVersionSettings() + ScriptLanguageSettings(project.getLanguageVersionSettings(), TargetPlatformVersion.NoVersion) } else { - val settings = scriptDefinition.getUserData(LANGUAGE_VERSION_SETTINGS) ?: createCachedValue(project) { + val settings = scriptDefinition.getUserData(SCRIPT_LANGUAGE_SETTINGS) ?: createCachedValue(project) { val compilerArguments = K2JVMCompilerArguments() parseCommandLineArguments(args.toList(), compilerArguments) // TODO: reporting - compilerArguments.configureLanguageVersionSettings(MessageCollector.NONE) - }.also { scriptDefinition.putUserData(LANGUAGE_VERSION_SETTINGS, it) } + val verSettings = compilerArguments.configureLanguageVersionSettings(MessageCollector.NONE) + val jvmTarget = compilerArguments.jvmTarget?.let { JvmTarget.fromString(it) } ?: TargetPlatformVersion.NoVersion + ScriptLanguageSettings(verSettings, jvmTarget) + }.also { scriptDefinition.putUserData(SCRIPT_LANGUAGE_SETTINGS, it) } settings.value } } -private fun createCachedValue(project: Project, body: () -> LanguageVersionSettings): CachedValue { +private fun createCachedValue(project: Project, body: () -> ScriptLanguageSettings): CachedValue { return CachedValuesManager .getManager(project) .createCachedValue(