Skip to content

Commit f310733

Browse files
committed
feat: add new symbol processor
1 parent 7b07e73 commit f310733

File tree

29 files changed

+663
-428
lines changed

29 files changed

+663
-428
lines changed

annotations/build.gradle.kts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@ plugins {
22
id("co.anitrend.support.query.builder.plugin")
33
}
44

5+
// Ensure Kotlin module metadata is generated properly
6+
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
7+
compilerOptions {
8+
// Ensure module metadata is generated
9+
freeCompilerArgs.addAll(listOf(
10+
"-Xjvm-default=all",
11+
"-opt-in=kotlin.RequiresOptIn"
12+
))
13+
}
14+
}
15+
16+
// Ensure JAR task includes proper metadata
17+
tasks.jar {
18+
manifest {
19+
attributes["Implementation-Title"] = project.name
20+
attributes["Implementation-Version"] = project.version
21+
}
22+
}
23+
524
tasks.withType<GenerateModuleMetadata> {
625
dependsOn(":annotations:classesJar")
726
}

build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
// Top-level build file where you can add configuration options common to all sub-projects/modules.
2+
import org.jetbrains.dokka.gradle.DokkaMultiModuleTask
3+
4+
plugins {
5+
id("org.jetbrains.dokka")
6+
}
17
buildscript {
28
repositories {
39
google()
@@ -19,3 +25,8 @@ allprojects {
1925
}
2026
}
2127
}
28+
29+
tasks.withType(DokkaMultiModuleTask::class.java) {
30+
outputDirectory.set(rootProject.file("dokka-docs"))
31+
failOnWarning.set(false)
32+
}

buildSrc/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
plugins {
22
`kotlin-dsl`
33
`maven-publish`
4-
`version-catalog`
54
}
65

76
repositories {
@@ -29,6 +28,8 @@ dependencies {
2928
/* Depend on the default Gradle API's since we want to build a custom plugin */
3029
implementation(gradleApi())
3130
implementation(localGroovy())
31+
32+
implementation(kotlin("test"))
3233

3334
/** Work around to include ../.gradle/LibrariesForLibs generated file for version catalog */
3435
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))

buildSrc/src/main/java/co/anitrend/support/query/builder/buildSrc/module/Modules.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ internal object Modules {
1616
}
1717

1818
enum class Processor(override val id: String) : Module {
19-
Kapt("processor")
19+
Kapt("processor"),
20+
Ksp("processor")
2021
}
2122

2223
enum class Common(override val id: String) : Module {

buildSrc/src/main/java/co/anitrend/support/query/builder/buildSrc/plugins/components/ProjectConfiguration.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package co.anitrend.support.query.builder.buildSrc.plugins.components
22

3-
import co.anitrend.support.query.builder.buildSrc.extension.*
43
import co.anitrend.support.query.builder.buildSrc.extension.baseAppExtension
54
import co.anitrend.support.query.builder.buildSrc.extension.baseExtension
5+
import co.anitrend.support.query.builder.buildSrc.extension.isSampleModule
6+
import co.anitrend.support.query.builder.buildSrc.extension.props
67
import com.android.build.gradle.internal.dsl.DefaultConfig
78
import org.gradle.api.JavaVersion
89
import org.gradle.api.Project
10+
import org.gradle.api.tasks.testing.Test
911
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
1012
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
1113
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
@@ -100,6 +102,11 @@ internal fun Project.configureAndroid(): Unit = baseExtension().run {
100102
}
101103
}
102104

105+
tasks.withType(Test::class.java) {
106+
useJUnitPlatform()
107+
failOnNoDiscoveredTests.set(false)
108+
}
109+
103110
tasks.withType(KotlinJvmCompile::class.java) {
104111
compilerOptions {
105112
jvmTarget.set(JvmTarget.JVM_21)

buildSrc/src/main/java/co/anitrend/support/query/builder/buildSrc/plugins/components/ProjectPlugins.kt

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package co.anitrend.support.query.builder.buildSrc.plugins.components
22

3+
import co.anitrend.support.query.builder.buildSrc.extension.isKotlinLibraryGroup
4+
import co.anitrend.support.query.builder.buildSrc.extension.isProcessorModule
5+
import co.anitrend.support.query.builder.buildSrc.extension.isSampleModule
36
import org.gradle.api.Project
47
import org.gradle.api.plugins.PluginContainer
5-
import co.anitrend.support.query.builder.buildSrc.extension.isSampleModule
6-
import co.anitrend.support.query.builder.buildSrc.extension.isProcessorModule
7-
import co.anitrend.support.query.builder.buildSrc.extension.isKotlinLibraryGroup
88

99
private fun addAndroidPlugin(project: Project, pluginContainer: PluginContainer) {
1010
when {
@@ -28,14 +28,7 @@ private fun addKotlinAndroidPlugin(project: Project, pluginContainer: PluginCont
2828
pluginContainer.apply("kotlin-android")
2929
}
3030

31-
private fun addAnnotationProcessor(project: Project, pluginContainer: PluginContainer) {
32-
if (project.isSampleModule() || project.isProcessorModule())
33-
pluginContainer.apply("kotlin-kapt")
34-
}
35-
36-
3731
internal fun Project.configurePlugins() {
3832
addAndroidPlugin(project, plugins)
3933
addKotlinAndroidPlugin(project, plugins)
40-
addAnnotationProcessor(project, plugins)
4134
}

buildSrc/src/main/java/co/anitrend/support/query/builder/buildSrc/plugins/components/ProjectProperties.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ enum class PropertyTypes(val key: String) {
1010
VERSION("version"),
1111
}
1212

13-
class PropertiesReader(project: Project) {
13+
class PropertiesReader(project: Project, path: String = "gradle/version.properties") {
1414
@Suppress("NewApi")
1515
private val properties = Properties(2)
1616

1717
init {
18-
val releaseFile = File(project.rootDir, "gradle/version.properties")
18+
val releaseFile = File(project.rootDir, path)
1919
if (!releaseFile.exists()) {
2020
project.logger.error("Release file cannot be found in path: $releaseFile")
2121
}

buildSrc/src/main/java/co/anitrend/support/query/builder/buildSrc/plugins/strategy/DependencyStrategy.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package co.anitrend.support.query.builder.buildSrc.plugins.strategy
22

3-
import co.anitrend.support.query.builder.buildSrc.extension.*
3+
import co.anitrend.support.query.builder.buildSrc.extension.implementation
4+
import co.anitrend.support.query.builder.buildSrc.extension.isSampleModule
5+
import co.anitrend.support.query.builder.buildSrc.extension.libs
6+
import co.anitrend.support.query.builder.buildSrc.extension.test
47
import org.gradle.api.Project
58
import org.gradle.api.artifacts.dsl.DependencyHandler
69

@@ -12,13 +15,14 @@ internal class DependencyStrategy(private val project: Project) {
1215

1316
test(project.libs.junit)
1417
test(project.libs.mockk)
18+
test(project.libs.jetbrains.kotlin.test)
1519
}
1620

1721
private fun DependencyHandler.applyLifeCycleDependencies() {
1822
implementation(project.libs.androidx.lifecycle.extensions)
19-
implementation(project.libs.androidx.lifecycle.runTimeKtx)
20-
implementation(project.libs.androidx.lifecycle.liveDataKtx)
21-
implementation(project.libs.androidx.lifecycle.liveDataCoreKtx)
23+
implementation(project.libs.androidx.lifecycle.runTime.ktx)
24+
implementation(project.libs.androidx.lifecycle.liveData.ktx)
25+
implementation(project.libs.androidx.lifecycle.liveDataCore.ktx)
2226
}
2327

2428
fun applyDependenciesOn(handler: DependencyHandler) {

core/ext/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ tasks.withType<com.android.build.gradle.internal.lint.AndroidLintAnalysisTask> {
1313
dependencies {
1414
implementation(project(":core"))
1515

16-
implementation(libs.androidx.sqliteKtx)
16+
implementation(libs.androidx.sqlite.ktx)
1717
}
1818

1919
tasks.withType<Test> {

gradle/libs.versions.toml

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,95 @@
11
[versions]
2-
ktlint = "1.1.1"
2+
ktlint = "1.5.0"
33

44
gradle-plugin = "8.12.1"
55

66
androidx-appcompat = "1.7.1"
77

8-
androidx-core = "1.9.0"
98
androidx-lifecycle = "2.9.2"
109
androidx-navigation = "2.9.3"
1110
androidx-room = "2.7.2"
1211
androidx-sqlite = "2.5.2"
13-
androidx-test-ext = "1.3.0"
1412

1513
jetbrains-dokka = "2.0.0"
1614
jetbrains-kotlin = "2.2.10"
1715

1816
io-mockk = "1.14.5"
1917

20-
spek2-spek = "2.0.19"
18+
google-devtools-ksp = "2.2.0-2.0.2"
2119

20+
squareup-kotlinpoet = "2.2.0"
21+
google-auto-service = "1.1.1"
2222

23-
[plugins]
24-
android-junit5 = { id = "de.mannodermaus.android-junit5", version = "1.13.1.0" }
23+
kotlin-compile-testing = "0.8.0"
24+
25+
junit5 = "5.13.4"
2526

27+
[plugins]
28+
google-devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "google-devtools-ksp" }
2629

2730
[libraries]
28-
timber = "com.jakewharton.timber:timber:5.0.1"
29-
junit = "junit:junit:4.13.2"
31+
timber = { module = "com.jakewharton.timber:timber", version = "5.0.1" }
32+
junit = { module ="junit:junit", version = "4.13.2" }
33+
junit5-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit5" }
34+
junit5-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit5" }
3035

3136
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "gradle-plugin" }
3237

33-
androidx-activityKtx = "androidx.activity:activity-ktx:1.10.1"
38+
androidx-activity = { module = "androidx.activity:activity", version = "1.10.1" }
39+
androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version = "1.10.1" }
3440

3541
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
3642
androidx-appcompatResources = { module = "androidx.appcompat:appcompat-resources", version.ref = "androidx-appcompat" }
3743

3844
androidx-constraintLayout = "androidx.constraintlayout:constraintlayout:2.2.1"
3945

40-
androidx-fragmentKtx = "androidx.fragment:fragment-ktx:1.8.9"
46+
androidx-fragment = { module = "androidx.fragment:fragment", version = "1.8.9" }
47+
androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version = "1.8.9" }
4148

42-
androidx-lifecycle-extensions = "androidx.lifecycle:lifecycle-extensions:2.2.0"
43-
androidx-lifecycle-runTimeKtx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
44-
androidx-lifecycle-liveDataKtx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidx-lifecycle" }
45-
androidx-lifecycle-liveDataCoreKtx = { module = "androidx.lifecycle:lifecycle-livedata-core-ktx", version.ref = "androidx-lifecycle" }
49+
androidx-lifecycle-extensions = { module = "androidx.lifecycle:lifecycle-extensions", version = "2.2.0" }
50+
androidx-lifecycle-runTime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
51+
androidx-lifecycle-liveData-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidx-lifecycle" }
52+
androidx-lifecycle-liveDataCore-ktx = { module = "androidx.lifecycle:lifecycle-livedata-core-ktx", version.ref = "androidx-lifecycle" }
4653

47-
androidx-navigation-fragmentKtx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "androidx-navigation" }
48-
androidx-navigation-uiKtx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "androidx-navigation" }
54+
androidx-navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "androidx-navigation" }
55+
androidx-navigation-fragment = { module = "androidx.navigation:navigation-fragment", version.ref = "androidx-navigation" }
56+
androidx-navigation-ui = { module = "androidx.navigation:navigation-ui", version.ref = "androidx-navigation" }
57+
androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "androidx-navigation" }
4958

5059
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidx-room" }
5160
androidx-room-common = { module = "androidx.room:room-common", version.ref = "androidx-room" }
5261
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "androidx-room" }
5362
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" }
5463

5564
androidx-sqlite = { module = "androidx.sqlite:sqlite", version.ref = "androidx-sqlite" }
56-
androidx-sqliteKtx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "androidx-sqlite" }
65+
androidx-sqlite-ktx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "androidx-sqlite" }
5766

5867
androidx-test-core = { module = "androidx.test:core", version = "1.7.0" }
59-
androidx-test-coreKtx = { module = "androidx.test:core-ktx", version = "1.7.0" }
68+
androidx-test-core-ktx = { module = "androidx.test:core-ktx", version = "1.7.0" }
6069
androidx-test-runner = { module = "androidx.test:runner", version = "1.7.0" }
6170
androidx-test-rules = { module = "androidx.test:rules", version = "1.7.0" }
6271

63-
androidx-junitKtx = { module = "androidx.test.ext:junit-ktx", version.ref = "androidx-test-ext" }
64-
65-
google-auto-service = "com.google.auto.service:auto-service:1.1.1"
72+
google-auto-service = { module = "com.google.auto.service:auto-service-annotations", version.ref = "google-auto-service" }
73+
auto-service-ksp = "dev.zacsweers.autoservice:auto-service-ksp:1.2.0"
6674
google-android-material = "com.google.android.material:material:1.12.0"
6775

6876
jetbrains-dokka-gradle = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "jetbrains-dokka" }
6977
jetbrains-kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "jetbrains-kotlin" }
7078
jetbrains-kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "jetbrains-kotlin" }
7179
jetbrains-kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "jetbrains-kotlin" }
80+
jetbrains-kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "jetbrains-kotlin" }
7281

7382
mockk = { module = "io.mockk:mockk", version.ref = "io-mockk" }
7483
mockk-android = { module = "io.mockk:mockk-android", version.ref = "io-mockk" }
7584

7685
spotless-gradle = "com.diffplug.spotless:spotless-plugin-gradle:7.2.1"
86+
pintrest-ktlint = { module = "com.pinterest:ktlint", version.ref = "ktlint" }
7787

78-
squareup-kotlinpoet = "com.squareup:kotlinpoet:2.2.0"
79-
80-
tschuchortdev-kotlin-compile-testing = "com.github.tschuchortdev:kotlin-compile-testing:1.6.0"
81-
82-
gradle-plugins-android-junit5 = "de.mannodermaus.gradle.plugins:android-junit5:1.13.1.0"
88+
squareup-kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "squareup-kotlinpoet" }
89+
squareup-kotlinpoet-ksp = { module = "com.squareup:kotlinpoet-ksp", version.ref = "squareup-kotlinpoet" }
8390

84-
spek2-spek-dsl-jvm = { module = "org.spekframework.spek2:spek-dsl-jvm", version.ref = "spek2-spek" }
85-
spek2-spek-runner-junit5 = { module = "org.spekframework.spek2:spek-runner-junit5", version.ref = "spek2-spek" }
91+
google-devtools-ksp = { module = "com.google.devtools.ksp:symbol-processing", version.ref = "google-devtools-ksp" }
92+
google-devtools-ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "google-devtools-ksp" }
8693

87-
pintrest-ktlint = { module = "com.pinterest:ktlint", version.ref = "ktlint" }
94+
kotlin-compile-testing = { module = "dev.zacsweers.kctfork:core", version.ref = "kotlin-compile-testing" }
95+
kotlin-compile-testing-ksp = { module = "dev.zacsweers.kctfork:ksp", version.ref ="kotlin-compile-testing" }

0 commit comments

Comments
 (0)