Fix target platform for scripts
^KT-31837 Fixed
This commit is contained in:
+4
-3
@@ -11,13 +11,14 @@ import com.intellij.openapi.vfs.VirtualFile
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||||
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDependenciesProvider
|
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDependenciesProvider
|
||||||
|
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
|
||||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
|
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||||
|
|
||||||
data class ScriptModuleInfo(
|
data class ScriptModuleInfo(
|
||||||
val project: Project,
|
val project: Project,
|
||||||
@@ -51,7 +52,7 @@ data class ScriptModuleInfo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val platform: TargetPlatform
|
override val platform: TargetPlatform
|
||||||
get() = JvmPlatforms.unspecifiedJvmPlatform // TODO(dsavvinov): choose proper target version
|
get() = TargetPlatformDetector.getPlatform(project, scriptDefinition)
|
||||||
|
|
||||||
override val analyzerServices: PlatformDependentAnalyzerServices
|
override val analyzerServices: PlatformDependentAnalyzerServices
|
||||||
get() = JvmPlatformAnalyzerServices
|
get() = JvmPlatformAnalyzerServices
|
||||||
|
|||||||
+6
-2
@@ -32,14 +32,14 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
|||||||
import org.jetbrains.kotlin.config.JvmTarget
|
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.platform.TargetPlatformVersion
|
|
||||||
import org.jetbrains.kotlin.idea.caches.project.*
|
import org.jetbrains.kotlin.idea.caches.project.*
|
||||||
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.project.platform
|
import org.jetbrains.kotlin.idea.project.platform
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
import org.jetbrains.kotlin.platform.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
|
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
|
||||||
import org.jetbrains.kotlin.platform.subplatformOfType
|
import org.jetbrains.kotlin.platform.subplatformOfType
|
||||||
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||||
import org.jetbrains.kotlin.utils.Jsr305State
|
import org.jetbrains.kotlin.utils.Jsr305State
|
||||||
|
|
||||||
object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
||||||
@@ -92,6 +92,10 @@ private data class ScriptLanguageSettings(
|
|||||||
|
|
||||||
private val SCRIPT_LANGUAGE_SETTINGS = Key.create<CachedValue<ScriptLanguageSettings>>("SCRIPT_LANGUAGE_SETTINGS")
|
private val SCRIPT_LANGUAGE_SETTINGS = Key.create<CachedValue<ScriptLanguageSettings>>("SCRIPT_LANGUAGE_SETTINGS")
|
||||||
|
|
||||||
|
fun getTargetPlatformVersionForScripts(project: Project, scriptDefinition: ScriptDefinition): TargetPlatformVersion {
|
||||||
|
return getLanguageSettingsForScripts(project, scriptDefinition).targetPlatformVersion
|
||||||
|
}
|
||||||
|
|
||||||
private fun getLanguageSettingsForScripts(project: Project, scriptDefinition: ScriptDefinition): ScriptLanguageSettings {
|
private fun getLanguageSettingsForScripts(project: Project, scriptDefinition: ScriptDefinition): ScriptLanguageSettings {
|
||||||
val args = scriptDefinition.compilerOptions
|
val args = scriptDefinition.compilerOptions
|
||||||
return if (args == null || args.none()) {
|
return if (args == null || args.none()) {
|
||||||
|
|||||||
+28
-8
@@ -18,12 +18,14 @@ package org.jetbrains.kotlin.idea.project;
|
|||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import kotlin.collections.CollectionsKt;
|
import kotlin.collections.CollectionsKt;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProviderKt;
|
||||||
import org.jetbrains.kotlin.platform.*;
|
import org.jetbrains.kotlin.platform.*;
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms;
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms;
|
||||||
import org.jetbrains.kotlin.psi.KtCodeFragment;
|
import org.jetbrains.kotlin.psi.KtCodeFragment;
|
||||||
@@ -61,14 +63,7 @@ public class TargetPlatformDetector {
|
|||||||
if (file.isScript()) {
|
if (file.isScript()) {
|
||||||
ScriptDefinition scriptDefinition = DefinitionsKt.findScriptDefinition(file);
|
ScriptDefinition scriptDefinition = DefinitionsKt.findScriptDefinition(file);
|
||||||
if (scriptDefinition != null) {
|
if (scriptDefinition != null) {
|
||||||
String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
|
return getPlatform(file.getProject(), scriptDefinition);
|
||||||
for (TargetPlatform compilerPlatform : CommonPlatforms.INSTANCE.getAllSimplePlatforms()) {
|
|
||||||
// FIXME(dsavvinov): get rid of matching by name
|
|
||||||
SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform);
|
|
||||||
if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) {
|
|
||||||
return compilerPlatform;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,4 +83,29 @@ public class TargetPlatformDetector {
|
|||||||
return ProjectStructureUtil.getCachedPlatformForModule(module);
|
return ProjectStructureUtil.getCachedPlatformForModule(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static TargetPlatform getPlatform(@NotNull Project project, @NotNull ScriptDefinition scriptDefinition) {
|
||||||
|
String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
|
||||||
|
TargetPlatformVersion targetPlatformVersion =
|
||||||
|
IDELanguageSettingsProviderKt.getTargetPlatformVersionForScripts(project, scriptDefinition);
|
||||||
|
if (!targetPlatformVersion.equals(TargetPlatformVersion.NoVersion.INSTANCE)) {
|
||||||
|
for (TargetPlatform compilerPlatform : CommonPlatforms.INSTANCE.getAllSimplePlatforms()) {
|
||||||
|
SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform);
|
||||||
|
if (simplePlatform.getTargetPlatformVersion() == targetPlatformVersion) {
|
||||||
|
return compilerPlatform;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (TargetPlatform compilerPlatform : CommonPlatforms.INSTANCE.getAllSimplePlatforms()) {
|
||||||
|
// FIXME(dsavvinov): get rid of matching by name
|
||||||
|
SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform);
|
||||||
|
if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) {
|
||||||
|
return compilerPlatform;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefaultIdeTargetPlatformKindProvider.Companion.getDefaultPlatform();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user