Pavel Shishkin
4 months ago
29 changed files with 56 additions and 312 deletions
@ -1,70 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. |
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. |
|
||||||
*/ |
|
||||||
|
|
||||||
package internal |
|
||||||
|
|
||||||
import internal.ComposeCompilerArtifactProvider.DefaultCompiler.pluginArtifact |
|
||||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact |
|
||||||
|
|
||||||
// Partially copy-pasted from https://github.com/JetBrains/compose-multiplatform/tree/master/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose |
|
||||||
internal class ComposeCompilerArtifactProvider( |
|
||||||
private val customPluginString: () -> String |
|
||||||
) { |
|
||||||
val compilerArtifact: SubpluginArtifact by lazy { |
|
||||||
val customPlugin = customPluginString() |
|
||||||
val customCoordinates = customPlugin.split(":") |
|
||||||
when (customCoordinates.size) { |
|
||||||
1 -> { |
|
||||||
val customVersion = customCoordinates[0] |
|
||||||
check(customVersion.isNotBlank()) { "'compose.kotlinCompilerPlugin' cannot be blank!" } |
|
||||||
pluginArtifact(version = customVersion) |
|
||||||
} |
|
||||||
3 -> pluginArtifact( |
|
||||||
version = customCoordinates[2], |
|
||||||
groupId = customCoordinates[0], |
|
||||||
artifactId = customCoordinates[1], |
|
||||||
) |
|
||||||
else -> error(""" |
|
||||||
Illegal format of 'compose.kotlinCompilerPlugin' property. |
|
||||||
Expected format: either '<VERSION>' or '<GROUP_ID>:<ARTIFACT_ID>:<VERSION>' |
|
||||||
Actual value: '$customPlugin' |
|
||||||
""".trimIndent()) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
val compilerHostedArtifact: SubpluginArtifact |
|
||||||
get() = compilerArtifact.run { |
|
||||||
val newArtifactId = |
|
||||||
if (groupId == DefaultCompiler.GROUP_ID && artifactId == DefaultCompiler.ARTIFACT_ID) { |
|
||||||
DefaultCompiler.HOSTED_ARTIFACT_ID |
|
||||||
} else artifactId |
|
||||||
|
|
||||||
copy(artifactId = newArtifactId) |
|
||||||
} |
|
||||||
|
|
||||||
internal object DefaultCompiler { |
|
||||||
const val GROUP_ID = "org.jetbrains.compose.compiler" |
|
||||||
const val ARTIFACT_ID = "compiler" |
|
||||||
const val HOSTED_ARTIFACT_ID = "compiler-hosted" |
|
||||||
|
|
||||||
fun pluginArtifact( |
|
||||||
version: String, |
|
||||||
groupId: String = GROUP_ID, |
|
||||||
artifactId: String = ARTIFACT_ID, |
|
||||||
): SubpluginArtifact = |
|
||||||
SubpluginArtifact(groupId = groupId, artifactId = artifactId, version = version) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
internal fun SubpluginArtifact.copy( |
|
||||||
groupId: String? = null, |
|
||||||
artifactId: String? = null, |
|
||||||
version: String? = null |
|
||||||
): SubpluginArtifact = |
|
||||||
SubpluginArtifact( |
|
||||||
groupId = groupId ?: this.groupId, |
|
||||||
artifactId = artifactId ?: this.artifactId, |
|
||||||
version = version ?: this.version |
|
||||||
) |
|
@ -1,50 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. |
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. |
|
||||||
*/ |
|
||||||
|
|
||||||
package internal |
|
||||||
|
|
||||||
import org.gradle.api.Project |
|
||||||
import org.gradle.api.provider.Provider |
|
||||||
import org.jetbrains.kotlin.gradle.plugin.* |
|
||||||
|
|
||||||
// Partially copy-pasted from https://github.com/JetBrains/compose-multiplatform/tree/master/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose |
|
||||||
class InternalComposeSupportPlugin : KotlinCompilerPluginSupportPlugin { |
|
||||||
private lateinit var composeCompilerArtifactProvider: ComposeCompilerArtifactProvider |
|
||||||
|
|
||||||
override fun apply(target: Project) { |
|
||||||
super.apply(target) |
|
||||||
|
|
||||||
val composeCompilerVersion = target.properties["compose.kotlinCompilerPluginVersion"] as? String |
|
||||||
?: error("'compose.kotlinCompilerPluginVersion' is not defined") |
|
||||||
composeCompilerArtifactProvider = ComposeCompilerArtifactProvider { composeCompilerVersion } |
|
||||||
} |
|
||||||
|
|
||||||
override fun getCompilerPluginId(): String = "androidx.compose.compiler.plugins.kotlin" |
|
||||||
|
|
||||||
override fun getPluginArtifact(): SubpluginArtifact = |
|
||||||
composeCompilerArtifactProvider.compilerArtifact |
|
||||||
|
|
||||||
override fun getPluginArtifactForNative(): SubpluginArtifact = |
|
||||||
composeCompilerArtifactProvider.compilerHostedArtifact |
|
||||||
|
|
||||||
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true |
|
||||||
|
|
||||||
override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider<List<SubpluginOption>> { |
|
||||||
val target = kotlinCompilation.target |
|
||||||
return target.project.provider { emptyList() } |
|
||||||
} |
|
||||||
|
|
||||||
private fun options(vararg options: Pair<String, String>): List<SubpluginOption> = |
|
||||||
options.map { SubpluginOption(it.first, it.second) } |
|
||||||
} |
|
||||||
|
|
||||||
val Project.composeVersion: String |
|
||||||
get() = properties["compose.version"] as? String |
|
||||||
?: error("'compose.version' is not defined") |
|
||||||
|
|
||||||
val Project.composeRuntimeDependency: String |
|
||||||
get() = properties["compose.runtime.artifactId"] as? String |
|
||||||
?: properties["compose.runtime.groupId"]?.let { it.toString() + ":runtime:$composeVersion" } |
|
||||||
?: "org.jetbrains.compose.runtime:runtime:${composeVersion}" |
|
@ -1,5 +1,5 @@ |
|||||||
[versions] |
[versions] |
||||||
kotlinx-datetime = "0.5.0" |
kotlin="2.0.20-RC" |
||||||
|
|
||||||
[libraries] |
[plugins] |
||||||
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } |
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } |
||||||
|
Loading…
Reference in new issue