Hi Alan, I am trying this in SimpleStub, and it seems to work for my current test cases if I do this: > MethodHandles.Lookup in = MethodHandles.privateLookupIn( baseClass, > MethodHandles.lookup() ).dropLookupMode( MethodHandles.Lookup.PRIVATE ); > return in.defineClass(classBytes);
My tests create stubs from public, package-private and protected classes. Is that what you are expecting? It seems a bit overly complex. In gmbal, I see that this may not suffice, as the current interfaces provide no way to supply a class to use as a base. Figuring out how those interfaces are being used might change my answer. - Russ > On Mar 7, 2017, at 9:15 AM, Alan Bateman <alan.bate...@oracle.com> wrote: > > One of the issues that strong encapsulation exposes is the number of > libraries and frameworks that hack into the ClassLoader's defineClass methods > to define proxy and other classes. We've been looking to get some of these > use-cases onto a "supported footing" for some time. To that end, a promising > proposal is to add a defineClass method to MethodHandles.Lookup so that a > class can be defined to the same class loader and in the same runtime package > as the Lookup's lookup class. > > An initial implementation of Lookup.defineClass is in the current Jigsaw EA > builds [1], the javadoc is also online [2]. We are currently looking for help > in trying out this method to see how it might be used to replace existing > hacks. The proposed method is not a drop-in replacement for the non-public > ClassLoader.defineClass, it instead relies on being able to obtain a Lookup > with PACKAGE access on a target class in the package. The Lookup is ideally > obtained cooperatively but it could be obtained non-cooperatively too (using > the new privateLookupIn and dropping PRIVATE access for example). Using a > Lookup is likely a significant change for frameworks using bytecode libraries > today and it might be that a number of libraries will need to be updated to > try this out. If you do try it out then please reply here and let us know how > you got on. > > -Alan > > [1] https://jdk9.java.net/jigsaw/ > [2] > http://download.java.net/java/jigsaw/docs/api/java/lang/invoke/MethodHandles.Lookup.html#defineClass-byte:A- >