Skip to content

Commit ab95461

Browse files
committed
sort mappings. faster lazy resolving
1 parent 4957759 commit ab95461

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+644
-621
lines changed

build.gradle.kts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,8 @@ allprojects {
2828
kotlin {
2929
jvmToolchain(8)
3030
jvm {
31-
withJava()
32-
compilations.all {
33-
kotlinOptions {
34-
freeCompilerArgs = listOf("-Xjsr305=strict")
35-
}
31+
compilerOptions {
32+
freeCompilerArgs = listOf("-Xjsr305=strict")
3633
}
3734
}
3835
js {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[versions]
22
asm = "9.7.1"
33
okio = "3.7.0"
4-
kotlin = "2.0.20"
4+
kotlin = "2.1.20"
55

66
commons = "1.0.0"
77

kotlin-js-store/yarn.lock

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,7 @@
8282
dependencies:
8383
"@types/node" "*"
8484

85-
"@types/eslint-scope@^3.7.3":
86-
version "3.7.7"
87-
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
88-
integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
89-
dependencies:
90-
"@types/eslint" "*"
91-
"@types/estree" "*"
92-
93-
"@types/eslint@*":
94-
version "8.56.1"
95-
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.1.tgz#988cabb39c973e9200f35fdbb29d17992965bb08"
96-
integrity sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==
97-
dependencies:
98-
"@types/estree" "*"
99-
"@types/json-schema" "*"
100-
101-
"@types/estree@*", "@types/estree@^1.0.5":
85+
"@types/estree@^1.0.5":
10286
version "1.0.5"
10387
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
10488
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
@@ -135,7 +119,7 @@
135119
dependencies:
136120
"@types/node" "*"
137121

138-
"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
122+
"@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
139123
version "7.0.15"
140124
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
141125
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -810,10 +794,10 @@ encodeurl@~1.0.2:
810794
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
811795
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
812796

813-
enhanced-resolve@^5.17.0:
814-
version "5.17.1"
815-
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15"
816-
integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==
797+
enhanced-resolve@^5.17.1:
798+
version "5.18.1"
799+
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"
800+
integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
817801
dependencies:
818802
graceful-fs "^4.2.4"
819803
tapable "^2.2.0"
@@ -1416,6 +1400,13 @@ kind-of@^6.0.2:
14161400
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
14171401
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
14181402

1403+
kotlin-web-helpers@2.0.0:
1404+
version "2.0.0"
1405+
resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-2.0.0.tgz#b112096b273c1e733e0b86560998235c09a19286"
1406+
integrity sha512-xkVGl60Ygn/zuLkDPx+oHj7jeLR7hCvoNF99nhwXMn8a3ApB4lLiC9pk4ol4NHPjyoCbvQctBqvzUcp8pkqyWw==
1407+
dependencies:
1408+
format-util "^1.0.5"
1409+
14191410
launch-editor@^2.6.0:
14201411
version "2.6.1"
14211412
resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c"
@@ -1534,10 +1525,10 @@ minimatch@^5.0.1, minimatch@^5.1.6:
15341525
dependencies:
15351526
brace-expansion "^2.0.1"
15361527

1537-
mocha@10.7.0:
1538-
version "10.7.0"
1539-
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a"
1540-
integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==
1528+
mocha@10.7.3:
1529+
version "10.7.3"
1530+
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.3.tgz#ae32003cabbd52b59aece17846056a68eb4b0752"
1531+
integrity sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==
15411532
dependencies:
15421533
ansi-colors "^4.1.3"
15431534
browser-stdout "^1.3.1"
@@ -2378,12 +2369,11 @@ webpack-sources@^3.2.3:
23782369
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
23792370
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
23802371

2381-
webpack@5.93.0:
2382-
version "5.93.0"
2383-
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5"
2384-
integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==
2372+
webpack@5.94.0:
2373+
version "5.94.0"
2374+
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f"
2375+
integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==
23852376
dependencies:
2386-
"@types/eslint-scope" "^3.7.3"
23872377
"@types/estree" "^1.0.5"
23882378
"@webassemblyjs/ast" "^1.12.1"
23892379
"@webassemblyjs/wasm-edit" "^1.12.1"
@@ -2392,7 +2382,7 @@ webpack@5.93.0:
23922382
acorn-import-attributes "^1.9.5"
23932383
browserslist "^4.21.10"
23942384
chrome-trace-event "^1.0.2"
2395-
enhanced-resolve "^5.17.0"
2385+
enhanced-resolve "^5.17.1"
23962386
es-module-lexer "^1.2.1"
23972387
eslint-scope "5.1.1"
23982388
events "^3.2.0"

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/formats/umf/UMFReader.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ object UMFReader : FormatReader {
3131
var uncheckedReading = false
3232

3333
override fun isFormat(fileName: String, input: BufferedSource, envType: EnvType): Boolean {
34-
return input.peek().readUtf8Line()?.lowercase()?.startsWith("umf") ?: false
34+
return input.peek().readUtf8Line()?.lowercase()?.startsWith("umf") == true
3535
}
3636

3737
fun String.indentCount(): Int {

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/formats/umf/UMFWriter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ object UMFWriter : FormatWriter {
5757
return write(envType, into::writeUtf8, minimize)
5858
}
5959

60-
fun write(envType: EnvType, into: (String) -> Unit, minimize: Boolean): MappingVisitor {
60+
fun write(into: (String) -> Unit, minimize: Boolean): MappingVisitor {
6161
into(EMPTY)
6262
return EmptyMappingVisitor().delegator(UMFWriterDelegator(into, minimize))
63+
}
6364

65+
fun write(envType: EnvType, into: (String) -> Unit, minimize: Boolean): MappingVisitor {
66+
into(EMPTY)
67+
return EmptyMappingVisitor().delegator(UMFWriterDelegator(into, minimize))
6468
}
6569

6670
class UMFWriterDelegator(

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ value class PackageName private constructor(val value: String) : Type {
2222
}
2323

2424
override fun read(reader: CharReader<*>, append: (Any) -> Unit) {
25-
while (true) {
25+
while (!reader.exhausted()) {
2626
reader.mark()
2727
val id = UnqualifiedName.read(reader)
2828
if (reader.take() != '/') {
@@ -38,17 +38,15 @@ value class PackageName private constructor(val value: String) : Type {
3838
}
3939

4040
fun getParts(): List<UnqualifiedName> {
41-
return value.split("/").map { UnqualifiedName.unchecked(it) }
41+
return value.split("/").dropLast(1).map { UnqualifiedName.unchecked(it) }
4242
}
4343

4444
override fun accept(visitor: (Any) -> Boolean) {
4545
if (visitor(this)) {
4646
val parts = getParts()
4747
for (i in parts.indices) {
4848
parts[i].accept(visitor)
49-
if (i != parts.lastIndex) {
50-
visitor("/")
51-
}
49+
visitor("/")
5250
}
5351
}
5452
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import kotlinx.coroutines.sync.withLock
77
import xyz.wagyourtail.commonskt.collection.defaultedMapOf
88
import xyz.wagyourtail.commonskt.utils.coroutines.parallelMap
99
import xyz.wagyourtail.unimined.mapping.Namespace
10+
import xyz.wagyourtail.unimined.mapping.jvms.ext.FieldOrMethodDescriptor
1011
import xyz.wagyourtail.unimined.mapping.jvms.four.AccessFlag
1112
import xyz.wagyourtail.unimined.mapping.jvms.four.ElementType
1213
import xyz.wagyourtail.unimined.mapping.jvms.four.contains
@@ -15,6 +16,7 @@ import xyz.wagyourtail.unimined.mapping.jvms.four.three.two.FieldDescriptor
1516
import xyz.wagyourtail.unimined.mapping.jvms.four.two.one.InternalName
1617
import xyz.wagyourtail.unimined.mapping.tree.AbstractMappingTree
1718
import xyz.wagyourtail.unimined.mapping.tree.MemoryMappingTree
19+
import xyz.wagyourtail.unimined.mapping.tree.node._class.member.WildcardNode
1820
import xyz.wagyourtail.unimined.mapping.visitor.*
1921
import xyz.wagyourtail.unimined.mapping.visitor.delegate.Delegator
2022
import xyz.wagyourtail.unimined.mapping.visitor.delegate.delegator
@@ -194,10 +196,15 @@ abstract class InheritanceTree(val tree: AbstractMappingTree) {
194196
val initialMethods = methods.filter { md ->
195197
// modify access
196198
val acc = AccessFlag.of(ElementType.METHOD, md.access).toMutableSet()
197-
val methods = tree.getClass(fns, name)?.getMethods(fns, md.name, md.descriptor)
199+
val cls = tree.getClass(fns, name)
200+
val methods = cls?.getMethods(fns, md.name, md.descriptor)
198201
methods?.flatMap { it.access }?.forEach {
199202
it.apply(acc)
200203
}
204+
val wildcards = cls?.getWildcards(WildcardNode.WildcardType.METHOD, fns, FieldOrMethodDescriptor(md.descriptor))
205+
wildcards?.flatMap { it.access }?.forEach {
206+
it.apply(acc)
207+
}
201208
AccessFlag.isInheritable(acc) && !md.name.startsWith("<")
202209
}.toMutableList()
203210

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package xyz.wagyourtail.unimined.mapping.tree
33
import xyz.wagyourtail.commonskt.utils.escape
44
import xyz.wagyourtail.commonskt.utils.maybeEscape
55
import xyz.wagyourtail.unimined.mapping.Namespace
6+
import xyz.wagyourtail.unimined.mapping.formats.umf.UMFWriter
67
import xyz.wagyourtail.unimined.mapping.jvms.JVMS
78
import xyz.wagyourtail.unimined.mapping.jvms.ext.FieldOrMethodDescriptor
89
import xyz.wagyourtail.unimined.mapping.jvms.ext.FullyQualifiedName
@@ -366,14 +367,19 @@ abstract class AbstractMappingTree : BaseNode<MappingVisitor, NullVisitor>(null)
366367
override fun acceptInner(visitor: MappingVisitor, nsFilter: Collection<Namespace>) {
367368
visitor.visitHeader(*nsFilter.filter { namespaces.contains(it) }.map { it.name }.toTypedArray())
368369
super.acceptInner(visitor, nsFilter)
369-
for (pkg in packagesIter()) {
370-
pkg.second().accept(visitor, nsFilter)
370+
for (pkg in packagesIter().asSequence().map { it.second() }.sortedBy { it.toString() }) {
371+
pkg.accept(visitor, nsFilter)
371372
}
372-
for (cls in classesIter()) {
373-
cls.second().accept(visitor, nsFilter)
373+
for (cls in classesIter().asSequence().map { it.second() }.sortedBy { it.toString() }) {
374+
cls.accept(visitor, nsFilter)
374375
}
375-
for (group in constantGroupsIter()) {
376-
group.second().accept(visitor, nsFilter)
376+
for (group in constantGroupsIter().asSequence().map { it.second() }.sortedBy { it.toString() }) {
377+
group.accept(visitor, nsFilter)
377378
}
378379
}
380+
381+
override fun toUMF(inner: Boolean) = buildString {
382+
acceptInner(UMFWriter.write(::append, false), namespaces)
383+
}
384+
379385
}

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/tree/node/AccessNode.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import xyz.wagyourtail.unimined.mapping.visitor.AccessParentVisitor
1111
import xyz.wagyourtail.unimined.mapping.visitor.AccessType
1212
import xyz.wagyourtail.unimined.mapping.visitor.AccessVisitor
1313
import xyz.wagyourtail.unimined.mapping.visitor.EmptyAccessParentVisitor
14+
import xyz.wagyourtail.unimined.mapping.visitor.EmptyAccessVisitor
15+
import xyz.wagyourtail.unimined.mapping.visitor.delegate.DelegateAccessVisitor
1416

1517
class AccessNode<U: AccessParentVisitor<U>>(parent: BaseNode<U, *>, val accessType: AccessType, val accessFlag: AccessFlag, val conditions: AccessConditions) : BaseNode<AccessVisitor, U>(parent), AccessVisitor {
1618
private val _namespaces: MutableSet<Namespace> = mutableSetOf()
@@ -27,13 +29,6 @@ class AccessNode<U: AccessParentVisitor<U>>(parent: BaseNode<U, *>, val accessTy
2729
return visitor.visitAccess(accessType, accessFlag, conditions, ns)
2830
}
2931

30-
override fun toString() = buildString {
31-
val delegator = UMFWriter.UMFWriterDelegator(::append, true)
32-
delegator.namespaces = root.namespaces
33-
delegator.visitAccess(EmptyAccessParentVisitor(), accessType, accessFlag, conditions, namespaces)
34-
// acceptInner(DelegateAccessVisitor(EmptyAccessVisitor(), delegator), root.namespaces)
35-
}
36-
3732
fun apply(set: MutableSet<AccessFlag>) {
3833
if (conditions.check(set)) {
3934
if (accessType == AccessType.ADD) {
@@ -44,4 +39,11 @@ class AccessNode<U: AccessParentVisitor<U>>(parent: BaseNode<U, *>, val accessTy
4439
}
4540
}
4641

42+
override fun toUMF(inner: Boolean) = buildString {
43+
val delegator = UMFWriter.UMFWriterDelegator(::append, true)
44+
delegator.namespaces = root.namespaces
45+
delegator.visitAccess(EmptyAccessParentVisitor(), accessType, accessFlag, conditions, namespaces)
46+
if (inner) acceptInner(DelegateAccessVisitor(EmptyAccessVisitor(), delegator), root.namespaces)
47+
}
48+
4749
}

src/commonMain/kotlin/xyz/wagyourtail/unimined/mapping/tree/node/AccessParentNode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ abstract class AccessParentNode<T: AccessParentVisitor<T>, U: BaseVisitor<U>>(pa
1414
val access: List<AccessNode<T>> get() = _access
1515

1616
override fun acceptInner(visitor: T, nsFilter: Collection<Namespace>) {
17-
for (access in access) {
17+
for (access in access.sortedBy { it.toString() }) {
1818
access.accept(visitor, nsFilter)
1919
}
2020
super.acceptInner(visitor, nsFilter)

0 commit comments

Comments
 (0)