aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Herzig <jonas@spark-squared.com>2023-05-26 16:15:06 +0200
committerJonas Herzig <jonas@spark-squared.com>2023-05-26 16:17:29 +0200
commit3a12dc22d6ec3924067c7b32582cb6a1ed113344 (patch)
treefb573032a4ad77ccbf56d0566b29bcb2bcd08dd3
parent6c6edca8f9baba53bb464d9f836a544b2f4a19cb (diff)
downloadRemap-3a12dc22d6ec3924067c7b32582cb6a1ed113344.tar.gz
Remap-3a12dc22d6ec3924067c7b32582cb6a1ed113344.tar.bz2
Remap-3a12dc22d6ec3924067c7b32582cb6a1ed113344.zip
Allow JDK_HOME to be set explicitly, required for Kotlin 1.8+
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt15
-rw-r--r--src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt2
2 files changed, 17 insertions, 0 deletions
diff --git a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt
index 7fbec6f..6e8dae1 100644
--- a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt
+++ b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
+import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem
import org.jetbrains.kotlin.com.intellij.codeInsight.CustomExceptionHandler
import org.jetbrains.kotlin.com.intellij.mock.MockProject
import org.jetbrains.kotlin.com.intellij.openapi.Disposable
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.utils.PathUtil
import java.io.BufferedReader
import java.io.File
import java.io.IOException
@@ -41,6 +43,8 @@ import kotlin.system.exitProcess
class Transformer(private val map: MappingSet) {
var classpath: Array<String>? = null
var remappedClasspath: Array<String>? = null
+ var jdkHome: File? = null
+ var remappedJdkHome: File? = null
var patternAnnotation: String? = null
var manageImports = false
@@ -67,6 +71,7 @@ class Transformer(private val map: MappingSet) {
val config = CompilerConfiguration()
config.put(CommonConfigurationKeys.MODULE_NAME, "main")
+ jdkHome?.let {config.setupJdk(it) }
config.add<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, JavaSourceRoot(tmpDir.toFile(), ""))
config.add<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, KotlinSourceRoot(tmpDir.toAbsolutePath().toString(), false))
config.addAll<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, classpath!!.map { JvmClasspathRoot(File(it)) })
@@ -152,8 +157,18 @@ class Transformer(private val map: MappingSet) {
}
}
+ private fun CompilerConfiguration.setupJdk(jdkHome: File) {
+ put(JVMConfigurationKeys.JDK_HOME, jdkHome)
+
+ if (!CoreJrtFileSystem.isModularJdk(jdkHome)) {
+ val roots = PathUtil.getJdkClassesRoots(jdkHome).map { JvmClasspathRoot(it, true) }
+ addAll(CLIConfigurationKeys.CONTENT_ROOTS, 0, roots)
+ }
+ }
+
private fun setupRemappedProject(disposable: Disposable, classpath: Array<String>, sourceRoot: Path): KotlinCoreEnvironment {
val config = CompilerConfiguration()
+ (remappedJdkHome ?: jdkHome)?.let { config.setupJdk(it) }
config.put(CommonConfigurationKeys.MODULE_NAME, "main")
config.addAll(CLIConfigurationKeys.CONTENT_ROOTS, classpath.map { JvmClasspathRoot(File(it)) })
if (manageImports) {
diff --git a/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt b/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt
index d1ed905..06f8788 100644
--- a/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt
+++ b/src/test/kotlin/com/replaymod/gradle/remap/util/TestData.kt
@@ -3,6 +3,7 @@ package com.replaymod.gradle.remap.util
import com.replaymod.gradle.remap.Transformer
import com.replaymod.gradle.remap.legacy.LegacyMappingSetModelFactory
import org.cadixdev.lorenz.MappingSet
+import java.io.File
import java.net.URL
import java.nio.file.Paths
import kotlin.io.path.absolutePathString
@@ -37,6 +38,7 @@ object TestData {
}
}
}
+ jdkHome = File(System.getProperty("java.home"))
classpath = arrayOf(
findClasspathEntry("org.spongepowered.asm.mixin.Mixin"),
findClasspathEntry("a.pkg.A"),