Skip to content

Commit 056acbf

Browse files
committed
Add support (preprocess and remap) for mods written in Kotlin
1 parent 5ac5221 commit 056acbf

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@ repositories {
4646
dependencies {
4747
implementation(gradleApi())
4848
compile(localGroovy())
49-
implementation("com.github.replaymod:remap:d2c7f45")
49+
implementation("com.github.replaymod:remap:fb0e54a")
5050
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionSha256Sum=7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-bin.zip
4+
distributionSha256Sum=0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

src/main/kotlin/com/replaymod/gradle/preprocess/PreprocessPlugin.kt

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.replaymod.gradle.preprocess
33
import org.gradle.api.Plugin
44
import org.gradle.api.Project
55
import org.gradle.api.Task
6+
import org.gradle.api.file.SourceDirectorySet
67
import org.gradle.api.tasks.Copy
78
import org.gradle.api.tasks.SourceSetContainer
89
import org.gradle.api.tasks.compile.AbstractCompile
@@ -13,6 +14,8 @@ import java.util.*
1314

1415
class PreprocessPlugin : Plugin<Project> {
1516
override fun apply(project: Project) {
17+
val kotlin = project.plugins.hasPlugin("kotlin")
18+
1619
val coreVersionFile = project.file("../mainVersion")
1720
val mappingFiles = findMappingFiles(project)
1821

@@ -24,6 +27,12 @@ class PreprocessPlugin : Plugin<Project> {
2427
project.the<SourceSetContainer>().configureEach {
2528
java.setSrcDirs(listOf(parent.file("src/$name/java")))
2629
resources.setSrcDirs(listOf(parent.file("src/$name/resources")))
30+
if (kotlin) {
31+
withGroovyBuilder { getProperty("kotlin") as SourceDirectorySet }.setSrcDirs(listOf(
32+
parent.file("src/$name/kotlin"),
33+
parent.file("src/$name/java")
34+
))
35+
}
2736
}
2837
} else {
2938
val core = project.byVersion(coreVersion)
@@ -61,30 +70,45 @@ class PreprocessPlugin : Plugin<Project> {
6170
project.the<SourceSetContainer>().configureEach {
6271
val inheritedSourceSet = inherited.the<SourceSetContainer>()[name]
6372
val cName = if (name == "main") "" else name.capitalize()
73+
val preprocessedKotlin = File(project.buildDir, "preprocessed/$name/kotlin")
6474
val preprocessedJava = File(project.buildDir, "preprocessed/$name/java")
6575
val preprocessedResources = File(project.buildDir, "preprocessed/$name/resources")
6676

77+
if (kotlin) {
78+
val preprocessKotlin = project.tasks.register<PreprocessTask>("preprocess${cName}Kotlin") {
79+
source = inherited.file(inheritedSourceSet.withGroovyBuilder { getProperty("kotlin") as SourceDirectorySet }.srcDirs.first())
80+
generated = preprocessedKotlin
81+
compileTask(inherited.tasks["compile${cName}Kotlin"] as AbstractCompile)
82+
mapping = mappingFile
83+
reverseMapping = coreVersion < mcVersion
84+
vars = mutableMapOf("MC" to mcVersion)
85+
}
86+
val sourceKotlinTask = project.tasks.findByName("source${name.capitalize()}Kotlin")
87+
(sourceKotlinTask ?: project.tasks["compile${cName}Kotlin"]).dependsOn(preprocessKotlin)
88+
withGroovyBuilder { getProperty("kotlin") as SourceDirectorySet }.setSrcDirs(listOf(preprocessKotlin, preprocessedJava))
89+
}
90+
6791
val preprocessJava = project.tasks.register<PreprocessTask>("preprocess${cName}Java") {
6892
source = inherited.file(inheritedSourceSet.java.srcDirs.first())
6993
generated = preprocessedJava
7094
compileTask(inherited.tasks["compile${cName}Java"] as AbstractCompile)
95+
if (kotlin) {
96+
compileTask(inherited.tasks["compile${cName}Kotlin"] as AbstractCompile)
97+
}
7198
mapping = mappingFile
7299
reverseMapping = coreVersion < mcVersion
73100
vars = mutableMapOf("MC" to mcVersion)
74101
}
102+
val sourceJavaTask = project.tasks.findByName("source${name.capitalize()}Java")
103+
(sourceJavaTask ?: project.tasks["compile${cName}Java"]).dependsOn(preprocessJava)
104+
java.setSrcDirs(listOf(preprocessedJava))
75105

76106
val preprocessResources = project.tasks.register<PreprocessTask>("preprocess${cName}Resources") {
77107
source = inherited.file(inheritedSourceSet.resources.srcDirs.first())
78108
generated = preprocessedResources
79109
vars = mutableMapOf("MC" to mcVersion)
80110
}
81-
82-
val sourceJavaTask = project.tasks.findByName("source${name.capitalize()}Java")
83-
(sourceJavaTask ?: project.tasks["compile${cName}Java"]).dependsOn(preprocessJava)
84-
85111
project.tasks["process${cName}Resources"].dependsOn(preprocessResources)
86-
87-
java.setSrcDirs(listOf(preprocessedJava))
88112
resources.setSrcDirs(listOf(preprocessedResources))
89113
}
90114

@@ -107,6 +131,9 @@ class PreprocessPlugin : Plugin<Project> {
107131
project.the<SourceSetContainer>().all {
108132
val cName = if (name == "main") "" else name.capitalize()
109133

134+
if (kotlin) {
135+
dependsOn(project.tasks.named("preprocess${cName}Kotlin"))
136+
}
110137
dependsOn(project.tasks.named("preprocess${cName}Java"))
111138
dependsOn(project.tasks.named("preprocess${cName}Resources"))
112139
}

src/main/kotlin/com/replaymod/gradle/preprocess/PreprocessTask.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ open class PreprocessTask : DefaultTask() {
8282
@Input
8383
var keywords: MutableMap<String, Keywords> = mutableMapOf(
8484
".java" to DEFAULT_KEYWORDS,
85+
".kt" to DEFAULT_KEYWORDS,
8586
".gradle" to DEFAULT_KEYWORDS,
8687
".json" to DEFAULT_KEYWORDS,
8788
".mcmeta" to DEFAULT_KEYWORDS,
@@ -300,7 +301,7 @@ open class PreprocessTask : DefaultTask() {
300301
}.toTypedArray()
301302
val sources = mutableMapOf<String, String>()
302303
project.fileTree(source).forEach { file ->
303-
if (file.name.endsWith(".java")) {
304+
if (file.name.endsWith(".java") || file.name.endsWith(".kt")) {
304305
val relPath = inPath.relativize(file.toPath())
305306
sources[relPath.toString()] = file.readText()
306307
}

0 commit comments

Comments
 (0)