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