Use script compiler options to calculate target platform in IDE
#KT-25822 fixed
This commit is contained in:
@@ -188,7 +188,7 @@ class ResolverForProjectImpl<M : ModuleInfo>(
|
|||||||
|
|
||||||
val languageVersionSettings =
|
val languageVersionSettings =
|
||||||
moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project, isReleaseCoroutines)
|
moduleLanguageSettingsProvider.getLanguageVersionSettings(module, projectContext.project, isReleaseCoroutines)
|
||||||
val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module)
|
val targetPlatformVersion = moduleLanguageSettingsProvider.getTargetPlatform(module, projectContext.project)
|
||||||
|
|
||||||
resolverForModuleFactory.createResolverForModule(
|
resolverForModuleFactory.createResolverForModule(
|
||||||
descriptor as ModuleDescriptorImpl,
|
descriptor as ModuleDescriptorImpl,
|
||||||
@@ -433,7 +433,7 @@ interface LanguageSettingsProvider {
|
|||||||
project: Project
|
project: Project
|
||||||
) = getLanguageVersionSettings(moduleInfo, project, null)
|
) = getLanguageVersionSettings(moduleInfo, project, null)
|
||||||
|
|
||||||
fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion
|
fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion
|
||||||
|
|
||||||
object Default : LanguageSettingsProvider {
|
object Default : LanguageSettingsProvider {
|
||||||
override fun getLanguageVersionSettings(
|
override fun getLanguageVersionSettings(
|
||||||
@@ -442,7 +442,7 @@ interface LanguageSettingsProvider {
|
|||||||
isReleaseCoroutines: Boolean?
|
isReleaseCoroutines: Boolean?
|
||||||
) = LanguageVersionSettingsImpl.DEFAULT
|
) = LanguageVersionSettingsImpl.DEFAULT
|
||||||
|
|
||||||
override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion = TargetPlatformVersion.NoVersion
|
override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = TargetPlatformVersion.NoVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,10 @@ object CommonAnalyzerFacade : ResolverForModuleFactory() {
|
|||||||
isReleaseCoroutines: Boolean?
|
isReleaseCoroutines: Boolean?
|
||||||
) = multiplatformLanguageSettings
|
) = multiplatformLanguageSettings
|
||||||
|
|
||||||
override fun getTargetPlatform(moduleInfo: ModuleInfo) = TargetPlatformVersion.NoVersion
|
override fun getTargetPlatform(
|
||||||
|
moduleInfo: ModuleInfo,
|
||||||
|
project: Project
|
||||||
|
) = TargetPlatformVersion.NoVersion
|
||||||
},
|
},
|
||||||
resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade },
|
resolverForModuleFactoryByPlatform = { CommonAnalyzerFacade },
|
||||||
platformParameters = { _ -> CommonAnalysisParameters(metadataPartProviderFactory) }
|
platformParameters = { _ -> CommonAnalysisParameters(metadataPartProviderFactory) }
|
||||||
|
|||||||
+1
-1
@@ -276,7 +276,7 @@ internal object IDELightClassContexts {
|
|||||||
|
|
||||||
val moduleInfo = files.first().getModuleInfo()
|
val moduleInfo = files.first().getModuleInfo()
|
||||||
val container = createContainer("LightClassStub", JvmPlatform) {
|
val container = createContainer("LightClassStub", JvmPlatform) {
|
||||||
val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo) as? JvmTarget
|
val jvmTarget = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project) as? JvmTarget
|
||||||
configureModule(
|
configureModule(
|
||||||
ModuleContext(moduleDescriptor, project), JvmPlatform,
|
ModuleContext(moduleDescriptor, project), JvmPlatform,
|
||||||
jvmTarget ?: JvmTarget.DEFAULT, trace
|
jvmTarget ?: JvmTarget.DEFAULT, trace
|
||||||
|
|||||||
+24
-12
@@ -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.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
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.KotlinFacetSettingsProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
@@ -50,8 +51,8 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
|||||||
is LibraryInfo -> project.getLanguageVersionSettings(
|
is LibraryInfo -> project.getLanguageVersionSettings(
|
||||||
jsr305State = computeJsr305State(project), isReleaseCoroutines = isReleaseCoroutines
|
jsr305State = computeJsr305State(project), isReleaseCoroutines = isReleaseCoroutines
|
||||||
)
|
)
|
||||||
is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
is ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).languageVersionSettings
|
||||||
is ScriptDependenciesInfo.ForFile -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).languageVersionSettings
|
||||||
is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings
|
is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings
|
||||||
else -> project.getLanguageVersionSettings()
|
else -> project.getLanguageVersionSettings()
|
||||||
}
|
}
|
||||||
@@ -71,29 +72,40 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTargetPlatform(moduleInfo: ModuleInfo): TargetPlatformVersion {
|
override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion =
|
||||||
return (moduleInfo as? ModuleSourceInfo)?.module?.targetPlatform?.version ?: TargetPlatformVersion.NoVersion
|
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<CachedValue<LanguageVersionSettings>>("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<CachedValue<ScriptLanguageSettings>>("SCRIPT_LANGUAGE_SETTINGS")
|
||||||
|
|
||||||
|
private fun getLanguageSettingsForScripts(project: Project, scriptDefinition: KotlinScriptDefinition): ScriptLanguageSettings {
|
||||||
val args = scriptDefinition.additionalCompilerArguments
|
val args = scriptDefinition.additionalCompilerArguments
|
||||||
return if (args == null || args.none()) {
|
return if (args == null || args.none()) {
|
||||||
project.getLanguageVersionSettings()
|
ScriptLanguageSettings(project.getLanguageVersionSettings(), TargetPlatformVersion.NoVersion)
|
||||||
} else {
|
} else {
|
||||||
val settings = scriptDefinition.getUserData(LANGUAGE_VERSION_SETTINGS) ?: createCachedValue(project) {
|
val settings = scriptDefinition.getUserData(SCRIPT_LANGUAGE_SETTINGS) ?: createCachedValue(project) {
|
||||||
val compilerArguments = K2JVMCompilerArguments()
|
val compilerArguments = K2JVMCompilerArguments()
|
||||||
parseCommandLineArguments(args.toList(), compilerArguments)
|
parseCommandLineArguments(args.toList(), compilerArguments)
|
||||||
// TODO: reporting
|
// TODO: reporting
|
||||||
compilerArguments.configureLanguageVersionSettings(MessageCollector.NONE)
|
val verSettings = compilerArguments.configureLanguageVersionSettings(MessageCollector.NONE)
|
||||||
}.also { scriptDefinition.putUserData(LANGUAGE_VERSION_SETTINGS, it) }
|
val jvmTarget = compilerArguments.jvmTarget?.let { JvmTarget.fromString(it) } ?: TargetPlatformVersion.NoVersion
|
||||||
|
ScriptLanguageSettings(verSettings, jvmTarget)
|
||||||
|
}.also { scriptDefinition.putUserData(SCRIPT_LANGUAGE_SETTINGS, it) }
|
||||||
settings.value
|
settings.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCachedValue(project: Project, body: () -> LanguageVersionSettings): CachedValue<LanguageVersionSettings> {
|
private fun createCachedValue(project: Project, body: () -> ScriptLanguageSettings): CachedValue<ScriptLanguageSettings> {
|
||||||
return CachedValuesManager
|
return CachedValuesManager
|
||||||
.getManager(project)
|
.getManager(project)
|
||||||
.createCachedValue(
|
.createCachedValue(
|
||||||
|
|||||||
Reference in New Issue
Block a user