fixup! ~ attempt to set jvm target for scratch files
diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt
index b0117bb..88901e0 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt
@@ -56,7 +56,7 @@
}
override val platform: TargetPlatform
- get() = TargetPlatformDetector.getPlatform4Script(project, scriptDefinition)
+ get() = TargetPlatformDetector.getPlatform4Script(project, scriptFile, scriptDefinition)
override val analyzerServices: PlatformDependentAnalyzerServices
get() = JvmPlatformAnalyzerServices
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 2ea01a8..62f3a21 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
@@ -22,6 +22,7 @@
import com.intellij.openapi.roots.ProjectFileIndex
import com.intellij.openapi.roots.ProjectRootModificationTracker
import com.intellij.openapi.util.Key
+import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
@@ -40,6 +41,7 @@
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.project.platform
+import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.TargetPlatformVersion
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
import org.jetbrains.kotlin.platform.subplatformsOfType
@@ -58,10 +60,20 @@
is LibraryInfo -> project.getLanguageVersionSettings(
jsr305State = computeJsr305State(project), isReleaseCoroutines = isReleaseCoroutines
)
- is ScriptModuleInfo ->
- getLanguageSettingsForScripts(project, null, moduleInfo.scriptDefinition).languageVersionSettings
+ is ScriptModuleInfo -> {
+ getLanguageSettingsForScripts(
+ project,
+ moduleInfo.scriptFile,
+ moduleInfo.scriptDefinition
+ ).languageVersionSettings
+ }
+
is ScriptDependenciesInfo.ForFile ->
- getLanguageSettingsForScripts(project, null, moduleInfo.scriptDefinition).languageVersionSettings
+ getLanguageSettingsForScripts(
+ project,
+ moduleInfo.scriptFile,
+ moduleInfo.scriptDefinition
+ ).languageVersionSettings
is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings
else -> project.getLanguageVersionSettings()
}
@@ -87,10 +99,8 @@
is ModuleSourceInfo ->
moduleInfo.module.platform?.subplatformsOfType<JdkPlatform>()?.firstOrNull()?.targetVersion
?: TargetPlatformVersion.NoVersion
- is ScriptModuleInfo ->
- getLanguageSettingsForScripts(project, null, moduleInfo.scriptDefinition).targetPlatformVersion
- is ScriptDependenciesInfo.ForFile ->
- getLanguageSettingsForScripts(project, null, moduleInfo.scriptDefinition).targetPlatformVersion
+ is ScriptModuleInfo,
+ is ScriptDependenciesInfo.ForFile -> detectDefaultTargetPlatformVersion(moduleInfo.platform)
else -> TargetPlatformVersion.NoVersion
}
}
@@ -102,37 +112,30 @@
private val SCRIPT_LANGUAGE_SETTINGS = Key.create<CachedValue<ScriptLanguageSettings>>("SCRIPT_LANGUAGE_SETTINGS")
-fun getTargetPlatformVersionForScript(file: KtFile, scriptDefinition: ScriptDefinition): TargetPlatformVersion {
- val scriptModule =
- file.originalFile.virtualFile?.let {
- it.scriptRelatedModuleName?.let { ModuleManager.getInstance(file.project).findModuleByName(it) }
- ?: ProjectFileIndex.SERVICE.getInstance(file.project).getModuleForFile(it);
- }
-
- return getLanguageSettingsForScripts(file.project, scriptModule, scriptDefinition).targetPlatformVersion
+fun getTargetPlatformVersionForScript(project: Project, file: VirtualFile, scriptDefinition: ScriptDefinition): TargetPlatformVersion {
+ return getLanguageSettingsForScripts(project, file, scriptDefinition).targetPlatformVersion
}
-fun getTargetPlatformVersionForScripts(project: Project, scriptDefinition: ScriptDefinition): TargetPlatformVersion {
- return getLanguageSettingsForScripts(project, null, scriptDefinition).targetPlatformVersion
+private fun detectDefaultTargetPlatformVersion(platform: TargetPlatform?): TargetPlatformVersion {
+ return platform?.subplatformsOfType<JdkPlatform>()?.firstOrNull()?.targetVersion ?: TargetPlatformVersion.NoVersion
}
-private fun getLanguageSettingsForScripts(project: Project, module: Module?, scriptDefinition: ScriptDefinition): ScriptLanguageSettings {
-
- fun detectDefaultTargetPlatformVersion(): TargetPlatformVersion {
- val platform = module?.let { TargetPlatformDetector.getPlatform(it) } ?: project.platform
- return platform?.subplatformsOfType<JdkPlatform>()?.firstOrNull()?.targetVersion ?: TargetPlatformVersion.NoVersion
+private fun getLanguageSettingsForScripts(project: Project, file: VirtualFile, scriptDefinition: ScriptDefinition): ScriptLanguageSettings {
+ val scriptModule = file.let {
+ it.scriptRelatedModuleName?.let { ModuleManager.getInstance(project).findModuleByName(it) }
+ ?: ProjectFileIndex.SERVICE.getInstance(project).getModuleForFile(it)
}
val args = scriptDefinition.compilerOptions
return if (args == null || args.none()) {
- ScriptLanguageSettings(project.getLanguageVersionSettings(), detectDefaultTargetPlatformVersion())
+ ScriptLanguageSettings(project.getLanguageVersionSettings(), detectDefaultTargetPlatformVersion(scriptModule?.platform))
} else {
val settings = scriptDefinition.getUserData(SCRIPT_LANGUAGE_SETTINGS) ?: createCachedValue(project) {
val compilerArguments = K2JVMCompilerArguments()
parseCommandLineArguments(args.toList(), compilerArguments)
// TODO: reporting
val verSettings = compilerArguments.toLanguageVersionSettings(MessageCollector.NONE)
- val jvmTarget = compilerArguments.jvmTarget?.let { JvmTarget.fromString(it) } ?: detectDefaultTargetPlatformVersion()
+ val jvmTarget = compilerArguments.jvmTarget?.let { JvmTarget.fromString(it) } ?: detectDefaultTargetPlatformVersion(scriptModule?.platform)
ScriptLanguageSettings(verSettings, jvmTarget)
}.also { scriptDefinition.putUserData(SCRIPT_LANGUAGE_SETTINGS, it) }
settings.value
diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java
index 028f8be..8f66eb5 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java
@@ -64,7 +64,7 @@
final ScriptDefinition scriptDefinition =
ReadAction.compute(() -> file.isScript() ? DefinitionsKt.findScriptDefinition(file) : null);
if (scriptDefinition != null) {
- return getPlatform4Script(file, scriptDefinition);
+ return getPlatform4Script(file.getProject(), file.getOriginalFile().getVirtualFile(), scriptDefinition);
}
VirtualFile virtualFile = file.getOriginalFile().getVirtualFile();
@@ -84,16 +84,13 @@
}
@NotNull
- public static TargetPlatform getPlatform4Script(@NotNull Project project, @NotNull ScriptDefinition scriptDefinition) {
+ public static TargetPlatform getPlatform4Script(
+ @NotNull Project project,
+ @NotNull VirtualFile file,
+ @NotNull ScriptDefinition scriptDefinition
+ ) {
TargetPlatformVersion targetPlatformVersion =
- IDELanguageSettingsProviderKt.getTargetPlatformVersionForScripts(project, scriptDefinition);
- return getPlatform4ScriptImpl(targetPlatformVersion, scriptDefinition);
- }
-
- @NotNull
- public static TargetPlatform getPlatform4Script(@NotNull KtFile file, @NotNull ScriptDefinition scriptDefinition) {
- TargetPlatformVersion targetPlatformVersion =
- IDELanguageSettingsProviderKt.getTargetPlatformVersionForScript(file, scriptDefinition);
+ IDELanguageSettingsProviderKt.getTargetPlatformVersionForScript(project, file, scriptDefinition);
return getPlatform4ScriptImpl(targetPlatformVersion, scriptDefinition);
}