Skip to content

Commit 452a5ba

Browse files
committed
some performance improvements
1 parent 5445b4a commit 452a5ba

File tree

5 files changed

+43
-42
lines changed

5 files changed

+43
-42
lines changed

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/jvms/four/seven/nine/one/reference/PackageSpecifier.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@ value class PackageSpecifier private constructor(val value: String) : Type {
2626
}
2727

2828
override fun read(reader: CharReader<*>, append: (Any) -> Unit) {
29-
while (shouldRead(reader.copy())) {
30-
append(Identifier.read(reader))
31-
append(reader.expect('/'))
29+
while (true) {
30+
reader.mark()
31+
val id = Identifier.read(reader)
32+
if (reader.take() != '/') {
33+
reader.reset()
34+
break
35+
}
36+
append(id)
37+
append('/')
3238
}
3339
}
3440

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/jvms/four/two.one/InternalName.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,16 @@ value class InternalName private constructor(val value: String) : Type {
2020
}
2121

2222
override fun read(reader: CharReader<*>, append: (Any) -> Unit) {
23-
append(PackageName.read(reader))
24-
append(UnqualifiedName.read(reader))
23+
val cname = reader.takeUntil { it in JVMS.unqualifiedNameIllegalChars && it != '/' }
24+
if (cname.isEmpty() || cname.contains("//")) {
25+
throw IllegalArgumentException("Invalid internal name")
26+
}
27+
if (!cname.contains("/")) {
28+
append(UnqualifiedName.unchecked(cname))
29+
} else {
30+
append(PackageName.unchecked(cname.substringBeforeLast("/") + "/"))
31+
append(UnqualifiedName.unchecked(cname.substringAfterLast("/")))
32+
}
2533
}
2634

2735
override fun unchecked(value: String) = InternalName(value)

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/propagator/CachedInheritanceTree.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class CachedInheritanceTree(tree: AbstractMappingTree, data: CharReader<*>): Inh
9999
ci = ClassInfo(InternalName.read(cls), sup?.let { InternalName.read(it) }, intf)
100100
classes[ci!!.name] = ci!!
101101
} else {
102-
val acc = data.takeNextUMF()!!.split("|").map { AccessFlag.valueOf(it.uppercase()) }
102+
val acc = data.takeNextUMF()!!.split("|").filter { it.isNotBlank() }.map { AccessFlag.valueOf(it.uppercase()) }
103103
val name = data.takeNextUMF()!!
104104
val desc = FieldOrMethodDescriptor.read(data.takeNextUMF()!!)
105105

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/resolver/MappingResolver.kt

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,7 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
212212
entry.mapNs.map { it.key.name to it.value.name }.toMap()
213213
)
214214
if (target != visitor) {
215-
target as MemoryMappingTree
216-
for (it in entry.preProcess) {
217-
it(target)
218-
}
215+
entry.preProcess(target as MemoryMappingTree)
219216
target.accept(visitor)
220217
}
221218
} catch (e: Throwable) {
@@ -228,14 +225,6 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
228225

229226
afterLoad(resolved)
230227

231-
LOGGER.info { "Resolving fields and methods..." }
232-
233-
measureTime {
234-
resolved.resolveLazyResolvables()
235-
}.also {
236-
LOGGER.info { "Resolved lazy resolvables in $it" }
237-
}
238-
239228
LOGGER.info { "Propagating..." }
240229

241230
measureTime {
@@ -252,18 +241,11 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
252241
}
253242
for ((key, value) in renest) {
254243
if (value.isNotEmpty()) {
244+
LOGGER.info { "Renesting $key -> ${value.joinToString(", ")}" }
255245
resolved!!.renest(key, value)
256246
}
257247
}
258248

259-
LOGGER.info { "Re-resolving fields and methods..." }
260-
261-
measureTime {
262-
resolved!!.resolveLazyResolvables()
263-
}.also {
264-
LOGGER.info { "Re-resolved lazy resolvables in $it" }
265-
}
266-
267249
LOGGER.info { "Filling in missing names..." }
268250

269251
measureTime {
@@ -282,12 +264,12 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
282264
LOGGER.info { "Filled in missing names in $it" }
283265
}
284266

285-
LOGGER.info { "Re-resolving fields and methods..." }
267+
LOGGER.info { "Resolving fields and methods..." }
286268

287269
measureTime {
288270
resolved!!.resolveLazyResolvables()
289271
}.also {
290-
LOGGER.info { "Re-resolved lazy resolvables in $it" }
272+
LOGGER.info { "Resolved lazy resolvables in $it" }
291273
}
292274

293275
LOGGER.info { "Writing to cache" }
@@ -358,7 +340,7 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
358340
var skip by FinalizeOnRead(false)
359341

360342
val insertInto = finalizableSetOf<(MappingVisitor) -> MappingVisitor>()
361-
val preProcess = finalizableSetOf<(AbstractMappingTree) -> Unit>()
343+
val preProcess = finalizableSetOf<(AbstractMappingTree, FormatProvider, ContentProvider) -> Unit>()
362344

363345
var provider by FinalizeOnRead(LazyMutable {
364346
val format = FormatRegistry.autodetectFormat(envType, content.fileName(), content.content())
@@ -393,12 +375,20 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
393375
renest.addAll(ns.map { Namespace(it) })
394376
}
395377

378+
internal fun preProcess(mappings: AbstractMappingTree) {
379+
for (pre in preProcess) {
380+
pre(mappings, provider, content)
381+
}
382+
}
383+
396384
fun combineWith(other: MappingConfig) {
397385
requires = other.requires
398386
provides.addAll(other.provides)
399387
mapNs.putAll(other.mapNs)
400388
skip = other.skip
401389
insertInto.addAll(other.insertInto)
390+
preProcess.addAll(other.preProcess)
391+
renest.addAll(other.renest)
402392
}
403393

404394
open suspend fun finalize() {

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/tree/MemoryMappingTree.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,7 @@ class MemoryMappingTree : AbstractMappingTree() {
3232
private val byNamespace = defaultedMapOf<Namespace, MutableMap<InternalName, ClassNode>> { mutableMapOf() }
3333

3434
override fun getClass(namespace: Namespace, name: InternalName): ClassNode? {
35-
val cacheHit = byNamespace[namespace][name]
36-
if (cacheHit != null) {
37-
if (cacheHit.getName(namespace) == name) {
38-
return cacheHit
39-
} else {
40-
byNamespace[namespace].remove(name)
41-
}
42-
}
43-
val cacheMiss = classes.firstOrNull { it.getName(namespace) == name }
44-
if (cacheMiss != null) {
45-
byNamespace[namespace][name] = cacheMiss
46-
}
47-
return cacheMiss
35+
return byNamespace[namespace][name]
4836
}
4937

5038
override fun classesIter(): Iterator<Pair<Map<Namespace, InternalName>, () -> ClassNode>> = _classes.iterator().asSequence().map {
@@ -115,13 +103,22 @@ class MemoryMappingTree : AbstractMappingTree() {
115103
// check if exists
116104
val existing = getClass(ns, names[ns]!!)
117105
if (existing != null) {
106+
for ((ns, name) in existing.names.filter { it.key in names && it.value != names[it.key] }) {
107+
byNamespace[ns].remove(name)
108+
}
118109
// add other names
119110
existing.setNames(names)
111+
for ((ns, name) in names) {
112+
byNamespace[ns].put(name, existing)
113+
}
120114
return existing
121115
}
122116
}
123117
val node = ClassNode(this)
124118
node.setNames(names)
119+
for ((ns, name) in names) {
120+
byNamespace[ns].put(name, node)
121+
}
125122
_classes.add(node)
126123
return node
127124
}

0 commit comments

Comments
 (0)