Integrated: 8348240: Remove SystemDictionaryShared::lookup_super_for_unregistered_class()

Ioi Lam iklam at openjdk.org
Thu Jan 23 22:06:00 UTC 2025


On Wed, 22 Jan 2025 03:28:00 GMT, Ioi Lam <iklam at 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`.

This pull request has now been integrated.

Changeset: 7f16a087
Author:    Ioi Lam <iklam at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/7f16a0875ced8669b9d2131c67496a66e74ea36f
Stats:     346 lines in 10 files changed: 193 ins; 115 del; 38 mod

8348240: Remove SystemDictionaryShared::lookup_super_for_unregistered_class()

Reviewed-by: ccheung, coleenp

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

PR: https://git.openjdk.org/jdk/pull/23226


More information about the core-libs-dev mailing list