On Thu, 23 Jan 2025 02:04:33 GMT, Ioi Lam <ik...@openjdk.org> wrote:

>> I reimplemented 
>> `SystemDictionaryShared::lookup_super_for_unregistered_class()` with Java 
>> code. This removes hacks in 
>> `SystemDictionary::resolve_with_circularity_detection()` to facilitate 
>> future clean-ups there that are planned by @coleenp. Please see the [JBS 
>> issue](https://bugs.openjdk.org/browse/JDK-8348240) for a discussion of why 
>> the hack was there.
>> 
>> The new Java code is in the `jdk/internal/misc/CDS$UnregisteredClassLoader` 
>> class. I also simplified `UnregisteredClasses::create_classloader()` by 
>> moving some unwieldy C++ `JavaCalls` code into Java.
>> 
>> ### How this works:
>> 
>> For example, let's assume you have the following classfiles in foo.jar:
>> 
>> 
>> interface MyInterface1 {}
>> interface MyInterface2 {}
>> class MyClass extends Object implements MyInterface1, MyInterface2 {}
>> 
>> 
>> The CDS classlist file can look like this:
>> 
>> 
>> java/lang/Object id: 1
>> MyInterface1: id: 2 super: 1 source: foo.jar
>> MyInterface2: id: 3 super: 1 source: foo.jar
>> MyClass: id: 4 super: 1 interfaces: 2 3 source: foo.jar
>> 
>> 
>> When CDS handles the `MyClass: id: 4` line, it calls 
>> `CDS$UnregisteredClassLoader::load()` with the following parameters:
>> 
>> - `name` = "MyClass"
>> - `superClass` = java.lang.Object
>> - `interfaces` = {MyInterface1, MyInterface2} 
>> 
>> `CDS$UnregisteredClassLoader::load()` will start parsing MyClass.class from 
>> foo.jar. The ClassFileParser will see symbolic references to the supertypes 
>> of `MyClass`. These supertypes will be resolved by 
>> `CDS$UnregisteredClassLoader::findClass()`, using the classes provided by 
>> `superClass` and `interfaces`.
>
> Ioi Lam has updated the pull request with a new target base due to a merge or 
> a rebase. The incremental webrev excludes the unrelated changes brought in by 
> the merge/rebase. The pull request contains three additional commits since 
> the last revision:
> 
>  - Merge branch 'master' into 
> 8348240-remove-lookup_super_for_unregistered_class
>  - @calvinccheung comments
>  - 8348240: Remove 
> SystemDictionaryShared::lookup_super_for_unregistered_class()

Thanks for the update.

-------------

Marked as reviewed by ccheung (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/23226#pullrequestreview-2570418706

Reply via email to