Alen et al, here is a VersionedJarFile implementation that filters out inappropriate inner classes:
https://gist.github.com/gregw/8f305e369d0b769e9c3fe791a0634b13 cheers On 16 September 2017 at 07:58, Greg Wilkins <gr...@webtide.com> wrote: > > Alan, > > I had a quick look at `jdk.internal.util.jar.VersionedStream` and have > the following comments: > > - The style of the API is fine - pass in a JarFile and get a > Stream<JarEntry>. > - It might be better to have a Stream<VersionedJarEntry> which > includes a method to query the actual version of each entry. > - I think the stream needs to handle inner classes and only include > them if their matching outerclass is available at the same version. So for > example a base Foo$Bar.class will only be included if the stream includes a > base Foo.class, and it will not be included if the Foo.class is version 9 > or above. Likewise a version 9 Foo$Bar.class will only be included in the > stream if the stream also includes a version 9 Foo.class, and will not be > included if the stream has a version 10 or above Foo.class > > If you think this last point is possible, then I'll move the discussion > back the EE expert groups to try to get an agreement on the exact stream > code that will be used in the mid term until it is available in the JRE > lib, at which time the specs should be amended to say they will defer the > decision of which classes to scan the JRE lib so they will be future proof > for any changes in java 10, 11 etc. > > cheers > > > > > On 15 September 2017 at 17:27, Alan Bateman <alan.bate...@oracle.com> > wrote: > >> >> >> On 15/09/2017 03:09, Greg Wilkins wrote: >> >>> >>> Alan, >>> >>> thanks for correcting me on the API of JarFile - I can see it kind of >>> works, but in a very bizarre way (it gives different content for entries >>> obtained via the enumerator vs the getJarEntry API, even though both >>> entries report the same name). But I'll discuss that elsewhere. >>> >> This is something that was discussed on core-libs-dev on a number of >> occasions. The summary is that JarFile needs a new API for this, >> versionedStream() was suggested, but it was kicked down the road for later >> in order deal with the fallout from adding MR JARs. >> >> Since you have access to the code then look at >> jdk.internal.util.jar.VersionedStream for an example code of what I >> think you are looking for. >> >> -Alan >> > > > > -- > Greg Wilkins <gr...@webtide.com> CTO http://webtide.com > -- Greg Wilkins <gr...@webtide.com> CTO http://webtide.com