Skip to content

Commit b9871a0

Browse files
Kotlinx datetime mappers module (#252)
* Added module mappie-kotlinx-datetime and refactored tests * Added module mappie-kotlinx-datetime and refactored tests * Bck-up changes * Bck-up changes * Register MappieErrors in FirRegistrar * Migrated tests from main to new style * Updated changelog * Unused imports * Workaround for not being able to add mappie-api dependency in KMP * Migrated from SPI module injection to manual module loading * Fix build * Fix build on Linux * Increase test heap size
1 parent a68414b commit b9871a0

File tree

163 files changed

+2515
-2451
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+2515
-2451
lines changed

.github/workflows/release.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ on:
77
type: boolean
88
default: true
99
description: Release mappie-api project
10+
release_module_kotlinx_datetime:
11+
type: boolean
12+
default: true
13+
description: Release module kotlinx-datetime project
1014
release_compiler_plugin:
1115
type: boolean
1216
default: true
@@ -61,6 +65,7 @@ jobs:
6165
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
6266
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6367
RELEASE_API: ${{ inputs.release_api }}
68+
RELEASE_MODULE_KOTLINX_DATETIME: ${{ inputs.release_module_kotlinx_datetime }}
6469
RELEASE_COMPILER_PLUGIN: ${{ inputs.release_compiler_plugin }}
6570
RELEASE_MAVEN_PLUGIN: ${{ inputs.release_maven_plugin }}
6671
RELEASE_GRADLE_PLUGIN: ${{ inputs.release_gradle_plugin }}

build.gradle.kts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
import org.jreleaser.model.Signing
22

33
plugins {
4-
alias(libs.plugins.kotlin.jvm)
5-
alias(libs.plugins.kotlin.multiplatform) apply false
4+
id("mappie-convention")
5+
java
66
alias(libs.plugins.jreleaser)
77
}
88

9-
allprojects {
10-
group = "tech.mappie"
11-
description = "Kotlin compiler plugin for generating object mappers"
12-
version = properties["version"] as String
13-
}
14-
159
tasks.jreleaserFullRelease.configure {
1610
notCompatibleWithConfigurationCache("Disable configuration-cache for jreleaser")
1711
}
@@ -45,6 +39,9 @@ jreleaser {
4539
if (System.getenv("RELEASE_API") == "true") {
4640
add("mappie-api")
4741
}
42+
if (System.getenv("RELEASE_MODULE_KOTLINX_DATETIME") == "true") {
43+
add("module:kotlinx-datetime")
44+
}
4845
if (System.getenv("RELEASE_MAVEN_PLUGIN") == "true") {
4946
add("maven-plugin")
5047
}

buildSrc/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
plugins {
22
`kotlin-dsl`
33
}
4+
5+
dependencies {
6+
implementation(libs.kotlin.multiplatform.gradle.plugin)
7+
implementation(libs.kotlin.jvm.gradle.plugin)
8+
implementation(libs.dokka.gradle.plugin)
9+
}

buildSrc/settings.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ pluginManagement {
55
}
66

77
dependencyResolutionManagement {
8+
versionCatalogs {
9+
create("libs") {
10+
from(files("../gradle/libs.versions.toml"))
11+
}
12+
}
813
repositories {
914
mavenCentral()
1015
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
plugins {
2+
id("mappie-convention")
3+
kotlin("multiplatform")
4+
id("org.jetbrains.dokka")
5+
}
6+
7+
val dokkaHtml by tasks.dokkaGeneratePublicationHtml
8+
tasks.register<Jar>("javadocJar") {
9+
group = "build"
10+
description = "Assemble a javadoc jar containing the Dokka pages of the 'main' feature."
11+
archiveClassifier = "javadoc"
12+
from(dokkaHtml.outputDirectory)
13+
dependsOn(dokkaHtml)
14+
}
15+
16+
tasks.register<Jar>("emptyJar") {
17+
group = "build"
18+
description = "Assemble an empty jar."
19+
}
20+
21+
tasks.withType<Test> {
22+
useJUnitPlatform()
23+
24+
maxParallelForks = Runtime.getRuntime().availableProcessors() / 2
25+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
group = "tech.mappie"
2+
description = "Kotlin compiler plugin for generating object mappers"
3+
version = properties["version"] as String
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
plugins {
2+
id("mappie-convention")
3+
kotlin("jvm")
4+
}
5+
6+
tasks.withType<Test> {
7+
useJUnitPlatform()
8+
9+
maxHeapSize = "1024m"
10+
maxParallelForks = Runtime.getRuntime().availableProcessors() / 2
11+
}

compiler-plugin/build.gradle.kts

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
22

33
plugins {
4-
alias(libs.plugins.kotlin.jvm)
5-
id("java-test-fixtures")
4+
id("mappie-jvm-convention")
5+
alias(libs.plugins.com.github.gmazzo.buildconfig)
66
id("maven-publish")
77
}
88

@@ -13,35 +13,37 @@ kotlin {
1313
dependencies {
1414
compileOnly(libs.kotlin.compiler.embeddable)
1515

16-
testFixturesImplementation(project(":mappie-api"))
17-
testFixturesImplementation(libs.kotlin.compiler.embeddable)
18-
testFixturesImplementation(libs.classgraph)
19-
testFixturesImplementation(libs.okio)
20-
testFixturesImplementation(libs.assertj.core)
16+
compileOnly(project(":mappie-api"))
17+
compileOnly(project(":modules:kotlinx-datetime"))
2118

2219
testImplementation(project(":mappie-api"))
20+
testImplementation(project(":testutil"))
2321
testImplementation(kotlin("reflect"))
2422
testImplementation(kotlin("test"))
2523
testImplementation(libs.assertj.core)
2624
testImplementation(libs.kotlin.compiler.embeddable)
2725
}
2826

27+
tasks.jar {
28+
from(project(":mappie-api").sourceSets.named("jvmMain").map { it.output })
29+
from(project(":modules:kotlinx-datetime").sourceSets.named("jvmMain").map { it.output })
30+
}
31+
2932
java {
3033
withSourcesJar()
3134
withJavadocJar()
3235
}
3336

37+
buildConfig {
38+
buildConfigField("VERSION", version.toString())
39+
}
40+
3441
publishing {
3542
publications {
3643
create<MavenPublication>("kotlin") {
44+
from(components["java"])
3745
artifactId = "mappie-compiler-plugin"
38-
39-
from((components["java"] as AdhocComponentWithVariants).apply {
40-
withVariantsFromConfiguration(configurations["testFixturesApiElements"]) { skip() }
41-
withVariantsFromConfiguration(configurations["testFixturesRuntimeElements"]) { skip() }
42-
})
43-
44-
mappiePom(name = "tech.mappie:compiler-plugin")
46+
mappiePom(name = "tech.mappie:mappie-compiler-plugin")
4547
}
4648
}
4749

@@ -52,16 +54,6 @@ publishing {
5254
}
5355
}
5456

55-
tasks.withType<Test> {
56-
useJUnitPlatform()
57-
58-
maxParallelForks = Runtime.getRuntime().availableProcessors() / 2
59-
}
60-
6157
tasks.withType<KotlinCompile>().configureEach {
6258
compilerOptions.freeCompilerArgs.add("-opt-in=org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI")
6359
}
64-
65-
tasks.compileTestFixturesKotlin.configure {
66-
compilerOptions.freeCompilerArgs.add("-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi")
67-
}

compiler-plugin/src/main/kotlin/tech/mappie/MappieCompilerPluginRegistrar.kt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@ import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
1010
import org.jetbrains.kotlin.config.CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY
1111
import org.jetbrains.kotlin.config.CompilerConfiguration
1212
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
13+
import org.jetbrains.kotlin.konan.file.File
1314
import tech.mappie.MappieCommandLineProcessor.Companion.ARGUMENT_REPORT_DIR
1415
import tech.mappie.MappieCommandLineProcessor.Companion.ARGUMENT_REPORT_ENABLED
1516
import tech.mappie.MappieCommandLineProcessor.Companion.ARGUMENT_USE_DEFAULT_ARGUMENTS
1617
import tech.mappie.MappieCommandLineProcessor.Companion.ARGUMENT_WARNINGS_AS_ERRORS
18+
import tech.mappie.compiler_plugin.BuildConfig
1719
import tech.mappie.config.MappieConfiguration
20+
import tech.mappie.config.MappieModule
1821
import tech.mappie.fir.MappieFirRegistrar
1922
import tech.mappie.ir.MappieIrRegistrar
23+
import kotlin.text.Regex
2024

2125
@OptIn(ExperimentalCompilerApi::class)
2226
class MappieCompilerPluginRegistrar : CompilerPluginRegistrar() {
@@ -25,7 +29,12 @@ class MappieCompilerPluginRegistrar : CompilerPluginRegistrar() {
2529

2630
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
2731
val config = MappieConfiguration(
28-
isMappieDebugMode = isStartedWithTestFixtures(configuration),
32+
modules = buildList {
33+
if (configuration.isStartedWithDependency(MODULE_KOTLINX_DATETIME_REGEX)) {
34+
add(MappieModule.KOTLINX_DATETIME)
35+
}
36+
},
37+
isMappieDebugMode = configuration.isStartedWithDependency(TESTUTIL_REGEX),
2938
warningsAsErrors = configuration.get(ARGUMENT_WARNINGS_AS_ERRORS, false),
3039
useDefaultArguments = configuration.get(ARGUMENT_USE_DEFAULT_ARGUMENTS, true),
3140
strictEnums = configuration.get(ARGUMENT_STRICTNESS_ENUMS, true),
@@ -37,11 +46,23 @@ class MappieCompilerPluginRegistrar : CompilerPluginRegistrar() {
3746
IrGenerationExtension.registerExtension(MappieIrRegistrar(configuration.get(MESSAGE_COLLECTOR_KEY, NONE), config))
3847
}
3948

40-
private fun isStartedWithTestFixtures(configuration: CompilerConfiguration) =
41-
configuration.moduleChunk
49+
private fun CompilerConfiguration.isStartedWithDependency(pattern: Regex) =
50+
moduleChunk
4251
?.modules
43-
?.firstOrNull { it.getModuleName() == "main" }
44-
?.getClasspathRoots()
45-
?.any { it.matches(Regex(".*compiler-plugin-.*-test-fixtures.*\\.jar")) }
52+
?.flatMap { it.getClasspathRoots() }
53+
?.any { it.matches(pattern) }
4654
?: false
55+
56+
companion object {
57+
private val SEPARATOR = Regex.escapeReplacement(File.separator)
58+
59+
private val MODULE_KOTLINX_DATETIME_REGEX = Regex(
60+
"(.*modules${SEPARATOR}kotlinx-datetime${SEPARATOR}build${SEPARATOR}classes${SEPARATOR}kotlin${SEPARATOR}jvm${SEPARATOR}main)|(.*module-kotlinx-datetime.*-${BuildConfig.VERSION}.*)"
61+
)
62+
63+
private val TESTUTIL_REGEX = Regex(
64+
".*testutil-${BuildConfig.VERSION}.*\\.jar"
65+
)
66+
67+
}
4768
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package tech.mappie.config
22

33
data class MappieConfiguration(
4+
val modules: List<MappieModule>,
45
val isMappieDebugMode: Boolean,
56
val warningsAsErrors: Boolean,
67
val useDefaultArguments: Boolean,
78
val strictEnums: Boolean,
89
val strictVisiblity: Boolean,
910
val reportEnabled: Boolean,
1011
val reportDir: String,
11-
)
12+
)
13+
14+
enum class MappieModule { KOTLINX_DATETIME }

0 commit comments

Comments
 (0)