File tree Expand file tree Collapse file tree
src/jvmMain/kotlin/io/github/dingyi222666/luaparser/interop/jvm Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -96,6 +96,19 @@ object DexClassModelAdapter {
9696 )
9797 }
9898
99+ /* *
100+ * Per-class ModuleType memo: building a framework class surface (hundreds of
101+ * reflected-style members from the dex) costs seconds on a phone; every
102+ * completion/hover over a dex-typed value re-requests the same class. Keyed
103+ * by binary name; surfaces are immutable so sharing is safe.
104+ */
105+ private val moduleTypeByBinaryName = java.util.concurrent.ConcurrentHashMap <String , ModuleType >()
106+
107+ fun cachedModuleType (cls : DexClass , dexClasses : Collection <DexClass >): ModuleType =
108+ moduleTypeByBinaryName.computeIfAbsent(cls.binaryName) {
109+ toModuleType(cls, dexClasses)
110+ }
111+
99112 /* *
100113 * Adapt one dex class into the provider-shaped module table:
101114 * `__class` (instance shell), `__call` (when constructors exist), public
Original file line number Diff line number Diff line change @@ -205,7 +205,7 @@ object DexLibraryMounter {
205205 */
206206 fun moduleTypeFor (cls : DexClass ): ModuleType {
207207 moduleTypeCache[cls.binaryName]?.let { return it }
208- val moduleType = DexClassModelAdapter .toModuleType (cls, classes)
208+ val moduleType = DexClassModelAdapter .cachedModuleType (cls, classes)
209209 moduleTypeCache[cls.binaryName] = moduleType
210210 return moduleType
211211 }
You can’t perform that action at this time.
0 commit comments