Skip to content

Commit

Permalink
excs and sigs support
Browse files Browse the repository at this point in the history
  • Loading branch information
wagyourtail committed Jul 13, 2024
1 parent c2bd8c8 commit a3bc3eb
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package xyz.wagyourtail.unimined.mapping.formats
import okio.BufferedSource
import xyz.wagyourtail.unimined.mapping.EnvType
import xyz.wagyourtail.unimined.mapping.formats.csrg.CsrgReader
import xyz.wagyourtail.unimined.mapping.formats.feather.ExceptionReader
import xyz.wagyourtail.unimined.mapping.formats.mcp.MCPExceptionReader
import xyz.wagyourtail.unimined.mapping.formats.tsrg.TsrgV1Reader
import xyz.wagyourtail.unimined.mapping.formats.tsrg.TsrgV2Reader
Expand All @@ -16,7 +17,8 @@ import xyz.wagyourtail.unimined.mapping.formats.mcpconfig.MCPConfigAccessReader
import xyz.wagyourtail.unimined.mapping.formats.mcpconfig.MCPConfigConstructorReader
import xyz.wagyourtail.unimined.mapping.formats.mcpconfig.MCPConfigExceptionsReader
import xyz.wagyourtail.unimined.mapping.formats.mcpconfig.MCPConfigStaticMethodsReader
import xyz.wagyourtail.unimined.mapping.formats.nests.NestReader
import xyz.wagyourtail.unimined.mapping.formats.feather.NestReader
import xyz.wagyourtail.unimined.mapping.formats.feather.SignatureReader
import xyz.wagyourtail.unimined.mapping.formats.parchment.ParchmentReader
import xyz.wagyourtail.unimined.mapping.formats.proguard.ProguardReader
import xyz.wagyourtail.unimined.mapping.formats.rgs.RetroguardReader
Expand All @@ -39,6 +41,8 @@ object FormatRegistry {
FormatProvider(TinyV2Reader, TinyV2Writer),
FormatProvider(TinyV1Reader),
FormatProvider(NestReader),
FormatProvider(ExceptionReader),
FormatProvider(SignatureReader),
FormatProvider(UnpickReader),
FormatProvider(SrgReader, SrgWriter),
FormatProvider(RetroguardReader),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package xyz.wagyourtail.unimined.mapping.formats.feather

import okio.BufferedSource
import xyz.wagyourtail.unimined.mapping.EnvType
import xyz.wagyourtail.unimined.mapping.Namespace
import xyz.wagyourtail.unimined.mapping.formats.FormatReader
import xyz.wagyourtail.unimined.mapping.jvms.four.three.three.MethodDescriptor
import xyz.wagyourtail.unimined.mapping.jvms.four.two.one.InternalName
import xyz.wagyourtail.unimined.mapping.tree.AbstractMappingTree
import xyz.wagyourtail.unimined.mapping.util.CharReader
import xyz.wagyourtail.unimined.mapping.visitor.ClassVisitor
import xyz.wagyourtail.unimined.mapping.visitor.ExceptionType
import xyz.wagyourtail.unimined.mapping.visitor.MappingVisitor
import xyz.wagyourtail.unimined.mapping.visitor.use

object ExceptionReader : FormatReader {

override fun isFormat(envType: EnvType, fileName: String, inputType: BufferedSource): Boolean {
return fileName.endsWith(".excs")
}

override suspend fun read(
envType: EnvType,
input: CharReader,
context: AbstractMappingTree?,
into: MappingVisitor,
nsMapping: Map<String, String>
) {
val ns = Namespace(nsMapping["source"] ?: "source")

into.use {
visitHeader(ns.name)

var cls: ClassVisitor? = null

while (!input.exhausted()) {
if (input.peek() == '\n') {
input.take()
continue
}
val whitespace = input.takeWhitespace()
if (whitespace.isEmpty()) {
val name = InternalName.read(input.takeNextLiteral()!!)
cls?.visitEnd()
cls = visitClass(mapOf(ns to name))
} else {
if (whitespace.length != 1) {
throw IllegalArgumentException("invalid line: $whitespace")
}
val mName = input.takeNextLiteral()!!
val desc = MethodDescriptor.read(input.takeNextLiteral()!!)
val exceptions = mutableListOf<String>()
while (true) {
exceptions.add(input.takeNextLiteral() ?: break)
}
cls?.visitMethod(mapOf(ns to (mName to desc)))?.use {
for (exc in exceptions) {
visitException(ExceptionType.ADD, InternalName.read(exc), ns, setOf())?.visitEnd()
}
}
}
}
}
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package xyz.wagyourtail.unimined.mapping.formats.nests
package xyz.wagyourtail.unimined.mapping.formats.feather

import okio.BufferedSource
import xyz.wagyourtail.unimined.mapping.EnvType
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package xyz.wagyourtail.unimined.mapping.formats.feather

import okio.BufferedSource
import xyz.wagyourtail.unimined.mapping.EnvType
import xyz.wagyourtail.unimined.mapping.Namespace
import xyz.wagyourtail.unimined.mapping.formats.FormatReader
import xyz.wagyourtail.unimined.mapping.jvms.four.three.three.MethodDescriptor
import xyz.wagyourtail.unimined.mapping.jvms.four.two.one.InternalName
import xyz.wagyourtail.unimined.mapping.tree.AbstractMappingTree
import xyz.wagyourtail.unimined.mapping.util.CharReader
import xyz.wagyourtail.unimined.mapping.visitor.ClassVisitor
import xyz.wagyourtail.unimined.mapping.visitor.MappingVisitor
import xyz.wagyourtail.unimined.mapping.visitor.use

object SignatureReader : FormatReader {

override fun isFormat(envType: EnvType, fileName: String, inputType: BufferedSource): Boolean {
return fileName.endsWith(".sigs")
}

override suspend fun read(
envType: EnvType,
input: CharReader,
context: AbstractMappingTree?,
into: MappingVisitor,
nsMapping: Map<String, String>
) {
val ns = Namespace(nsMapping["source"] ?: "source")

into.use {
visitHeader(ns.name)

var cls: ClassVisitor? = null

while (!input.exhausted()) {
if (input.peek() == '\n') {
input.take()
continue
}
val whitespace = input.takeWhitespace()
if (whitespace.isEmpty()) {
val name = InternalName.read(input.takeNextLiteral()!!)
cls?.visitEnd()
cls = visitClass(mapOf(ns to name))
val sig = input.takeNextLiteral()
if (sig != null) {
cls?.visitSignature(mapOf(ns to sig))
}
} else {
if (whitespace.length != 1) {
throw IllegalArgumentException("invalid line: $whitespace")
}
val mName = input.takeNextLiteral()!!
val desc = MethodDescriptor.read(input.takeNextLiteral()!!)
val sig = input.takeNextLiteral()!!
cls?.visitMethod(mapOf(ns to (mName to desc)))?.use {
visitSignature(mapOf(ns to sig))
}
}

}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package xyz.wagyourtail.unimined.mapping.test.formats.nests
import kotlinx.coroutines.test.runTest
import okio.Buffer
import okio.use
import xyz.wagyourtail.unimined.mapping.formats.nests.NestReader
import xyz.wagyourtail.unimined.mapping.formats.feather.NestReader
import xyz.wagyourtail.unimined.mapping.formats.umf.UMFWriter
import kotlin.test.Test
import kotlin.test.assertEquals
Expand Down

0 comments on commit a3bc3eb

Please sign in to comment.