Skip to content

Commit bc0ca83

Browse files
committed
ksp milestone 3
1 parent a1064ae commit bc0ca83

File tree

8 files changed

+46
-34
lines changed

8 files changed

+46
-34
lines changed

application/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ buildscript {
1313
)
1414
)
1515
}
16+
17+
Forma.registerConfiguration("ksp", libs.plugins.devtools.ksp, libs.room.compiler)

application/settings.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ fun VersionCatalogBuilder.addPlugin(
6969
notation: String,
7070
version: String,
7171
vararg dependencies: String,
72-
nameGenerator: (String) -> String = ::pluginNameGenerator
72+
nameGenerator: (String) -> String = ::pluginNameGenerator,
73+
depNameGenerator: (String) -> String = ::defaultNameGenerator
7374
) {
7475
val name = nameGenerator(notation)
7576
plugin(name, notation).version { strictly(version) }
77+
dependencies.forEach { addLibrary(it, depNameGenerator) }
7678
}
7779

7880
// todo split lib name and version

plugins/android/src/main/java/androidProjectConfiguration.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import tools.forma.android.utils.register
99
import tools.forma.config.SettingsStore
1010
import tools.forma.config.AndroidProjectSettings
1111
import tools.forma.config.FormaSettingsStore
12+
import tools.forma.config.PluginInfoStore
1213

1314
// TODO: add docs for every fun param
1415
/**
@@ -124,4 +125,4 @@ val buildScriptConfiguration: ScriptHandlerScope.(List<Any>) -> Unit = { classpa
124125
* Singleton project configuration store
125126
* TODO remove
126127
*/
127-
object Forma: SettingsStore<AndroidProjectSettings> by FormaSettingsStore
128+
object Forma: SettingsStore<AndroidProjectSettings> by FormaSettingsStore, PluginInfoStore by FormaSettingsStore

plugins/android/src/main/java/tools/forma/android/dependencies/kotlin.kt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,6 @@ object jetbrains {
1515
}
1616

1717
object kotlin {
18-
val stdlib_common =
19-
"org.jetbrains.kotlin:kotlin-stdlib-common:${Forma.settings.kotlinVersion}".dep
20-
val stdlib =
21-
deps(
22-
"org.jetbrains.kotlin:kotlin-stdlib:${Forma.settings.kotlinVersion}".dep,
23-
jetbrains.annotations,
24-
stdlib_common
25-
)
26-
val stdlib_jdk7 =
27-
deps("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Forma.settings.kotlinVersion}".dep, stdlib)
28-
val stdlib_jdk8 =
29-
deps(
30-
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Forma.settings.kotlinVersion}".dep,
31-
stdlib,
32-
stdlib_jdk7
33-
)
3418
val reflect =
35-
deps("org.jetbrains.kotlin:kotlin-reflect:${Forma.settings.kotlinVersion}".dep, stdlib)
19+
deps("org.jetbrains.kotlin:kotlin-reflect:${Forma.settings.kotlinVersion}".dep)
3620
}

plugins/android/src/main/java/tools/forma/android/feature/Kotlin.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ fun kotlinFeatureDefinition() = FeatureDefinition(
2727
pluginName = "kotlin",
2828
pluginExtension = KotlinJvmProjectExtension::class,
2929
featureConfiguration = {},
30-
defaultDependencies = kotlin.stdlib_jdk8,
3130
configuration = featureConfiguration()
3231
)
3332

@@ -43,15 +42,14 @@ fun kotlinAndroidFeatureDefinition() = FeatureDefinition(
4342
pluginName = "kotlin-android",
4443
pluginExtension = KotlinAndroidProjectExtension::class,
4544
featureConfiguration = {},
46-
defaultDependencies = kotlin.stdlib_jdk8,
4745
configuration = featureConfiguration()
4846
)
4947

5048
fun kotlinKaptFeatureDefinition() = FeatureDefinition(
5149
pluginName = "kotlin-kapt",
5250
pluginExtension = KaptExtension::class,
5351
featureConfiguration = {},
54-
defaultDependencies = deps(kotlin.stdlib_jdk8, "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.2.0".kapt),
52+
defaultDependencies = deps("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.2.0".kapt),
5553
configuration = featureConfiguration()
5654
)
5755

plugins/config/src/main/java/tools/forma/config/AndroidProjectSettings.kt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import org.gradle.api.artifacts.Dependency
55
import org.gradle.api.artifacts.dsl.RepositoryHandler
66
import org.gradle.api.provider.Provider
77
import org.gradle.plugin.use.PluginDependency
8+
import tools.forma.config.FormaSettingsStore.configurations
9+
import tools.forma.config.FormaSettingsStore.dependencies
10+
import tools.forma.config.FormaSettingsStore.dependencyPlugins
811

912
/**
1013
* Limitations:
@@ -49,8 +52,8 @@ object FormaSettingsStore : SettingsStore<AndroidProjectSettings>, PluginInfoSto
4952
}
5053

5154
override val plugins: MutableMap<Provider<PluginDependency>, PluginConfiguration> = mutableMapOf()
52-
override val dependencyPlugins: MutableMap<Provider<Dependency>, PluginConfiguration> = mutableMapOf()
53-
override val dependencies: MutableMap<Provider<Dependency>, DependencyConfiguration> = mutableMapOf()
55+
override val dependencyPlugins: MutableMap<Provider<out Dependency>, PluginConfiguration> = mutableMapOf()
56+
override val dependencies: MutableMap<Provider<out Dependency>, DependencyConfiguration> = mutableMapOf()
5457
override val configurations: MutableMap<String, Provider<PluginDependency>> = mutableMapOf()
5558
}
5659

@@ -60,19 +63,27 @@ interface SettingsStore<T : Any> {
6063
}
6164

6265
data class PluginConfiguration(val plugin: Provider<PluginDependency>, val configuration: String)
63-
data class DependencyConfiguration(val dependency: Provider<Dependency>, val configuration: String)
66+
data class DependencyConfiguration(val dependency: Provider<out Dependency>, val configuration: String)
6467

6568
interface PluginInfoStore {
6669
val plugins: MutableMap<Provider<PluginDependency>, PluginConfiguration>
67-
val dependencyPlugins: MutableMap<Provider<Dependency>, PluginConfiguration>
68-
val dependencies: MutableMap<Provider<Dependency>, DependencyConfiguration>
70+
val dependencyPlugins: MutableMap<Provider<out Dependency>, PluginConfiguration>
71+
val dependencies: MutableMap<Provider<out Dependency>, DependencyConfiguration>
6972
val configurations: MutableMap<String, Provider<PluginDependency>>
73+
74+
fun registerConfiguration(configuration: String, plugin: Provider<PluginDependency>, vararg dependencies: Provider<out Dependency>) {
75+
registerPlugin(plugin, configuration)
76+
77+
dependencies.forEach { dependency ->
78+
registerDependency(dependency, configuration)
79+
}
80+
}
7081
fun registerPlugin(plugin: Provider<PluginDependency>, configuration: String){
7182
configurations[configuration] = plugin
7283
plugins[plugin] = PluginConfiguration(plugin, configuration)
7384
}
7485

75-
fun registerDependency(dependency: Provider<Dependency>, configuration: String){
86+
fun registerDependency(dependency: Provider<out Dependency>, configuration: String){
7687
if (configurations.containsKey(configuration)) {
7788
dependencyPlugins[dependency] = plugins[configurations[configuration]!!]!!
7889
dependencies[dependency] = DependencyConfiguration(dependency, configuration)
@@ -81,5 +92,5 @@ interface PluginInfoStore {
8192
}
8293
}
8394

84-
fun getPlugin(dependency: Provider<Dependency>): PluginConfiguration? = dependencyPlugins[dependency]
95+
fun pluginFor(dependency: Provider<out Dependency>): PluginConfiguration? = dependencyPlugins[dependency]
8596
}

plugins/deps-core/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ version = "0.0.1"
99
dependencies {
1010
implementation(project(":validation"))
1111
implementation(project(":target"))
12+
implementation(project(":config"))
1213
}

plugins/deps-core/src/main/java/dependencies.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import org.gradle.api.Project
33
import org.gradle.api.artifacts.Dependency
44
import org.gradle.api.artifacts.ExternalModuleDependencyBundle
55
import org.gradle.api.provider.Provider
6+
import tools.forma.config.FormaSettingsStore
67
import tools.forma.deps.ConfigurationType
8+
import tools.forma.deps.Custom
79
import tools.forma.deps.DepType
810
import tools.forma.deps.EmptyDependency
911
import tools.forma.deps.FileDependency
@@ -29,8 +31,16 @@ val DepType.targets: List<TargetSpec>
2931
val DepType.files: List<FileSpec>
3032
get(): List<FileSpec> = filterIsInstance(FileSpec::class.java)
3133

32-
val <T : Dependency> Provider<T>.dep: NameSpec
33-
get() = with(get()) { NameSpec("$group:$name:$version", Implementation) }
34+
val Provider<out Dependency>.dep: NameSpec
35+
get() {
36+
val pluginConf = FormaSettingsStore.pluginFor(this)
37+
return with(get()) {
38+
NameSpec(
39+
"$group:$name:$version",
40+
pluginConf?.configuration?.let(::Custom) ?: Implementation
41+
)
42+
}
43+
}
3444

3545
val Dependency.dep: NameSpec
3646
get() = NameSpec("$group:$name:$version", Implementation)
@@ -108,10 +118,13 @@ fun deps(vararg dependencies: NamedDependency): NamedDependency =
108118

109119
fun deps(vararg dependencies: Provider<*>): NamedDependency =
110120
dependencies
111-
.map { it.get() }
112-
.flatMap { source ->
121+
.flatMap { provider ->
122+
val source = provider.get()
123+
@Suppress("UNCHECKED_CAST")
113124
when (source) {
114-
is Dependency -> listOf(source.dep)
125+
// here we need to call .dep on provider to get the correct configuration
126+
// since on configuration phase we don't have the actual dependency
127+
is Dependency -> listOf((provider as Provider<Dependency>).dep)
115128
is ExternalModuleDependencyBundle -> source.map { it.dep }
116129
else ->
117130
throw IllegalArgumentException(

0 commit comments

Comments
 (0)