From 9bb86792bf4740b6650ccd40b0d47318cf1a3929 Mon Sep 17 00:00:00 2001 From: DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> Date: Thu, 25 Apr 2024 04:18:36 -0400 Subject: Add support for Kotlin 1.9.0 (#21) The KotlinSourceRoot constructor was updated to include an additional argument related to Kotlin Multiplatform. We always pass null for this argument. Co-authored-by: Wyvest --- build.gradle.kts | 10 +++++++++- src/kotlin1521/kotlin/com/replaymod/gradle/remap/kotlin1521.kt | 3 +++ src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt | 5 +++++ src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt | 8 ++++++-- 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt diff --git a/build.gradle.kts b/build.gradle.kts index b6214a3..4215a6a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - kotlin("jvm") version "1.5.21" + kotlin("jvm") version "1.9.23" `maven-publish` } @@ -22,6 +22,7 @@ val testB by sourceSets.creating kotlinVersion("1.5.21", isPrimaryVersion = true) kotlinVersion("1.6.20") +kotlinVersion("1.9.0") dependencies { api("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.21") @@ -53,6 +54,13 @@ tasks.test { useJUnitPlatform() } +tasks.withType { + kotlinOptions { + apiVersion = "1.5" + languageVersion = "1.5" + } +} + fun kotlinVersion(version: String, isPrimaryVersion: Boolean = false) { val name = version.replace(".", "") diff --git a/src/kotlin1521/kotlin/com/replaymod/gradle/remap/kotlin1521.kt b/src/kotlin1521/kotlin/com/replaymod/gradle/remap/kotlin1521.kt index c63cb98..3031a9a 100644 --- a/src/kotlin1521/kotlin/com/replaymod/gradle/remap/kotlin1521.kt +++ b/src/kotlin1521/kotlin/com/replaymod/gradle/remap/kotlin1521.kt @@ -1,6 +1,7 @@ package com.replaymod.gradle.remap import org.jetbrains.kotlin.analyzer.AnalysisResult +import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM @@ -16,3 +17,5 @@ fun analyze1521(environment: KotlinCoreEnvironment, ktFiles: List): Anal { scope: GlobalSearchScope -> environment.createPackagePartProvider(scope) } ) } + +fun kotlinSourceRoot1521(path: String, isCommon: Boolean) = KotlinSourceRoot(path, isCommon) diff --git a/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt b/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt new file mode 100644 index 0000000..fecaa66 --- /dev/null +++ b/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt @@ -0,0 +1,5 @@ +package com.replaymod.gradle.remap + +import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot + +fun kotlinSourceRoot190(path: String, isCommon: Boolean) = KotlinSourceRoot(path, isCommon, null) diff --git a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt index 6e8dae1..0845e0d 100644 --- a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt +++ b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt @@ -4,7 +4,6 @@ import com.replaymod.gradle.remap.legacy.LegacyMapping import org.cadixdev.lorenz.MappingSet import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.config.ContentRoot -import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector @@ -73,7 +72,12 @@ class Transformer(private val map: MappingSet) { config.put(CommonConfigurationKeys.MODULE_NAME, "main") jdkHome?.let {config.setupJdk(it) } config.add(CLIConfigurationKeys.CONTENT_ROOTS, JavaSourceRoot(tmpDir.toFile(), "")) - config.add(CLIConfigurationKeys.CONTENT_ROOTS, KotlinSourceRoot(tmpDir.toAbsolutePath().toString(), false)) + val kotlinSourceRoot = try { + kotlinSourceRoot1521(tmpDir.toAbsolutePath().toString(), false) + } catch (e: NoSuchMethodError) { + kotlinSourceRoot190(tmpDir.toAbsolutePath().toString(), false) + } + config.add(CLIConfigurationKeys.CONTENT_ROOTS, kotlinSourceRoot) config.addAll(CLIConfigurationKeys.CONTENT_ROOTS, classpath!!.map { JvmClasspathRoot(File(it)) }) config.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, PrintingMessageCollector(System.err, MessageRenderer.GRADLE_STYLE, true)) -- cgit From 78d264552f201c388ab833617d4d3ff7ed67eee8 Mon Sep 17 00:00:00 2001 From: Josiah Glosson Date: Thu, 25 Apr 2024 03:25:44 -0500 Subject: Fix remapMixinTarget not supporting NEW (#19) Fixes #18 --- src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt index 5dba364..f0b8b6b 100644 --- a/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt +++ b/src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt @@ -531,14 +531,11 @@ internal class PsiMapper( } private fun remapMixinTarget(target: String): String { - return if (target.contains(':') || target.contains('(')) { - remapFullyQualifiedMethodOrField(target) - } else { - if (target[0] == 'L') { - remapInternalType(target) - } else { - remapInternalType("L$target;").drop(1).dropLast(1) - } + return when { + target.startsWith('(') -> remapMethodDesc(target) + target.contains(':') || target.contains('(') -> remapFullyQualifiedMethodOrField(target) + target[0] == 'L' -> remapInternalType(target) + else -> remapInternalType("L$target;").drop(1).dropLast(1) } } -- cgit From 5134612493d43da328a2567e8425981094d67c50 Mon Sep 17 00:00:00 2001 From: Sychic <47618543+Sychic@users.noreply.github.com> Date: Mon, 6 May 2024 10:13:52 -0400 Subject: Override `createInnerClassMapping` for `LegacyMappingSetModelFactory` (#22) Co-authored-by: DJtheRedstoner <52044242+DJtheRedstoner@users.noreply.github.com> --- .../remap/legacy/LegacyMappingSetModelFactory.kt | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/kotlin/com/replaymod/gradle/remap/legacy/LegacyMappingSetModelFactory.kt b/src/main/kotlin/com/replaymod/gradle/remap/legacy/LegacyMappingSetModelFactory.kt index ec21546..6d463f0 100644 --- a/src/main/kotlin/com/replaymod/gradle/remap/legacy/LegacyMappingSetModelFactory.kt +++ b/src/main/kotlin/com/replaymod/gradle/remap/legacy/LegacyMappingSetModelFactory.kt @@ -3,7 +3,10 @@ package com.replaymod.gradle.remap.legacy import org.cadixdev.bombe.type.signature.MethodSignature import org.cadixdev.lorenz.MappingSet import org.cadixdev.lorenz.impl.MappingSetModelFactoryImpl +import org.cadixdev.lorenz.impl.model.InnerClassMappingImpl import org.cadixdev.lorenz.impl.model.TopLevelClassMappingImpl +import org.cadixdev.lorenz.model.ClassMapping +import org.cadixdev.lorenz.model.InnerClassMapping import org.cadixdev.lorenz.model.MethodMapping import org.cadixdev.lorenz.model.TopLevelClassMapping import java.util.* @@ -29,4 +32,29 @@ class LegacyMappingSetModelFactory : MappingSetModelFactoryImpl() { } } } + + override fun createInnerClassMapping( + parent: ClassMapping, *>?, + obfuscatedName: String?, + deobfuscatedName: String? + ): InnerClassMapping { + return object : InnerClassMappingImpl(parent, obfuscatedName, deobfuscatedName) { + private fun stripDesc(signature: MethodSignature): MethodSignature { + // actual descriptor isn't included in legacy format + return MethodSignature.of(signature.name, "()V") + } + + override fun hasMethodMapping(signature: MethodSignature): Boolean { + return super.hasMethodMapping(signature) || super.hasMethodMapping(stripDesc(signature)) + } + + override fun getMethodMapping(signature: MethodSignature): Optional { + var maybeMapping = super.getMethodMapping(signature) + if (!maybeMapping.isPresent || maybeMapping.get().let { it.signature == it.deobfuscatedSignature }) { + maybeMapping = super.getMethodMapping(stripDesc(signature)) + } + return maybeMapping + } + } + } } -- cgit From 764eedd6ad31ed826b02e61611b690d65ec77fa3 Mon Sep 17 00:00:00 2001 From: ev chang Date: Thu, 16 May 2024 16:08:39 -0400 Subject: Revert "Add Kotlin 1.9.0 support" This reverts commit fcd760df97454eeed436334808da51ea9ba20540. --- build.gradle.kts | 3 +-- .../kotlin/com/replaymod/gradle/remap/kotlin190.kt | 11 -------- .../com/replaymod/gradle/remap/Transformer.kt | 8 ++++-- .../kotlin/com/replaymod/gradle/remap/version.kt | 29 ---------------------- 4 files changed, 7 insertions(+), 44 deletions(-) delete mode 100644 src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt delete mode 100644 src/main/kotlin/com/replaymod/gradle/remap/version.kt diff --git a/build.gradle.kts b/build.gradle.kts index ba80454..f32d4c2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - kotlin("jvm") version "1.9.0" + kotlin("jvm") version "1.5.21" `maven-publish` } @@ -22,7 +22,6 @@ val testB by sourceSets.creating kotlinVersion("1.5.21", isPrimaryVersion = true) kotlinVersion("1.6.20") -kotlinVersion("1.9.0") dependencies { api("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.5.21") diff --git a/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt b/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt deleted file mode 100644 index 0d05a7f..0000000 --- a/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.replaymod.gradle.remap - -import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot -import java.nio.file.Path - -fun createSourceRoot190( - tempDir: Path, - isCommon: Boolean -): KotlinSourceRoot { - return KotlinSourceRoot(tempDir.toString(), isCommon, null) -} diff --git a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt index b26c987..6e8dae1 100644 --- a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt +++ b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt @@ -73,7 +73,7 @@ class Transformer(private val map: MappingSet) { config.put(CommonConfigurationKeys.MODULE_NAME, "main") jdkHome?.let {config.setupJdk(it) } config.add(CLIConfigurationKeys.CONTENT_ROOTS, JavaSourceRoot(tmpDir.toFile(), "")) - config.add(CLIConfigurationKeys.CONTENT_ROOTS, createSourceRoot(tmpDir.toAbsolutePath(), false)) + config.add(CLIConfigurationKeys.CONTENT_ROOTS, KotlinSourceRoot(tmpDir.toAbsolutePath().toString(), false)) config.addAll(CLIConfigurationKeys.CONTENT_ROOTS, classpath!!.map { JvmClasspathRoot(File(it)) }) config.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, PrintingMessageCollector(System.err, MessageRenderer.GRADLE_STYLE, true)) @@ -99,7 +99,11 @@ class Transformer(private val map: MappingSet) { val psiFiles = virtualFiles.mapValues { psiManager.findFile(it.value)!! } val ktFiles = psiFiles.values.filterIsInstance() - val analysis = analyze(environment, ktFiles) + val analysis = try { + analyze1521(environment, ktFiles) + } catch (e: NoSuchMethodError) { + analyze1620(environment, ktFiles) + } val remappedEnv = remappedClasspath?.let { setupRemappedProject(disposable, it, processedTmpDir) diff --git a/src/main/kotlin/com/replaymod/gradle/remap/version.kt b/src/main/kotlin/com/replaymod/gradle/remap/version.kt deleted file mode 100644 index 79b133e..0000000 --- a/src/main/kotlin/com/replaymod/gradle/remap/version.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.replaymod.gradle.remap - -import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.psi.KtFile -import java.nio.file.Path - -fun analyze( - environment: KotlinCoreEnvironment, - ktFiles: List -): AnalysisResult { - return try { - analyze1521(environment, ktFiles) - } catch (e: Throwable) { - analyze1620(environment, ktFiles) - } -} - -fun createSourceRoot( - tempDir: Path, - isCommon: Boolean -): KotlinSourceRoot { - return try { - KotlinSourceRoot(tempDir.toString(), isCommon) - } catch (e: Throwable) { - createSourceRoot190(tempDir, isCommon) - } -} -- cgit