diff options
7 files changed, 56 insertions, 48 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index ba80454..0a245b5 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.9.23" `maven-publish` } @@ -87,6 +87,13 @@ tasks.test { useJUnitPlatform() } +tasks.withType<KotlinCompile> { + 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<KtFile>): 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 index 0d05a7f..fecaa66 100644 --- a/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt +++ b/src/kotlin190/kotlin/com/replaymod/gradle/remap/kotlin190.kt @@ -1,11 +1,5 @@ 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) -} +fun kotlinSourceRoot190(path: String, isCommon: Boolean) = KotlinSourceRoot(path, isCommon, null) 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) } } diff --git a/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt b/src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt index b26c987..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<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, JavaSourceRoot(tmpDir.toFile(), "")) - config.add<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, createSourceRoot(tmpDir.toAbsolutePath(), false)) + val kotlinSourceRoot = try { + kotlinSourceRoot1521(tmpDir.toAbsolutePath().toString(), false) + } catch (e: NoSuchMethodError) { + kotlinSourceRoot190(tmpDir.toAbsolutePath().toString(), false) + } + config.add<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, kotlinSourceRoot) config.addAll<ContentRoot>(CLIConfigurationKeys.CONTENT_ROOTS, classpath!!.map { JvmClasspathRoot(File(it)) }) config.put<MessageCollector>(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, PrintingMessageCollector(System.err, MessageRenderer.GRADLE_STYLE, true)) @@ -99,7 +103,11 @@ class Transformer(private val map: MappingSet) { val psiFiles = virtualFiles.mapValues { psiManager.findFile(it.value)!! } val ktFiles = psiFiles.values.filterIsInstance<KtFile>() - 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/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<out 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<MethodMapping> { + var maybeMapping = super.getMethodMapping(signature) + if (!maybeMapping.isPresent || maybeMapping.get().let { it.signature == it.deobfuscatedSignature }) { + maybeMapping = super.getMethodMapping(stripDesc(signature)) + } + return maybeMapping + } + } + } } 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<KtFile> -): 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) - } -} |