Pick up script language level from used stdlib in a gradle's classpath
^KT-41283 Fixed
This commit is contained in:
+2
-1
@@ -16,7 +16,8 @@ class GradleKotlinScriptDefinitionWrapper(
|
||||
hostConfiguration: ScriptingHostConfiguration,
|
||||
legacyDefinition: KotlinScriptDefinitionFromAnnotatedTemplate,
|
||||
gradleVersion: String,
|
||||
) : ScriptDefinition.FromLegacy(hostConfiguration, legacyDefinition) {
|
||||
defaultCompilerOptions: Iterable<String>
|
||||
) : ScriptDefinition.FromLegacy(hostConfiguration, legacyDefinition, defaultCompilerOptions) {
|
||||
override val compilationConfiguration by lazy {
|
||||
ScriptCompilationConfigurationFromDefinition(
|
||||
hostConfiguration,
|
||||
|
||||
+2
-1
@@ -15,7 +15,8 @@ class GradleKotlinScriptDefinitionWrapper(
|
||||
hostConfiguration: ScriptingHostConfiguration,
|
||||
legacyDefinition: KotlinScriptDefinitionFromAnnotatedTemplate,
|
||||
gradleVersion: String,
|
||||
) : ScriptDefinition.FromLegacy(hostConfiguration, legacyDefinition) {
|
||||
defaultCompilerOptions: Iterable<String>
|
||||
) : ScriptDefinition.FromLegacy(hostConfiguration, legacyDefinition, defaultCompilerOptions) {
|
||||
override val compilationConfiguration by lazy {
|
||||
ScriptCompilationConfigurationFromDefinition(
|
||||
hostConfiguration,
|
||||
|
||||
+21
-2
@@ -11,6 +11,7 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.util.EnvironmentUtil
|
||||
import com.intellij.util.PathUtil
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle
|
||||
import org.jetbrains.kotlin.idea.core.script.*
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener
|
||||
@@ -125,6 +126,19 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
file?.name?.startsWith("kotlin-compiler-embeddable") == true || file?.name?.startsWith("kotlin-stdlib") == true
|
||||
}?.firstOrNull()?.let(::listOf).orEmpty()
|
||||
}
|
||||
|
||||
private val kotlinStdLibSelector = Regex("^(kotlin-compiler-embeddable|kotlin-stdlib)-(\\d+\\.\\d+).*\\.jar\$")
|
||||
|
||||
fun findStdLibLanguageVersion(classpath: List<File>): LanguageVersion? {
|
||||
return classpath.map { it.parentFile }.toSet().map {
|
||||
it.listFiles { file ->
|
||||
kotlinStdLibSelector.find(file.name) != null
|
||||
}.firstOrNull()?.let { file ->
|
||||
val matchResult = kotlinStdLibSelector.find(file.name) ?: return@let null
|
||||
LanguageVersion.fromVersionString(matchResult.groupValues[2])
|
||||
}
|
||||
}.firstOrNull()
|
||||
}
|
||||
}
|
||||
|
||||
override val id: String = "Gradle Kotlin DSL"
|
||||
@@ -236,12 +250,16 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
projectPath,
|
||||
GradleConstants.SYSTEM_ID
|
||||
)
|
||||
val defaultCompilerOptions = findStdLibLanguageVersion(templateClasspath)?.let {
|
||||
listOf("-language-version", it.versionString)
|
||||
} ?: emptyList<String>()
|
||||
val hostConfiguration = createHostConfiguration(projectPath, gradleHome, javaHome, gradleExeSettings)
|
||||
return loadDefinitionsFromTemplates(
|
||||
listOf(templateClass),
|
||||
templateClasspath,
|
||||
hostConfiguration,
|
||||
additionalClassPath
|
||||
additionalClassPath,
|
||||
defaultCompilerOptions
|
||||
).map {
|
||||
it.asLegacyOrNull<KotlinScriptDefinitionFromAnnotatedTemplate>()?.let { legacyDef ->
|
||||
// Expand scope for old gradle script definition
|
||||
@@ -249,7 +267,8 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
GradleKotlinScriptDefinitionWrapper(
|
||||
it.hostConfiguration,
|
||||
legacyDef,
|
||||
version
|
||||
version,
|
||||
defaultCompilerOptions
|
||||
)
|
||||
} ?: it
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user