@@ -6,25 +6,24 @@ import kotlinx.coroutines.sync.withLock
66import okio.Buffer
77import okio.BufferedSource
88import okio.use
9- import xyz.wagyourtail.commonskt.collection.finalizable.finalizableListOf
9+ import xyz.wagyourtail.commonskt.collection.defaultedMapOf
1010import xyz.wagyourtail.commonskt.collection.finalizable.finalizableMapOf
1111import xyz.wagyourtail.commonskt.collection.finalizable.finalizableSetOf
1212import xyz.wagyourtail.commonskt.properties.FinalizeOnRead
1313import xyz.wagyourtail.commonskt.properties.LazyMutable
1414import xyz.wagyourtail.commonskt.utils.associateWithNonNull
15- import xyz.wagyourtail.commonskt.utils.coroutines.parallelMap
1615import xyz.wagyourtail.unimined.mapping.EnvType
1716import xyz.wagyourtail.unimined.mapping.Namespace
1817import xyz.wagyourtail.unimined.mapping.formats.FormatProvider
1918import xyz.wagyourtail.unimined.mapping.formats.FormatRegistry
2019import xyz.wagyourtail.unimined.mapping.formats.umf.UMFWriter
2120import xyz.wagyourtail.unimined.mapping.formats.zip.ZipFS
21+ import xyz.wagyourtail.unimined.mapping.tree.AbstractMappingTree
2222import xyz.wagyourtail.unimined.mapping.tree.MemoryMappingTree
2323import xyz.wagyourtail.unimined.mapping.util.*
2424import xyz.wagyourtail.unimined.mapping.visitor.MappingVisitor
25- import xyz.wagyourtail.unimined.mapping.visitor.delegate.DelegateClassVisitor
26- import xyz.wagyourtail.unimined.mapping.visitor.delegate.NameCopyDelegate
2725import xyz.wagyourtail.unimined.mapping.visitor.delegate.nsFiltered
26+ import xyz.wagyourtail.unimined.mapping.visitor.fixes.renest
2827import kotlin.jvm.JvmOverloads
2928import kotlin.time.measureTime
3029
@@ -42,8 +41,6 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
4241 private val _entries = finalizableMapOf<String , MappingEntry >()
4342 val entries: Map <String , MappingEntry > get() = _entries
4443
45- val afterLoad = finalizableListOf<MemoryMappingTree .() - > Unit > ()
46-
4744 lateinit var namespaces: Map <Namespace , Boolean >
4845 private set
4946
@@ -89,7 +86,6 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
8986 finalized = true
9087 _entries .finalize()
9188 _entries .values.forEach { it.finalize() }
92- afterLoad.finalize()
9389 }
9490
9591 fun addDependency (key : String , dependency : MappingEntry ) {
@@ -99,11 +95,14 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
9995 _entries [key] = dependency
10096 }
10197
102- abstract fun createForPostProcess (key : String ): T
98+ abstract fun createForPostProcess (key : String , process : MemoryMappingTree .() -> Unit ): T
10399
104100 @JvmOverloads
105- fun postProcessDependency (key : String , intern : @Scoped T .() -> Unit , postProcess : MappingEntry .() -> Unit = {}) {
106- val resolver = createForPostProcess(key)
101+ fun postProcessDependency (key : String ,
102+ intern : @Scoped T .() -> Unit ,
103+ process : MemoryMappingTree .() -> Unit ,
104+ postProcess : MappingEntry .() -> Unit ) {
105+ val resolver = createForPostProcess(key, process)
107106 resolver.intern()
108107
109108 addDependency(key, MappingEntry (object : ContentProvider {
@@ -133,10 +132,6 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
133132
134133 open suspend fun writeCache (key : String , tree : MemoryMappingTree ) {}
135134
136- open suspend fun afterLoad (tree : MemoryMappingTree ) {
137- afterLoad.forEach { it(tree) }
138- }
139-
140135 open suspend fun resolve (): MemoryMappingTree {
141136 if (::resolved.isInitialized) return resolved
142137 return resolveLock.withLock {
@@ -201,13 +196,25 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
201196 it(acc)
202197 }
203198 try {
199+ val target = if (entry.preProcess.isNotEmpty()) {
200+ MemoryMappingTree ()
201+ } else {
202+ visitor
203+ }
204204 entry.provider.read(
205205 entry.content.content(),
206206 resolved,
207- visitor ,
207+ target ,
208208 envType,
209209 entry.mapNs.map { it.key.name to it.value.name }.toMap()
210210 )
211+ if (target != visitor) {
212+ target as MemoryMappingTree
213+ for (it in entry.preProcess) {
214+ it(target)
215+ }
216+ target.accept(visitor)
217+ }
211218 } catch (e: Throwable ) {
212219 throw IllegalStateException (" Error reading $entry " , e)
213220 }
@@ -232,12 +239,16 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
232239 LOGGER .info { " Propagated in $it " }
233240 }
234241
235- LOGGER .info { " Post processing ..." }
242+ LOGGER .info { " Renesting inner classes ..." }
236243
237- measureTime {
238- afterLoad(resolved!! )
239- }.also {
240- LOGGER .info { " Post processed in $it " }
244+ val renest = defaultedMapOf<Namespace , MutableSet <Namespace >> { mutableSetOf () }
245+ for (entry in sorted) {
246+ renest[entry.requires].addAll(entry.renest)
247+ }
248+ for ((key, value) in renest) {
249+ if (value.isNotEmpty()) {
250+ resolved!! .renest(key, value)
251+ }
241252 }
242253
243254 LOGGER .info { " Re-resolving fields and methods..." }
@@ -336,10 +347,12 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
336347 var requires: Namespace by FinalizeOnRead (Namespace (" official" ))
337348 val provides = finalizableSetOf<Pair <Namespace , Boolean >>()
338349 val mapNs = finalizableMapOf<Namespace , Namespace >()
350+ val renest = finalizableSetOf<Namespace >()
339351
340352 var skip by FinalizeOnRead (false )
341353
342354 val insertInto = finalizableSetOf< (MappingVisitor ) -> MappingVisitor > ()
355+ val preProcess = finalizableSetOf< (AbstractMappingTree ) -> Unit > ()
343356
344357 var provider by FinalizeOnRead (LazyMutable {
345358 val format = FormatRegistry .autodetectFormat(envType, content.fileName(), content.content())
@@ -366,6 +379,14 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
366379 mapNs.putAll(ns.map { Namespace (it.first) to Namespace (it.second) })
367380 }
368381
382+ fun renest () {
383+ renest.addAll(provides.map { it.first })
384+ }
385+
386+ fun renest (vararg ns : String ) {
387+ renest.addAll(ns.map { Namespace (it) })
388+ }
389+
369390 fun combineWith (other : MappingConfig ) {
370391 requires = other.requires
371392 provides.addAll(other.provides)
@@ -378,6 +399,9 @@ abstract class MappingResolver<T : MappingResolver<T>>(val name: String) {
378399 requires.name
379400 provides.finalize()
380401 insertInto.finalize()
402+ mapNs.finalize()
403+ renest.finalize()
404+ preProcess.finalize()
381405 }
382406
383407 }
0 commit comments