aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/replaymod
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/com/replaymod')
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/PsiMapper.kt13
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/Transformer.kt14
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/legacy/LegacyMappingSetModelFactory.kt28
-rw-r--r--src/main/kotlin/com/replaymod/gradle/remap/version.kt29
4 files changed, 44 insertions, 40 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)
}
}
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)
- }
-}