----- Mail original ----- > De: "Matej Novotny" <manov...@redhat.com> > À: "Remi Forax" <fo...@univ-mlv.fr> > Cc: "Alan Bateman" <alan.bate...@oracle.com>, jigsaw-dev@openjdk.java.net, > "Tomas Remes" <tre...@redhat.com>, "Martin > Kouba" <mko...@redhat.com> > Envoyé: Mercredi 26 Avril 2017 16:04:08 > Objet: Re: setAccessible() alternative with Jigsaw - feedback on Lookup
>> You can spin one module per package, by creating one ModuleLayer per package, >> not unlike j.l.r.Proxy does. > > Don't know a bit about it, but it sounds like a way worth exploring. > Would you have a pointer towards some code showing how to deal with > ModuleLayers? > > Also checking on j.l.r.Proxy, it uses the "good old" Unsafe.defineClass. > Can't really see any module-related magic there. snap, sorry, the code has changed since the last time i looked at it, or it was another code ... the recipe is: 1. create a module with ModuleDescriptor.Builder [1] add the package you need with packages() 2. create an implementation of ModuleFinder [2] that only find that module 3. create a Configuration [3] like that resolve your module ModuleLayer boot = ModuleLayer.boot(); Configuration cf = boot.configuration().resolve(finder, ModuleFinder.of(), moduleName); 4. create a classloader ClassLoader classLoader = new ClassLoader(parentClassLoader()) { /* make defineClass more visible */}; 5. create your own layer [4] ModuleLayer layer = boot.defineModulesWithOneLoader(cf, classloader; 6. profit (i.e. now you can call define class on your classloader) > > Matej Rémi [1] http://download.java.net/java/jdk9/docs/api/java/lang/module/ModuleDescriptor.Builder.html [2] http://download.java.net/java/jdk9/docs/api/java/lang/module/ModuleFinder.html [3] http://download.java.net/java/jdk9/docs/api/java/lang/module/Configuration.html#resolve-java.lang.module.ModuleFinder-java.lang.module.ModuleFinder-java.util.Collection- [4] http://download.java.net/java/jdk9/docs/api/java/lang/ModuleLayer.html#defineModulesWithOneLoader-java.lang.module.Configuration-java.lang.ClassLoader-