Hi Christian, thanks for your feedback, I hope you're doing well!
> I have some concerns that the caching of non-existing classes could be > exploited and bloat the cache. Maybe we’d need to use WeakHashMap > (and/or soft references) instead? I didn't think about that, I'll try to come up with a better solution. >> I'm not sure why BaseX tries to load our xqm as Java Modules, but >> what I noticed is that Reflect.forName caches the positive case >> (i.e., the class is found), but not the negative case (i.e., the class is >> not found). > > Sounds like an interesting finding; maybe there’s something we can > optimize here. Could you possibly provide us a little self-contained > example that demonstrates the behavior? Sure. This is what I'm doing: Given the following module (installed with module install foo.xqm): module namespace uc = 'http://unifits.com/common'; declare function uc:remove-elements($input as element(), $remove-names as xs:string*) as element() { element {node-name($input) } {$input/@*, for $child in $input/node()[not(local-name() = $remove-names)] return if ($child instance of element()) then uc:remove-elements($child, $remove-names) else $child } }; if I start BaseXGui in debug mode, and set a breakpoint in Reflect.forName(), every time I execute a query such as import module namespace uc = 'http://unifits.com/common'; / the breakpoint is hit, i.e. Class.forName() is called. I *think* this might have to do with the fact that the function above is recursive, but I have to admit that I don't really grasp the code that does the module loading/parsing. Thanks, -tom