Skip to content

Commit 9d8a547

Browse files
committed
drop lorenz
1 parent 41099af commit 9d8a547

File tree

12 files changed

+175
-429
lines changed

12 files changed

+175
-429
lines changed

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@ tasks.register<ScanInitParamsJar>("scanInitParams") {
123123
inputMapping = project.compass.productionData
124124
}
125125

126-
tasks.register<ScanParameter>("scanParameter") {
126+
tasks.register<ScanParameter>("scanParam") {
127127
group = LifecycleBasePlugin.VERIFICATION_GROUP
128128
inputMapping = project.compass.productionData
129+
inputJar = remapJar.flatMap { it.outputJar }
129130
}
130131

131132
tasks.register<JavadocLint>("scanJavadocs") {

buildSrc/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,8 @@ dependencies {
3737
implementation("org.parchmentmc:lodestone:0.10.0")
3838
implementation("org.parchmentmc:compass:0.10.0")
3939
implementation("cuchaz:enigma:4.0.2")
40-
implementation("org.cadixdev:lorenz:0.5.8")
41-
implementation("org.cadixdev:lorenz-io-enigma:0.5.8")
40+
implementation("net.fabricmc:mapping-io:0.7.1")
4241

4342
implementation("net.fabricmc.unpick:unpick:3.0.0-beta.11")
4443
implementation("net.fabricmc.unpick:unpick-format-utils:3.0.0-beta.11")
45-
implementation("net.fabricmc:mapping-io:0.7.1")
4644
}

buildSrc/src/main/kotlin/org/parchmentmc/tasks/DownloadSingleVersionDownload.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package org.parchmentmc.tasks
22

3-
import nl.adaptivity.xmlutil.core.impl.multiplatform.URI
43
import org.gradle.api.DefaultTask
54
import org.gradle.api.file.RegularFileProperty
65
import org.gradle.api.provider.Property
76
import org.gradle.api.tasks.*
87
import org.parchmentmc.feather.manifests.VersionManifest
98
import org.parchmentmc.lodestone.tasks.DownloadLauncherMetadata
10-
import org.parchmentmc.lodestone.tasks.MinecraftVersionTask
119
import org.parchmentmc.lodestone.util.OfflineChecker
1210
import org.parchmentmc.util.path
1311
import java.io.FileReader
12+
import java.net.URI
1413
import java.nio.channels.Channels
1514
import java.nio.channels.FileChannel
1615
import java.nio.file.StandardOpenOption
@@ -31,14 +30,14 @@ abstract class DownloadSingleVersionDownload : DefaultTask() {
3130

3231
@TaskAction
3332
fun run() {
34-
OfflineChecker.checkOffline(getProject())
33+
OfflineChecker.checkOffline(project)
3534
val gson = DownloadLauncherMetadata.getLauncherManifestGson()
36-
val manifest = FileReader(versionManifest.getAsFile().get()).use { r ->
35+
val manifest = FileReader(versionManifest.asFile.get()).use { r ->
3736
gson.fromJson(r, VersionManifest::class.java)
3837
}
39-
val fileInfo = manifest.downloads.get(download.get())
38+
val fileInfo = manifest.downloads[download.get()]
4039
?: error("Download '${download.get()}' not found in version manifest")
41-
val downloadUrl = URI.create(fileInfo.getUrl()).toURL()
40+
val downloadUrl = URI.create(fileInfo.url).toURL()
4241

4342
output.path.createParentDirectories()
4443
Channels.newChannel(downloadUrl.openStream()).use { input ->
@@ -48,7 +47,7 @@ abstract class DownloadSingleVersionDownload : DefaultTask() {
4847
StandardOpenOption.CREATE,
4948
StandardOpenOption.TRUNCATE_EXISTING
5049
).use { output ->
51-
output.transferFrom(input, 0L, Long.Companion.MAX_VALUE)
50+
output.transferFrom(input, 0L, Long.MAX_VALUE)
5251
}
5352
}
5453
}

buildSrc/src/main/kotlin/org/parchmentmc/tasks/EnigmaRunner.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ abstract class EnigmaRunner @Inject constructor(
4040
) : JavaExec() {
4141

4242
@get:InputFile
43+
@get:PathSensitive(PathSensitivity.NONE)
4344
abstract val inputJar: RegularFileProperty
4445

4546
@get:InputDirectory
47+
@get:PathSensitive(PathSensitivity.RELATIVE)
4648
abstract val mappings: DirectoryProperty
4749

4850
@get:InputFile
51+
@get:PathSensitive(PathSensitivity.NONE)
4952
abstract val profile: RegularFileProperty
5053

5154
init {

buildSrc/src/main/kotlin/org/parchmentmc/tasks/RemapJar.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ abstract class RemapJar @Inject constructor(
5050
) : DefaultTask() {
5151

5252
@get:InputFile
53-
@get:PathSensitive(PathSensitivity.RELATIVE)
53+
@get:PathSensitive(PathSensitivity.NONE)
5454
abstract val inputJar: RegularFileProperty
5555

5656
@get:InputFile
57-
@get:PathSensitive(PathSensitivity.RELATIVE)
57+
@get:PathSensitive(PathSensitivity.NONE)
5858
abstract val mappings: RegularFileProperty
5959

6060
@get:CompileClasspath

buildSrc/src/main/kotlin/org/parchmentmc/tasks/RemapUnpickDefinitions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import kotlin.io.path.writeText
2626

2727
@CacheableTask
2828
abstract class RemapUnpickDefinitions : DefaultTask() {
29+
2930
@get:InputFiles
3031
@get:PathSensitive(PathSensitivity.NONE)
3132
abstract val inputDefinitionsJar: ConfigurableFileCollection

buildSrc/src/main/kotlin/org/parchmentmc/tasks/ScanConstructorParameters.kt

Lines changed: 55 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package org.parchmentmc.tasks
22

3-
import org.cadixdev.lorenz.MappingSet
3+
import net.fabricmc.mappingio.MappingReader
4+
import net.fabricmc.mappingio.format.MappingFormat
5+
import net.fabricmc.mappingio.tree.MappingTree
6+
import net.fabricmc.mappingio.tree.MemoryMappingTree
47
import org.gradle.api.DefaultTask
58
import org.gradle.api.file.DirectoryProperty
69
import org.gradle.api.file.RegularFileProperty
@@ -11,106 +14,92 @@ import org.objectweb.asm.tree.ClassNode
1114
import org.objectweb.asm.tree.FieldInsnNode
1215
import org.objectweb.asm.tree.VarInsnNode
1316
import org.parchmentmc.util.*
14-
import org.parchmentmc.util.lorenz.FabricEnigmaReader
1517
import java.lang.constant.ConstantDescs
1618

1719
abstract class ScanInitParamsJar : DefaultTask() {
1820

1921
@get:InputFile
20-
@get:PathSensitive(PathSensitivity.RELATIVE)
22+
@get:PathSensitive(PathSensitivity.NONE)
2123
abstract val inputJar: RegularFileProperty
2224

23-
@get:Optional
2425
@get:InputDirectory
2526
@get:PathSensitive(PathSensitivity.RELATIVE)
2627
abstract val inputMapping: DirectoryProperty
2728

2829
@TaskAction
2930
fun run() {
30-
val set: MappingSet?
31-
if (inputMapping.isPresent) {
32-
set = MappingSet.create()
33-
inputMapping.asFileTree.filter { file -> file.name.endsWith(".mapping") }
34-
.forEach { file ->
35-
FabricEnigmaReader(file.bufferedReader(Charsets.UTF_8)).use { reader ->
36-
reader.read(set)
37-
}
38-
}
39-
} else {
40-
set = null
41-
}
31+
val tree = MemoryMappingTree()
32+
MappingReader.read(
33+
inputMapping.path,
34+
MappingFormat.ENIGMA_DIR,
35+
tree
36+
)
4237

4338
inputJar.path.openZip().use { jar ->
4439
JarProcessing.processJar(
4540
jar,
46-
ScanParameterProcessor(set)
41+
ScanParameterProcessor(tree)
4742
)
4843
}
4944
}
5045

51-
private class ScanParameterProcessor(private val mapping: MappingSet?) : JarProcessing.ClassProcessor.NodeBased, AsmUtil {
46+
private class ScanParameterProcessor(
47+
private val mappings: MappingTree
48+
) : JarProcessing.ClassProcessor.NodeBased, AsmUtil {
5249

5350
override fun processClass(node: ClassNode, classNodeCache: ClassNodeCache) {
5451
if (Opcodes.ACC_RECORD in node.access || Opcodes.ACC_SYNTHETIC in node.access) {
5552
return
5653
}
5754

5855
node.methods.forEach { method ->
59-
if (method.name == ConstantDescs.INIT_NAME) {
60-
if (method.parameters == null && Type.getArgumentTypes(method.desc).size == 0) {
61-
return@forEach
62-
}
56+
if (method.name != ConstantDescs.INIT_NAME) {
57+
return@forEach
58+
}
59+
if (Type.getArgumentCount(method.desc) == 0) {
60+
return@forEach
61+
}
6362

64-
val expectedNames = sortedMapOf<Int, String>()
65-
val insns = method.instructions.iterator()
66-
val locals = mutableSetOf<Int>()
67-
while (insns.hasNext()) {
68-
val insn = insns.next()
69-
if (insn.opcode >= Opcodes.ISTORE && insn.opcode <= Opcodes.ASTORE) {
70-
locals.add((insn as VarInsnNode).`var`)
71-
continue
72-
}
63+
val expectedNames = sortedMapOf<Int, String>()
64+
val insns = method.instructions.iterator()
65+
val locals = mutableSetOf<Int>()
66+
while (insns.hasNext()) {
67+
val insn = insns.next()
68+
if (insn.opcode >= Opcodes.ISTORE && insn.opcode <= Opcodes.ASTORE) {
69+
locals.add((insn as VarInsnNode).`var`)
70+
continue
71+
}
7372

74-
if (insn.previous != null && (insn.previous.opcode >= Opcodes.ILOAD && insn.previous.opcode <= Opcodes.ALOAD)) {
75-
val index = (insn.previous as VarInsnNode).`var`
76-
if (index != 0 && !locals.contains(index)) { // skip this and lvt assignment
77-
if (insn.opcode == Opcodes.PUTFIELD && (insn as FieldInsnNode).owner == node.name) {
78-
if (insn.name.startsWith("this$") || insn.name.startsWith("val$")) { // skip outer class reference from nested class/method
79-
continue
80-
}
81-
expectedNames[index] = insn.name
73+
if (insn.previous != null && (insn.previous.opcode >= Opcodes.ILOAD && insn.previous.opcode <= Opcodes.ALOAD)) {
74+
val index = (insn.previous as VarInsnNode).`var`
75+
if (index != 0 && !locals.contains(index)) { // skip this and lvt assignment
76+
if (insn.opcode == Opcodes.PUTFIELD && (insn as FieldInsnNode).owner == node.name) {
77+
if (insn.name.startsWith("this$") || insn.name.startsWith("val$")) { // skip outer class reference from nested class/method
78+
continue
8279
}
80+
expectedNames[index] = insn.name
8381
}
8482
}
8583
}
84+
}
8685

87-
val currentNames: Map<Int, String>
88-
if (mapping == null && method.parameters != null) {
89-
currentNames =
90-
method.parameters
91-
.filter { node -> !(Opcodes.ACC_MANDATED in node.access || Opcodes.ACC_SYNTHETIC in node.access) }
92-
.mapIndexed { index, node ->
93-
fromParamToLvtIndex(index, method) to node.name
94-
}
95-
.toMap()
96-
} else if (mapping != null) {
97-
currentNames = mapping.getClassMapping(node.name)
98-
.flatMap { it.getMethodMapping(method.name, method.desc) }
99-
.map { method ->
100-
method.parameterMappings
101-
.associate { it.index to it.deobfuscatedName }
102-
}.orElseGet { mapOf() }
103-
} else {
104-
currentNames = mapOf()
105-
}
106-
if (currentNames != expectedNames && currentNames.size <= expectedNames.size) {
107-
println(node.name)
108-
println(method.name + " " + method.desc)
109-
println("current : $currentNames")
110-
println("expected: $expectedNames")
111-
expectedNames.forEach { entry ->
112-
println("ARG ${entry.key} ${entry.value}")
113-
}
86+
// search existing mapping recursively since overridden methods mapping are propagated once exported
87+
var args: Collection<MappingTree.MethodArgMapping>? = null
88+
var currentNode: ClassNode? = node
89+
do {
90+
val node = currentNode ?: break
91+
args = mappings.getClass(node.name)?.getMethod(method.name, method.desc)?.args
92+
currentNode = classNodeCache.findClass(node.superName)
93+
} while (currentNode != null && (args == null || args.isEmpty()))
94+
95+
val currentNames = args?.associate { it.lvIndex to it.getDstName(0) } ?: mapOf()
96+
if (currentNames != expectedNames && currentNames.size <= expectedNames.size) {
97+
println(node.name)
98+
println(method.name + " " + method.desc)
99+
println("current : $currentNames")
100+
println("expected: $expectedNames")
101+
expectedNames.forEach { entry ->
102+
println("ARG ${entry.key} ${entry.value}")
114103
}
115104
}
116105
}

0 commit comments

Comments
 (0)